Operating system kernels were traditionally developed as large,
monolithic programs that integrated all system-level functionality.
This led to a number of problems, since components inside the kernel
were not protected from each other, so a badly written device driver
could bring down the whole operating system [1]. The problems of
monolithic kernels were well-known in the early 1990, which led to
Linus Torvalds' announcement of the first Linux version be harshly
criticized by Andy Tanenbaum [2], who had designed Minix, a
teaching-oriented Unix-like OS based on microkernel principles:
I still maintain the point that designing a monolithic kernel in 1991 is
a fundamental error. Be thankful you are not my student. You would not
get a high grade for such a design :-)
Accordingly, a number of approaches were developed to reduce the functionality implemented inside the OS kernel and, accordingly, the size of the kernel and the Trusted Computing Base (TCB) [3] and Reliable Computing Base [4] relevant for security and dependability. Early approaches such as Mach [5], however, still included device drivers in the kernel, which resulted in a large, complex architecture which was not much smaller than a typical monolithic kernel. Liedtke developed L4 [6], the first second-generation microkernel that enabled the building of small and performant microkernel-based operating systems.
Other approaches went more minimal, such as Engler's exokernel [7], which is a forerunner of today's system-level virtualization technologies such as Xen [8]. Accordingly, a debate started about the right approach to small kernel architectures. The Xen and L4 developers discussed whether virtual machine monitors were microkernels done right in two papers with the same title, but very different standpoints [9,10]. This debate is still going on today.
This topic is still highly relevant, as the level of abstraction from the hardware has influence on the overall performance of a system; furthermore, small privileged OS kernels enable better isolation of other system components to enable better security and reliability.