L4Ka Project


L4Ka::Hazelnut was designed to be portable across 32bit platforms. We separated general code like IPC, thread management, and scheduling from platform dependent code like pagetable management and exception handling. L4Ka::Hazelnut is (almost) completely written in C++. For the first steps of a performance analysis refer to the evaluation section. (IPC Performance)

We see IA32 as our reference platform since we know this platform best and have the original L4/IA32 kernel for comparison (performance and functionality).

The L4Ka::Hazelnut microkernel is currently available for the following processor families:

  • IA32 (Pentium and higher)
  • ARM (StrongARM SA110 and SA1100)
  • For testing purposes L4Ka::Hazelnut/x86 can be used on a VMWare system.


    L4Ka::Hazelnut is published under the GNU General Public License.
    For different licensing schemes please contact licensing does-not-exist.l4ka org.


    With the release of L4Ka::Pistachio we will discontinue further development of L4Ka::Hazelnut (besides bug fixes). We consider the Version 2 and Version X.0 API as deprecated. It is possible to software-emulate the system behaviour of V2 and X.0 on top of Version 4; IDL4 makes this transition even easier.


    IPC Performance

    Hazelnut's IPC performance is world leading.
    Measurements are performed with the provided ping-pong benchmark, no debug features enabled and with the fast-path option turned on.

    Processor Short IPC
    large AS
    Short IPC
    small AS
    Short IPC
    Pentium II/400MHz
    273 cycles 183 cycles 104 cycles
    Pentium 4/1400MHz
    1008 cycles 699 cycles 266 cycles
    ARM SA1110   n/a 372 cycles

    For comparison the IPC performance of Hazelnut version RC1:

    Processor Short IPC
    large AS
    Short IPC
    small AS
    Short IPC
    Pentium III/450MHz 409 cycles n/a 201 cycles



    The L4Ka Hazelnut kernel runs on all commodity x86 systems (Intel Pentium or higher, AMD Athlon or higher) and on VMWare.

    We make use of the following x86 features:

  • Super-Pages (4MB)
  • SysEnter/Exit (PII and higher)
  • Global Bit for kernel memory (PII and higher)
  • APIC/IO-APIC if available
  • We started adding SMP support for x86 systems. Currently, we can migrate threads and send IPC. ex_regs and task deletion are still open problems.

    Minimum memory requirement is 64 MByte and we support up to 256 MByte of RAM (currently hard coded but no design limit).



    Supported Hardware

    The L4Ka::Hazelnut kernel runs on StrongARM (SA1100,SA110) and ARM7 (EP7211) processors.

    For ARM development we use these evaluation boards:

  • Intel's Brutus Evaluation Board (StrongARM 1100)
  • Digital's DNARD (StrongARM 110)
  • Cirrus Logic's EDB7211 Evaluation Board (EP7211, ARM7)
  • Compaq iPAQ

    Unfortunately we have no real ARM-based killer applications (like L4Linux on x86). Thus all testing still has a quite academic touch.

    Although the system call path for ARM is not optimized yet, first rough performance measurements look promising.


    Booting L4Ka::Hazelnut on ARM-evaluation boards (EP7211, Brutus)

    Most ARM evaluation boards use the Angel boot loader. Angel supports downloading binary images to physical memory and jumping to a certain address via a serial line protocol.
    To boot L4Ka::Hazelnut we generate one binary image containing an elf-decoder and all images which have to be started. At startup the decoder copies the sections of all binaries into memory, configures the kernel info page and starts the kernel.
    Angelboot can be downloaded here.