Surprise! - Linix kernel - Microkernel or Monolithic kernel?

I was prompted to look at this anew as a side investigation after a recent local LUG presented on another distro. On that distro’s home page, it described using a Linux monolithic kernel. This was news to me, since approx. kernel 2.6.25, there was a much ballyhooed change from a monolithic to microkernel, ushering in the idea of a “kernel in 2 parts,” the base initrd plus kernel loadable modules which could be activated on boot or later by the User on demand. I also strongly doubted that a distro of any size would go out of its way to custom build a kernel with major architectural changes.

First steps in my investigation, read what is available on Wikipedia
The Monolithic kernel

The Microkernel

Based on the above,
The Linux kernel is indeed a monolithic kernel!

Apparently, the definition of a Monolithic vs Microkernel is not based on its design architecutre(What?! you may say) but instead on the method of communication within the kernel.

Summarizing in my own words,
When the Microkernel was first introduced, of course we all know about the various rings of security, Ring0 is core kernel mode processes and the other rings are less privileged User mode processes. To ensure the integrity of each ring, when a process needs to communicate with a process in another ring, a messaging system is used.

As we have all observed starting more or less with kernel 3.x and progressing through 4.x and 5.x, much of the drivers and software that used to exist in User mode is now distributed and run in kernel mode. I had assumed(incorrectly it seems) that that when these processes were moved into kernel mode that there was still some kind of “less privileged” group that protected core kernel processes. Apparently that may not be the case, all processes running in kernel mode run equally. And, most distinguishing of all is that processes in kernel mode communicate with each other using system calls, not messaging.

So there we have it…
With the vast majority of the kernel now running in kernel mode using system calls, practically nothing of the kernel now runs in User mode (unless overridden like nomodeset forcing User mode video drivers)

As this is a fairly new development for me personally, am open to any corrections and elaborations…


About an kernel architecture. There exist a project to add Webassembly VM to kernel as a kernel module. This VM might be used to run some process in kernel space, so there’s no context switch (it will be super-fast). I see more way of use this VM, for example to distribute binary drivers (maybe one binary for many architectures) or to write filesystem driver on partition (in special area), so there’s no problem with mounting newer filesystem version on older kernel.