Hacker News new | ask | show | jobs
by bmacho 1108 days ago
Why is it monolithic? Why not microkernel? Especially that all the typical jobs of an operating system are outsourced.
3 comments

Strictly speaking, a monolithic kernel is one which builds in all the code to operate: talk to hardware, load programs, perform its services or even include the ability to load drivers/code to talk to other hardware. All of the key functionality is loaded into the kernel program space but that is usually separate from user space or process space. Dumb programs; smart kernel.

https://en.wikipedia.org/wiki/Monolithic_kernel

A microkernel has a much more limited scope, sometimes just the ability to pass messages or data between processes, and may exclude most of the functionality to talk to hardware. The microkernel program space is separated from user space, process space and driver space. Dumb kernel; smart programs.

https://en.wikipedia.org/wiki/Microkernel

A typical microkernel will have user programs that drive the hardware that expose a very similar interface to what a macrokernel would provide, from the application level there isn't a whole lot of visible difference but at the system level there is, essentially the macrokernel is broken up into a number of separate processes each of which is fashioned as a 'normal' user program. This significantly reduces the scope of the kernel itself which has a whole pile of interesting implications which usually manifest as massive reliability improvements over macro kernels, a penalty in raw io throughput and the ability to elegantly (on the fly) load and unload all kinds of OS components without the need to reboot the system.

But there usually is a clear distinction between such 'kernel processes' and user applications, they also tend to be run at a slightly higher priority to ensure that the system keeps moving.

How much separation are you expecting from half a kilobyte of code?
I think the infrastructure required for a microkernel would have more features than this OS. It really is incredibly barebones and that's why it is monolithic. That being said, I guess it's maybe possible.
Warning: big piece of opinion that may trigger some of you.

In practice (feel free to verify this yourself by downloading and building the latest L4 derivative), microkernels that actually work on modern hardware need a huge amount of baseline code to get IPC and memory server working in a distributed yet somewhat performant fashion.

There is a flag for compiling Linux without any hardware and filesystem drivers. That gives you the kernel core in a surprising small binary which is not that far from sel4 or okl4.

In summary, monolithic is the new microkernel :)