# L4 (microkernel)

L4 és una família de micronuclis de segona generació basada en els dissenys i implementacions originals de l'informàtic alemany Jochen Liedtke. Originalment implementada en codi assemblador altament afinat per a processadors Intel i386, l'API ha patit grans desenvolupaments en diverses direccions, tant buscant un nivell més alt d'independència de plataforma com millorant seguretat, aïllament i robustesa. Hi ha hagut diverses implementacions de la interfície binària del nucli L4 (ABI) i els seus successors de més alt nivell, incloent-hi L4Ka :: Pistachio (Uni Karlsruhe), L4/MIPS (UNSW) i Fiasco (TU Dresden). Per això, el nom L4 ja no es refereix únicament a la implementació original de Liedtke, sinó que s'aplica a tota la família de micronuclis que inclouen la interfície del nucli L4 i les seves diferents versions.

## Paradigma de disseny

En explicar la idea d'un micronucli, Liedtke deia:
   Un concepte és tolerat dins d'un micronucli tan sols si movent-lo fora, és a dir, desenvolupant implementacions similars a nivell d'usuari, la funcionalitat requerida del sistema no podria ser totalment satisfeta.
D'aquesta manera, el micronucli L4 proporciona només quatre mecanismes bàsics: model de fils, un mecanisme per comunicació entre processos síncrona, scheduling i una abstracció de l'espai d'adreces.
Un sistema operatiu basat en un micronucli L4, ha de proporcionar els seus serveis a manera de "servidors" a espai usuari que els nuclis monolítics com Linux o micronuclis de generacions més antigues inclouen internament. Per exemple, per tenir un sistema segur tipus Unix, els servidors han de proveir el maneig de permisos que Mach incloïa dins el nucli.

## Història

En adonar-se dels problemes de disseny i rendiment de la primera generació del micronucli Mach, els seus programadors es van posar a reexaminar el concepte complet dels micronuclis a mitjans dels anys 90. Es va veure que la comunicació entre processos asíncrona inclosa dins el nucli utilitzada en Mach va arribar a ser una de les principals raons del seu baix rendiment. Això va induir a alguns dels programadors de Mach a incloure alguns components crítics dins el nucli (controladors de dispositius o sistemes d'arxius, per exemple), el que ocasionava un conflicte amb el concepte minimalista d'un micronucli real.

### L3

Jochen Liedtke va demostrar que una petita i ben dissenyada capa de comunicació entre processos implementada prestant atenció al rendiment ia coses específiques de la plataforma, milloraria el rendiment general del nucli. En lloc del complex sistema de comunicació entre processos de Mach, la seva micronucli L3 simplement passava els missatges sense agregar cap càrrega extra. Definir i implementar les polítiques de seguretat requerides es va considerar com una tasca que haurien implementar els servidors de l'espai d'usuari. El rol del nucli era només proveir el mecanisme necessari per permetre que els servidors en l'espai d'usuari, implementin i enforteixin aquestes polítiques. L3 va provar ser un sistema operatiu robust i segur usat per molts anys, per exemple per TÜV SÜD.

### L4

Després de certa experiència usant L3, Liedtke es va adonar que altres conceptes de Mach també estaven mal ubicats. En simplificar els conceptes dels micronuclis encara més, va desenvolupar el primer nucli L4 que estava dissenyat pensant principalment en un alt rendiment. Per incrementar absolutament tot el rendiment, el nucli complet va ser escrit en assemblador. El seu treball va causar una petita revolució en els cercles de disseny de sistemes operatius. Aviat el seu treball estava sent estudiat per un nombre d'universitat i instituts de recerca, incloent-hi IBM, on Liedtke va començar a treballar el 1996. Al Centre d'Investigació T.J. Watson d'IBM, Liedtke i els seus col·legues van continuar investigant sobre el L4 i sobre sistemes basats en micronuclis en general.

### L4Ka :: Hazelnut

El 1999, Liedtke es va fer càrrec del Grup d'Arquitectures de Sistemes a la Universitat de Karlsruhe, on va continuar la seva investigació en sistemes de micronuclis. Com a prova de concepte que un micronucli d'alt rendiment podria també ser construït en un llenguatge d'alt nivell, el grup va desenvolupar L4Ka :: Hazelnut, una versió escrita en C++ del nucli que corria en màquines basades en processadors IA32 i ARM. L'esforç va ser un èxit (el rendiment era encara acceptable) i amb la seva publicació les versions del nucli escrites en llenguatge d'assemblador van ser descontinuadas.

### Fiasco

Paral·lelament al desenvolupament de L4Ka :: Hazelnut, el 1998 el grup de sistemes operatius de la TEU Dresden (Technische Universität Dresden) va començar a desenvolupar la seva pròpia implementació en C++ de la interfície del nucli L4, anomenada Fiasco. En contrast a L4Ka :: Hazelnut que no permet concurrència en el nucli i el seu successor L4Ka :: Pistachio, que només permet interrupcions en el nucli en punts específics predefinits, Fiasco és totalment "preemptible" (amb excepció d'operacions atòmiques extremadament petites) i aconsegueix una molt baixa latència d'interrupció. Això era considerat necessari perquè Fiasco és usat com la base del DROPS, un sistema operatiu de temps real, també desenvolupat en TEU Dresden.

## Independència de plataforma
### L4Ka :: Pistachio

Fins a la publicació de L4Ka :: Pistachio i versions més actuals de Fiasco, tots els micronuclis L4 han estat inherentment lligats a l'arquitectura del processador on s'implementaven. La següent gran moguda en el desenvolupament de L4 va ser el salt a una API independent de plataforma que encara retingués les característiques d'alt rendiment tot i el seu nivell de portabilitat més alt. Tot i que els conceptes sobre els quals es fomentava el nucli eren els mateixos, la nova API proporcionava molts canvis radicals a les versions de L4 prèvies, incloent-hi millor suport per a sistemes multiprocessador, major separació entre fils i espais d'adreces i la introducció de blocs de control de fils a nivell d'usuari (UTCBs: User-level Thread Control Blocks) i registres virtuals. Després de publicar la nova API de L4 (versió X.2, també coneguda com a Versió 4) a principis de 2001, el Grup d'Arquitectura de Sistemes a la Universitat de Karlsruhe va implementar des de zero un nou nucli, 'L4Ka :: Pistachio ', enfocant-se en alt rendiment com també en portabilitat.

### Noves versions de Fiasco

El micronucli Fiasco per la seva part, ha estat millorat força en els últims anys. Actualment suporta diverses plataformes de maquinari incloent x86, amd64 i diverses plataformes ARM. Notablement, una versió de Fiasco (FiascoUX) pot executar com una aplicació a nivell d'usuari sobre de Linux.
Fiasco implementa diverses extensions a l'API L4v2. Les IPC d'excepcions permeten al nucli enviar excepcions de CPU a controladors d'excepcions en aplicacions implementades a nivell d'usuari. En l'ajuda de "fils aliens" és possible realitzar control granular sobre trucades a sistema. UTCBs tipus X.2 han estat també afegides, a més, Fiasco conté mecanismes per controlar permisos de comunicació tant com maneig de consum de recursos a nivell de nucli. Sobre Fiasco s'ha desenvolupat una col·lecció de serveis bàsics a nivell d'usuari (anomenats L4Env) que entre altres coses són usats per paravirtualizar una versió de Linux (2.6.x) (anomenada L4Linux).

### Universitat de Nova Gal·les del Sud i NICTA

L4 també es desenvolupa a la Universitat de Nova Gal·les del Sud (UNSW), on els programadors van implementar L4 en diverses plataformes de 64 bits. El seu treball va resultar en L4/MIPS i L4/Alpha, fent que la versió original de Liedtke es bategi retroactivament com L4/x86. Igual que els nuclis originals de Liedtle, els nuclis de la UNSW (escrits en una barreja d'assemblador i C) no eren portables i cadascun havia de ser implementat des de zero. Amb la publicació de l'altament portable L4Ka :: Pistachio, el grup de la UNSW abandonar els seus propis nuclis i es va posar a produir ports altament afinats de L4Ka :: Pistachio, incloent-hi la implementació més ràpida reportat de pas de missatges (36 cicles en l'arquitectura Itanium).
El grup també ha demostrat que els controladors de dispositius a nivell d'usuari poden tenir el mateix rendiment que controladors implementats en el nucli i desenvolupar Wombat, una versió altament portable de Linux en L4 que corre a processadors x86, ARM i MIPS. En processadors XScale, Wombat va demostrar que el cost de fer commutació de context era fins a 30 vegades menys que a Linux nadiu.

## Investigació i desenvolupament actual

Recentment, el grup de la UNSW en el seu nou centre a la National ICT Austràlia (NICTA), va fer un "fork" de L4Ka :: Pistachio i el va anomenar NICTA :: L4-embedded; com el seu nom ho diu, pretén ser usat en sistemes comercials encastats i conseqüentment, els detalls d'implementació fan que el consum de memòria sigui petit i la complexitat reduïda. L'API ha estat modificada perquè gairebé totes les crides al sistema siguin prou curtes com per no requerir punts de "preemption" per assegurar alta resposta en temps real.
El grup de NICTA ara s'enfoca en transformar L4 en una plataforma altament segura i fiable. Actualment s'està desenvolupant una prova formal de correctitud de la implementació.
Tot això és combinat amb el desenvolupament d'una nova L4 API, anomenada seL4, que pretén satisfer requeriments de seguretat com ara els de Criteri Comú. L'API seL4 és representada per una especificació executable escrita en Haskell. Hi ha un projecte similar sobre l'execució d'anàlisis exhaustives de latències en operacions de nuclis. Treballs addicionals estan desenvolupant marcs per construir sistemes componentizados sobre L4.
El projecte GNU Hurd estava considerant adoptar el micronucli L4 (GNU Hurd/L4) per substituir Mach, però el seu nou disseny basat en capacitats no és compatible amb L4 que no suporta capacitats. Possibles alternatives són L4.sec i Coyotos, amb una marcada preferència cap Coyotos (el seu desenvolupament ha estat fet públic, la seva especificació publicada i els esforços han estat fets per fer que Coyotos cobreixi totes les necessitats de Hurd).
Osker, un sistema operatiu escrit en Haskell, està pensat per complir l'especificació de L4, a Tot i que s'enfoca en l'ús de programació funcional per al desenvolupament de sistemes operatius, no s'enfoca estrictament en investigació sobre micronuclis.

## Implantació comercial

El novembre de 2005, NICTA anunciar que Qualcomm estava implementant la versió de L4 de NICTA en els xips dels seus Mobile Station Modem, el que va conduir a l'ús de L4 en alguns telèfons mòbils des de finals del 2006. L'agost de 2006, el cap de ERTOS i professor de la UNSW, Gernot Heiser, va obrir una empresa anomenada Open Kernel Labs Arxivat 2009-03-19 a Wayback Machine. (OK Labs) que s'encarregaria de proporcionar suport comercial als usuaris de L4 i a continuar el desenvolupament de L4 per al seu ús comercial, en una estreta col·laboració amb NICTA. OK Labs distribueix la seva pròpia versió de L4, anomenada OKL4 Arxivat 2008-08-20 a Wayback Machine., que és un descendent de NICTA :: L4-embedded i és suportat per x86, ARM and MIPS. OKL4
va ser inicialment distribuït sota una llicència BSD, però els últims missatges usen una llicència dual amb una llicència Sleepycat de codi obert. OK Labs també distribueix un Linux paravirtualitzat anomenat OKLinux, un descendent de Wombat.
L'abril de 2008, OK Labs va publicar el seu OKL4 2.1 que és la primera versió pública de L4 utilitzant un model de seguretat basat en capacitats.

## Referències

* ↑ Jochen Liedtke. «Proc. 15th ACM symposium on Operating Systems Principles (SOSP)» p. 237-250, 1995. Arxivat de l'original el 2009-03-18. [Consulta: 18 març 2013].
* ↑ Gray, Charles; Chapman, Matthew, Chubb, Peter; Mosberger-Tang, David; Heiser, Gernot. «Itanium-a system implementor s tale» p. 264-278, 2005.
* ↑ Leslie, Ben; Chubb, Peter; FitzRoy-Dona-li, Nicholas; Götz, Stefan, Gray, Charles; Macpherson, Luke, Potts, Daniel; Shen, Yueting, Elphinstone, Kevin, Heiser, Gernot «User-level device drivers: achieved performance». Journal of Computer Science and Technology, 5, September 2005, pàg. 654-664. DOI: 10.1007/s11390-005-0654-4.
* ↑ van Schaik, Carl; Heiser, Gernot. «High-performance micronuclis and virtualisation on ARM and segmented architectures» p. 11-21. Sydney, Austràlia: NICTA, gener 2007. Arxivat de l'original el 2007-04-26. [Consulta: 1r abril 2007].
* ↑ Ruocco, Sergio. A Real-Time Programmer s Tour of General-Purpose L4 micronuclis.
* ↑ Tuch, Harvey; Klein, Gerwin; Norrish, Michael. «Types, bytes, and separation logic» p. 97-108, 2007.
* ↑ Derrin, Philip; Elphinstone, Kevin, Klein, Gerwin, Cock, David Chakravarty, Manuel M. T. «Running the manual: an approach to high-assurance microkernel development» p. 60-71, 2006.
* ↑ Kuz, Ihor; Liu, Yan, Gorton, Ian; Heiser, Gernot. .
* ↑ «hurd-l4».
* ↑ «www.cse.ogi.edu». Arxivat de l'original el 2006-11-08. [Consulta: 18 març 2013].

## Bibliografia

* Jochen Liedtke, Ulrich Bartling, Uwe Beyer, Dietmar Heinrichs, Rudolf Ruland, Gyula Szalay. Two years of experience with a μ-nucli based OS, ACM Press 1991
* Liedtke, Jochen; Haeberlen, Andreas; Park, Yoonho; Reuther, Lars, Uhlig, Volkmar. «Stub-Code Performance is Becoming Important» (PDF), 22-10-2000. Arxivat de l'original el 2006-09-05. [Consulta: 5 setembre 2006]. (On L4 nucli and compiler)
* Cheng Guanghui, Nicholas Mc Guire. L4/Fiasco/L4Linux Kickstart Arxivat 2007-08-02 a Wayback Machine., Distributed & Embedded Systems Lab - Lanzhou University

## Enllaços externs

* The L4 microkernel family - Descripció, documentació i projectes de les implementacions de L4