Per què estic construint un micronucli basat en capacitats des de zero
Els sistemes operatius són entre les peces de programari més complexes que s’han construït mai. Gestionen la memòria, planifiquen el càlcul, controlen el maquinari i imposen els límits de seguretat que protegeixen cada aplicació que s’executa en una màquina.
Tot i això, molts dels sistemes operatius dels quals depenem avui es basen en idees arquitectòniques de fa diverses dècades. Encara que aquests sistemes són extraordinàriament potents i provats, també arrosseguen dècades de complexitat acumulada.
Aquest projecte explora una direcció diferent: construir un sistema operatiu modern de micronucli basat en capacitats des de zero, amb un fort focus en l’autoritat explícita, una base de computació de confiança (TCB) mínima i una separació estricta entre nucli i espai d’usuari.
Aquest sistema operatiu s’anomena EriX.
Per què construir un altre sistema operatiu?⌗
A primer cop d’ull, construir un nou sistema operatiu sembla innecessari. Sistemes madurs com Linux, Windows i BSD ja existeixen i fan funcionar milers de milions de dispositius.
Tanmateix, aquests sistemes van evolucionar sota limitacions històriques. Amb el temps han acumulat capes d’abstraccions, mecanismes de compatibilitat i interfícies heretades. Tot i que aquestes funcionalitats sovint són necessàries en programari real, també dificulten experimentar amb idees arquitectòniques fonamentalment diferents.
Els sistemes operatius de recerca fa molt de temps que exploren enfocaments alternatius del disseny de sistemes operatius. Els micronuclis, els sistemes de capacitats i els nuclis verificats formalment han demostrat que és possible construir sistemes més petits, més segurs i més fàcils de raonar.
L’objectiu d’EriX no és reemplaçar els sistemes operatius existents. Més aviat, és una exploració de com es podria dissenyar un sistema operatiu modern si comencem des de primers principis.
Micronuclis i base de computació de confiança⌗
Una de les idees centrals darrere d’EriX és l’arquitectura de micronucli.
Els nuclis monolítics tradicionals inclouen molts serveis directament dins el nucli. Sovint inclouen:
- controladors de dispositius
- sistemes de fitxers
- piles de xarxa
- subsistemes de gestió de processos
Tot i que aquest enfocament pot ser eficient, també incrementa la mida de la base de computació de confiança (TCB). La TCB inclou cada peça de codi que ha de comportar-se correctament perquè el sistema es mantingui segur i fiable.
Els micronuclis adopten un enfocament diferent.
Un micronucli manté dins el nucli només els mecanismes més fonamentals, normalment:
- planificació de fils
- gestió de l’espai d’adreces
- comunicació entre processos (IPC)
- gestió de capacitats
- gestió d’interrupcions i excepcions
Tota la resta s’executa en espai d’usuari, inclosos els controladors, els sistemes de fitxers i els serveis de nivell superior.
Aquest disseny redueix dràsticament la quantitat de codi en què cal confiar. Els errors en components d’espai d’usuari tenen menys probabilitat de comprometre tot el sistema, i els components individuals es poden reiniciar o substituir sense aturar el nucli.
Seguretat basada en capacitats⌗
Un altre principi central de disseny d’EriX és la seguretat basada en capacitats.
La majoria de sistemes operatius depenen fortament de l’autoritat ambiental. En aquests sistemes, els processos sovint tenen accés implícit als recursos basat en espais de noms globals, identitats d’usuari o privilegis heretats.
Per exemple, un procés pot obrir un fitxer simplement perquè en coneix el camí i el sistema operatiu decideix que té permís per accedir-hi.
Els sistemes de capacitats adopten un enfocament diferent.
Una capacitat és un testimoni infalsificable que concedeix accés a un objecte específic amb drets específics. Un procés només pot accedir a un objecte si posseeix una capacitat que autoritza aquest accés.
Les capacitats tenen diverses propietats importants:
- Representen l’autoritat de manera explícita.
- Es poden transferir entre processos.
- Poden restringir operacions a un conjunt precís de drets.
En un sistema basat en capacitats, l’autoritat flueix mitjançant transferències explícites en lloc d’espais de noms globals. Això fa que el sistema sigui més fàcil de raonar i ajuda a eliminar classes senceres de vulnerabilitats de seguretat.
Per què Rust?⌗
Tradicionalment, els sistemes operatius s’escriuen en C o assemblador. Aquests llenguatges proporcionen control precís sobre maquinari i memòria, però també faciliten la introducció d’errors subtils.
Els errors de seguretat de memòria, com ús després d’alliberar memòria, desbordaments de memòria intermèdia i condicions de carrera, han estat històricament una de les fonts més grans de vulnerabilitats en programari de sistemes.
EriX està escrit principalment en Rust.
Rust proporciona garanties fortes sobre seguretat de memòria, alhora que
permet control de baix nivell sobre el maquinari. El model de propietat del
llenguatge ajuda a prevenir moltes classes d’errors en temps de compilació,
mentre que els blocs unsafe explícits fan visibles i auditables les
operacions potencialment perilloses.
Fer servir Rust no elimina tots els errors possibles, però eleva significativament el nivell base de seguretat en programació de sistemes.
Un sistema operatiu de sala neta⌗
Un aspecte inusual del projecte EriX és el seu enfocament de desenvolupament de sala neta.
Tots els components del sistema s’implementen dins del mateix projecte. No es copia ni s’incorpora codi font extern, i no s’utilitzen biblioteques de tercers.
Aquesta restricció serveix a diversos propòsits:
- Garanteix que tot el sistema es pugui entendre i auditar.
- Evita dependències ocultes i comportaments inesperats.
- Força que les decisions arquitectòniques siguin explícites en lloc d’heretades.
El desenvolupament de sala neta també converteix el projecte en un exercici educatiu. Cada subsistema, des del carregador d’arrencada fins al gestor de memòria, s’ha de dissenyar i implementar deliberadament.
Un objectiu a llarg termini: autoallotjament⌗
Un dels objectius a llarg termini d’EriX és l’autoallotjament.
Un sistema es considera autoallotjat quan pot compilar el seu propi codi font fent servir eines que s’executen en el mateix sistema.
Per a EriX, això significa que eventualment:
- el compilador de Rust s’executa a EriX
- les eines de compilació s’executen a EriX
- tot el sistema operatiu es pot compilar nativament dins d’EriX
Assolir aquesta fita requereix implementar moltes capes d’infraestructura, incloent sistemes de fitxers, gestió de processos i un entorn d’espai d’usuari compatible amb POSIX.
Per què documentar el camí?⌗
Construir un sistema operatiu és un procés llarg i complex. Moltes de les idees més interessants no apareixen en el sistema final, sinó en les decisions, compromisos i errors trobats durant el camí.
Aquest blog documenta el desenvolupament d’EriX a mesura que evoluciona. Les publicacions futures cobriran temes com:
- dissenyar un format d’imatge d’arrencada
- implementar espais de capacitats
- construir un sistema IPC
- gestionar l’autoritat de memòria
- construir servidors en espai d’usuari
L’objectiu és fer que el procés de desenvolupament sigui transparent i educatiu.
Mirant endavant⌗
EriX encara es troba en una fase inicial. Molta part del sistema encara està per construir, i moltes decisions de disseny evolucionaran amb el temps.
Però els principis rectors ja són clars:
- nucli mínim
- autoritat explícita
- seguretat basada en capacitats
- modularitat estricta
- implementació de sala neta
A la propera publicació explorarem una de les idees clau del sistema:
què són els sistemes operatius basats en capacitats i per què importen.