La majoria de sistemes operatius moderns es construeixen sobre dècades de codi acumulat, biblioteques i dependències externes. Tot i que aquest ecosistema permet un desenvolupament ràpid, també introdueix complexitat, supòsits ocults i riscos de seguretat potencialment no examinats.

EriX adopta un enfocament diferent.

Es desenvolupa com un sistema operatiu de sala neta, cosa que significa que cada component - des del carregador d’arrencada fins als serveis d’espai d’usuari - s’implementa dins del mateix projecte, sense incorporar codi font extern ni biblioteques de tercers.

Aquest article explora què significa el desenvolupament de sala neta a la pràctica, per què és útil i quins compromisos introdueix.


Què significa “sala neta”?

En el context d’EriX, el desenvolupament de sala neta significa:

  • No es copia ni es reutilitza codi font extern
  • No s’inclouen biblioteques ni crates de tercers
  • Tots els components s’implementen dins del projecte
  • Només es poden consultar especificacions i documentació públiques

El resultat és un sistema en què cada línia de codi és:

  • entesa
  • auditable
  • dissenyada intencionadament

Això no és només una decisió legal o de llicències; és una decisió arquitectònica.


Per què evitar codi extern?

Evitar dependències externes pot semblar restrictiu. El desenvolupament modern de programari normalment fomenta la reutilització, i els grans ecosistemes existeixen precisament per evitar reinventar la roda.

Tanmateix, els sistemes operatius no són aplicacions típiques.

1. Complexitat oculta

El codi extern sovint porta supòsits implícits:

  • sobre la disposició de memòria
  • sobre els models de concurrència
  • sobre la gestió d’errors
  • sobre el comportament de la plataforma

Aquests supòsits poden no encaixar amb l’arquitectura d’un nou sistema operatiu, especialment un construït al voltant de capacitats i aïllament estricte.


2. Base de computació de confiança (TCB) ampliada

Cada dependència augmenta la mida de la base de computació de confiança.

Si s’utilitza una biblioteca de tercers al nucli o en components crítics del sistema, la seva correcció passa a formar part de les garanties de seguretat del sistema.

El desenvolupament de sala neta manté la TCB:

  • petita
  • controlada
  • definida explícitament

3. Auditabilitat i verificació

Un sistema construït íntegrament internament es pot auditar sistemàticament.

  • Es pot revisar tot el codi unsafe
  • Es poden documentar tots els invariants
  • Es pot raonar sobre totes les interfícies

Això és especialment important per a un sistema com EriX, que posa l’èmfasi en:

  • autoritat explícita
  • seguretat basada en capacitats
  • disseny mínim del nucli

4. Llibertat arquitectònica

Reutilitzar codi existent sovint restringeix les decisions de disseny.

Per exemple:

  • adoptar una biblioteca pot imposar una forma concreta d’API
  • integrar codi existent pot requerir capes de compatibilitat
  • les abstraccions heretades poden filtrar-se als nous components

El desenvolupament de sala neta permet que el sistema es modeli completament segons els seus propis principis, en lloc de restriccions heretades.


Sala neta vs. reimplementació

És important distingir el desenvolupament de sala neta d’una simple reimplementació.

El desenvolupament de sala neta no vol dir reescriure sistemes existents a cegues.

En canvi, implica:

  • estudiar especificacions públiques
  • entendre els principis subjacents
  • dissenyar noves implementacions des de primers principis

Per exemple:

  • Un sistema de fitxers pot seguir la semàntica POSIX, però implementar-se de manera independent
  • Un carregador d’arrencada pot seguir les especificacions UEFI, però utilitzar una estructura personalitzada
  • Una biblioteca estàndard de C pot exposar la mateixa API, però estar escrita íntegrament en Rust

L’objectiu és la compatibilitat quan cal, sense reutilització de codi.


Sala neta a la pràctica

A EriX, les restriccions de sala neta s’apliquen a tot el sistema.

Sense crates externs

Fins i tot en Rust, on la reutilització de dependències és comuna, EriX evita els crates externs.

En canvi, defineix components reutilitzables interns com ara:

  • utilitats de memòria
  • primitives de sincronització
  • abstraccions de capacitats

Biblioteques internes

La funcionalitat reutilitzable s’organitza en crates interns, per exemple:

  • lib-bootimg
  • lib-capabi
  • lib-ipc

Aquestes biblioteques són:

  • versionades
  • controlades dins del projecte
  • dissenyades específicament per a les necessitats del sistema

Estructura estricta del repositori

Cada subsistema està aïllat:

  • carregador d’arrencada
  • nucli
  • IPC
  • gestió de memòria
  • serveis d’espai d’usuari

Això imposa modularitat i evita acoblaments ocults.


Compilacions reproduïbles

El disseny de sala neta també s’estén al procés de compilació.

El sistema aspira a:

  • compilacions deterministes
  • supòsits mínims sobre la cadena d’eines
  • passos de compilació explícits

Això garanteix que els artefactes es puguin reproduir i verificar.


Beneficis d’un sistema operatiu de sala neta

1. Comprensió completa del sistema

Cada component és conegut i entès.

No hi ha dependències opaques ni comportaments ocults.


2. Model de seguretat més fort

Amb una TCB més petita i controlada:

  • hi ha menys superfícies d’atac
  • els invariants són més fàcils de fer complir
  • la seguretat basada en capacitats es pot implementar netament

3. Millor plataforma de recerca

EriX no és només un sistema operatiu; també és una plataforma de recerca.

El desenvolupament de sala neta permet:

  • experimentar amb noves abstraccions
  • mesurar amb precisió els compromisos de disseny
  • raonar clarament sobre autoritat i aïllament

4. Mantenibilitat a llarg termini

Tot i que inicialment requereix més feina, els sistemes de sala neta poden ser més fàcils de mantenir:

  • sense trencaments de dependències
  • sense canvis upstream a seguir
  • sense conflictes de versions

El sistema evoluciona en els seus propis termes.


Compromisos i reptes

El desenvolupament de sala neta no és gratuït.

1. Desenvolupament més lent

Tot s’ha de construir des de zero:

  • biblioteques bàsiques
  • suport de runtime
  • serveis del sistema

Això incrementa significativament l’esforç inicial.


2. Reinventar la roda

Molts problemes ja s’han resolt en altres llocs.

Reimplementar-los requereix temps i un disseny acurat.


3. Menys dreceres

No hi ha la possibilitat de:

  • importar ràpidament una biblioteca
  • confiar en ecosistemes existents
  • delegar complexitat a codi extern

Tota la complexitat s’ha de gestionar directament.


4. Més responsabilitat de disseny

Cada abstracció s’ha de dissenyar deliberadament.

Els errors no es poden tapar fàcilment canviant dependències.


Per què aquest enfocament encaixa amb EriX

EriX es construeix al voltant d’uns quants principis centrals:

  • base de computació de confiança mínima
  • autoritat explícita mitjançant capacitats
  • separació estricta entre nucli i espai d’usuari
  • reproduïbilitat i determinisme

El desenvolupament de sala neta dona suport a tots aquests objectius.

Garanteix que:

  • l’autoritat mai no quedi amagada dins de codi extern
  • els invariants del sistema estiguin completament controlats
  • l’arquitectura es mantingui coherent en tots els components

Una base per al self-hosting

El disseny de sala neta també dona suport a l’objectiu a llarg termini del self-hosting.

Per construir EriX dins d’EriX, el sistema ha d’incloure:

  • la seva pròpia cadena d’eines
  • les seves pròpies biblioteques de runtime
  • les seves pròpies interfícies de sistema

Un sistema que depèn fortament de components externs tindria dificultats per assolir aquest nivell d’independència.


Mirant endavant

Dissenyar un sistema operatiu de sala neta és un esforç a llarg termini. Requereix planificació acurada, implementació disciplinada i voluntat de construir components fonamentals des de zero.

Però també crea un sistema que és:

  • transparent
  • controlat
  • profundament entès

En articles futurs passarem dels principis a la implementació, començant pel procés d’arrencada inicial i el disseny del format d’imatge d’arrencada del sistema.