The L4 microkernel has undergone 20 years of use and evolution. It has
an active user and developer community, and there are commercial
versions which are deployed on a large scale and in safety-critical
systems. In this paper we examine the lessons learnt in those 20 years
about microkernel design and implementation. We revisit the L4 design
papers, and examine the evolution of design and implementation from
the original L4 to the latest generation of L4 kernels, especially
seL4, which has pushed the L4 model furthest and was the first OS
kernel to undergo a complete formal verification of its implementation
as well as a sound analysis of worst-case execution times. We
demonstrate that while much has changed, the fundamental principles of
minimality and high IPC performance remain the main drivers of design
and implementation decisions.