About Monolithic Linux Kernel

My teacher at university told that Linux kernel is modular.
He has a crappy book and it says so.
I know that linux kernel is monolithic but I just dont have a proof other than wikipedia.
He doesnt accept wikipedia as an official proof, and he trusts that freaking book.
Alright whatever, you guys just give me something to prove it. :slight_smile:

I would say that the Linux kernel is both really. It has modules, which can be dynamically loaded and unloaded at will. But, based on the configuration, you can make all modules loaded and exclude any loadable modules thus making it monolithic I would say. This would be done at compile time. Have a look at my bash script kernel compiler here:

S.A.K.C. - SUSE Automated Kernel Compiler - Version 2.78 - Blogs - openSUSE Forums

Thank You,


it s a common misunderstanding that the fact that Linux loads modules makes it a non-monolithic kernel.
Maybe this one helps:

Else you can find some statements from Linus Torvalds on the web where he takes part in the “monolithic vs. microkernel” debate, a couple of years ago.


I always assumed (over simplified) it was because Linux kernel is one program. Microkernel is a server that sends messages between multiple programs. Unless I am silly and wrong here of course. :stuck_out_tongue:

Once upon a time it was difficult to modify the kernel. Today, during bootup the kernel loads in 2 parts, a base image (which distros often modify. Today, openSUSE base image is generic) and an image largely comprised of optional modules which often can be further switched in or out by the User(Kernel Loadable Modules).

For a useful and common example every User should know, you can modify the TCP/IP congestion control algorithm. The default algorithm installed assumes your network interface is wired, reliable and Fast Ethernet with minimal resources available for negtworking. If you connect using WiFi or other wireless, transfer very large files, connect over long distances, unusually fast speeds or use your machine in a “non-standard” way you may want to change your congestion control algorithm from CUBIC to VENO or some other algorithm.

Years ago, changing any part of the kernel required re-compilation which is difficult, momentous and risky. Today, changes like swapping KLM can be done easily with little risk.

I’ve posted an explanation and instructions how to change your congestion control algorithm and modify TCP/IP buffers at



If i had argued with my professor i would never get internals :slight_smile:
Modular in strict sense means “a self-contained component (unit or item) that is used in combination with other components”
If you have the option to easily remove and add components(pieces of code / subprogram) then it is considered to be modular