Find out how ICT can support biomedical and clinical researchFind out more. Managing complexity by developing new tools and processes. Managing Complexity

About L4

L4 is a family of second-generation microkernels which is characterised by high performance, more than an order of magnitude better than its predecessors.

Basic Features

L4 is characterised by:

  • low IPC overhead (between 36 and 1000 cycles depending on architecture for a basic cross-address-space message-passing operation), typically within a few dozen cycles of the hardware-dictated cost of two mode switches and a switch of addressing context;
  • a small number of abstractions and fundamental mechanisms, and almost complete absence of kernel-defined policies (memory, protection and process management the responsibility of user-level servers);
  • small size (40–200kB image size depending on implementation and processor architecture);
  • interrupt handlers and device drivers at user level.

As such, L4 is almost a true microkernel. It violates the strict definition of a microkernel by containing a scheduler (and some scheduling policy) and typically drivers for serial ports and timers.

History

L4 was designed and implemented around 1995 by Jochen Liedtke, originally on i486 and Pentium machines. This implementation was all written in assembler and implemented what is called the V2 spec of L4.

During 1996–8, 64-bit implementations were developed for MIPS at UNSW, and for Alpha at Dresden University of Technology (later completed and made SMP-capable at UNSW). Those versions also implemented the V2 API with some extensions.

During his time at IBM Watson (1997–1999) Liedtke produced experimental versions of the API, generally referred to as X.0. He implemented this in his assembler kernel.

In the meantime, Michael Hohmuth in Dresden implemented Fiasco, the first version of L4 that was almost exclusively written in a higher-level language (C++). This kernel was originally written for x86 but has later been ported to ARM. It is still in active use and maintained by the Dresden group.

After Liedtke moved to Karlsruhe in 1999, his group implemented the first portable version of L4, called Hazelnut, which ran on x86 and ARM processors. Hazelnut was written in C.

In 2001, after Liedtke's tragic death, the group started the design of a new version of the API, called X.2 (or Beta V4), released early 2002. Its implementation, designed for portability from the beginning, was called L4Ka::Pistachio and was written mostly in C++. It was developed by the Karlsruhe team on x86 and 32-bit PowerPC and with some delay on Itanium. It was ported to ARM, MIPS PowerPC-64 and Alpha by UNSW/NICTA. We also dramatically improved the performance of the Itanium version. In 2003 Pistachio matched the performance of the V2 x86 assembler kernel and the UNSW 64-bit MIPS kernel, demonstrating that a portable yet high-performance microkernel was possible.

In 2004 we commenced work on the a new API aimed at embedded systems, the N1 API and its successors which is an adaptation of the X.2 API. Its implementation, NICTA::Pistachio-embedded, was based on L4Ka::Pistachio and formed the basis of our embedded OS platform. This became the basis of our first commercial deployments.

When Open Kernel Labs span out from NICTA in 2006, the company took over commercial support and deployment of the system, which became OKL4 (still available under an open-source license). NICTA::Pistachio-embedded is now no longer supported, and no longer used inside NICTA.

Further Information

The main repository of information about and relating to L4 is L4HQ.