seL4 — Microkernelul verificat matematic

seL4 este primul microkernel din lume verificat matematic complet.

Ce este seL4?

seL4 e un microkernel — un nucleu minimal de sistem de operare — care a fost verificat matematic complet. Asta înseamnă că s-a demonstrat formal, cu ajutorul theorem prover-ului Isabelle/HOL, că implementarea se comportă exact conform specificației sale, pentru orice intrare posibilă.

A fost dezvoltat inițial de NICTA (Australia) și publicat în 2009 la SOSP — una dintre cele mai prestigioase conferințe de sisteme. Rezultatul a fost descris drept „cel mai convingător exemplu de verificare formală a unui component software非-trivial" (Microsoft Research).

Astăzi, seL4 e gestionat de seL4 Foundation și folosit în producție în domenii unde o bug-ă costă vieți: avioane militare, mașini autonome, sateliți și sisteme de armament.

Arhitectura microkernel

Spre deosebire de monolitice (Linux) sau hibride (Windows), un microkernel mută majoritatea serviciilor de sistem în spațiul utilizator. Nucleul face doar minimul:

| Componentă | Kernel (spațiu privilegiat) | Userspace (spațiu utilizator) | |---|---|---| | Scheduling | ✅ Da | ❌ | | IPC (comunicare) | ✅ Da | ❌ | | Gestionare memorie | ✅ Paginare, capabilități | ❌ | | Drivere | ❌ | ✅ Drivere ca procese userspace | | Sisteme de fișiere | ❌ | ✅ Ca server userspace | | Networking | ❌ | ✅ Ca server userspace | | Autentificare | ❌ | ✅ Ca server userspace |

Avantaj: Dacă un driver de rețea cade, nu cade tot sistemul — doar procesul de rețea. Dezavantaj: IPC între componente are un cost, deci microkernel-ele sunt în general mai lente decât nucleele monolitice.

seL4 în cifre

| Măsurătoare | Valoare | |---|---| | Linii de cod C | ~8.700 | | Linii de cod ASM | ~600 | | Linii demonstrație formală | ~200.000 | | Raport demonstrație/cod | ~23:1 | | Timpul echipei inițiale | ~25 persoane · ani | | Dimensiune binar | ~50 KB | | Latență syscall | ~80 de cicli (pe ARM) | | IPC round-trip | ~150 de cicli |

Verificarea matematică — ce înseamnă

Verificarea formală a seL4 nu e „testare" — e o demonstrație matematică că programul e corect.

Proprietăți demonstrate

  1. Funcțional correctness: Implementarea C respectă specificația abstractă în Isabelle/HOL
  2. Absența deadlock-ului: Sistemul nu se blochează niciodată
  3. Absența livelock-ului: Task-urile nu pot intra în bucle fără progres
  4. Integritatea memoriei: Un task nu poate accesa memoria altui task decât prin IPC explicit
  5. Izolarea capabilităților: Un obiect poate fi accesat doar dacă task-ul deține o capabilitate

Cum funcționează demonstrația

Specificație abstractă (Isabelle/HOL)
        ↓ demonstrație
Specificație executabilă (Haskell)
        ↓ demonstrație
Implementare C (cod real compilabil)
        ↓
    Binar (prin gcc, fără demonstrație)

Fiecare nivel e demonstrat că refinează (implementează corect) nivelul de deasupra. Verification-ul acoperă tot codul C și ASM — dacă compilatorul (gcc) nu introduce bug-uri, binarul e corect.

Limitarea

Demonstrația nu acoperă hardware-ul. Dacă procesorul are un bug, sau memoria e afectată de radiații, verificarea nu ajută. De asta seL4 e adesea combinat cu hardware tolerante la defecte (EDAC, ECC, watchdog).

Capabilități — modelul de securitate

Spre deosebire de UNIX unde „orice proces root poate face orice", seL4 folosește un model orientat pe capabilități. Un task deține capabilități (token-uri) care îi permit să acceseze obiecte specifice.

Task A are capabilități:
  ✅ Citește memoria paginii X
  ✅ Trimite mesaje lui Task B
  ❌ Șterge fișierul /etc/passwd
  ❌ Citește memoria paginii Y (deținută de Task C)
  ❌ Creează un nou thread

Capabilitățile sunt transferabile — un task poate da o capabilitate altuia, dar nu o poate falsifica. Toate resursele sistemului (memorie, thread-uri, IPC) sunt controlate prin capabilități.

Arborele CNode

seL4 organizează capabilitățile într-un arbore numit CNode. Fiecare task are propriul CNode. Un task poate:

  • Crea sub-arbori (delega capabilități)
  • Transfera frunze (da capabilități altor task-uri)
  • Revoca capabilități (delete)

seL4 în contextul microkernel-elor L4

L4 e o familie de microkernel-e a treia generație, care a evoluat din primul microkernel L3 (Jochen Liedtke, 1993). seL4 e succesorul verificat formal al lui OKL4.

| Versiune | Caracteristici | |---|---| | L3 (1993) | Primul microkernel pragmatic, doar IPC + scheduling | | L4 (1995) | Versiune rescrisă, extrem de rapidă (~50 de instrucțiuni IPC) | | Pistachio (2001) | L4 portabil, C++, open-source | | OKL4 (2005) | L4 comercial de la OK Labs, folosit în telefoane | | seL4 (2009) | Verificat formal, open-source, seL4 Foundation |

Unde se folosește seL4

Militar și avionică

seL4 e certificat pentru DO-178C Level A (cea mai înaltă certificare de siguranță în avionică). Folosit în:

  • Sisteme de control al zborului
  • Armament și ghidaj
  • Comunicații militare sigure

Automotive

Certificare ISO 26262 ASIL D — cel mai înalt nivel de siguranță auto. Folosit în:

  • Braking-by-wire (frânare electronică)
  • Steering-by-wire (direcție electronică)
  • Sisteme LiDAR/cameră pentru mașini autonome

Aerospațial

seL4 e în studiu pentru sateliți și rover-e unde radiația poate corupe memoria — verificarea formală oferă garanții pe care testarea singură nu le poate da.

IoT și dispozitive critice

Deși mai mare decât FreeRTOS, seL4 oferă izolare reală între componente — un bug în stack-ul WiFi nu poate corupe datele medicale.

CAmkES — Component Architecture for seL4

CAmkES e un framework care permite definirea arhitecturii unui sistem seL4 sub formă de componente conectate prin interfețe:

component Senzor {
    provides SensorData data;
    uses Control ctrl;
}

component Controler {
    uses SensorData input;
    provides Control ctrl;
}

assembly {
    composition {
        component Senzor s;
        component Controler c;
        connection Connector data(from s.data, to c.input);
        connection Connector ctrl(from c.ctrl, to s.ctrl);
    }
}

Fiecare componentă rulează în propriul spațiu de adrese, iar conexiunile generează automat codul IPC. Sistemul rezultat are aceleași garanții de izolare ca și kernelul seL4.

Proiecte conexe

| Proiect | Descriere | |---|---| | seL4Core | Nucleul propriu-zis | | CAmkES | Arhitectură pe componente | | RefOS | Exemplu de SO simplu peste seL4 | | seL4test | Suită de teste | | HyperVisor seL4 | Virtualizare pe bază de seL4 | | Multikernel seL4 | Variantă SMP |

Critici și limitări

seL4 nu e potrivit pentru orice:

  • Complex: Configurarea unui sistem seL4 e semnificativ mai dificilă decât FreeRTOS sau Linux
  • Resurse: Necesită MMU, deci nu rulează pe microcontrolere ieftine (Cortex-M0)
  • Ecosistem: Mult mai puțin software disponibil decât pentru Linux
  • Performanță: IPC-ul e rapid, dar încă mai lent decât syscall-urile Linux
  • Demonstrația: Nu acoperă compilatorul, hardware-ul, sau bootloader-ul

Concluzie

seL4 rămâne cel mai convingător exemplu de verificare formală a unui sistem real. După 15+ ani de la publicare, încă e singurul kernel verificat matematic complet. Pe măsură ce costul bug-urilor software crește (mașini autonome, arme autonome, dispozitive medicale), abordarea seL4 — „demonstrează că e corect, nu doar testa" — devine din ce în ce mai relevantă.