AVR-arkitekturen har noen mangler og begrensninger som gjør det vanskelig å implementere et Unix-lignende operativsystem.
- AVR skiller kode fra stakken, haugen og statisk data (Harvard-arkitektur). Minnet som kode leses fra er ikke laget for å tåle mange store skriveoperasjoner. Dermed bør kode lastes opp så sjelden som mulig. I tillegg er minnet som regel veldig lite (det er snakk om kibibyte). Dermed er det viktig å kunne kjøre kode gjennom en virtuell maskin. Kode for virtuell maskin kan leses fra hvor som helst. Dessverre er det umulig å gjøre en virtuell maskin like rask som maskinen den kjører på. Det er viktig å finne en balanse mellom ytelse, størrelse og funksjonalitet i den virtuelle maskinen, og finne ut hvilke deler av systemet som skal kjøres på den.
- AVR har ingen MMU. Dermed må alt kjøre i kernel space. Uten minnebeskyttelse er det lite vits å forsøke å begrense brukeres tillatelser. På den lyse siden kan man spare ressurser ved å kvitte seg med alle delene av en kernel som avhenger av en MMU. Dessverre blir det umulig å få til forking av prosesser og en rekke andre viktige funksjoner. Mange av disse kan til dels erstattes av andre funksjoner (f. eks. vfork), men likevel forsvinner litt av grunnprinsippet i POSIX.
MIT kurs 6.828uClinux