Linux loadable kernel modules are on of the most important innovations in the Linux kernel. They provide a kernel that is both scalable and dynamic. Discover loadable kernels, the ideas behind them, and learn how these independent objects dynamically become part of the Linux kernel.
Didn’t System V R4.2 introduce loadable kernel modules two or three years before Linux (~1992)?
Well even AmigaOS could load kernel modules of some sort
BeOS, AFAICR, had kernel modules as well, but in a much cleaner fashion than what linux does.
> how these independent objects dynamically become part of the Linux kernel.
And participate in the global mess…
Linux finally got hierarchically organized modules (BeOS had those 10 years ago), but they still explicitely link to each other making it a pain to have them loaded in correct order, and insmod is still required, even if it’s hidden by udev.
In BeOS (and Haiku) modules only link to the kernel, and access other modules via a clean API where they ask which module the need and get given a list of functions then can call.
This makes the whole much cleaner and stable than the driver framework in linux, or rather the absence thereof.
These days Linux is actually unusual in not having some sort of proper driver API and stable ABI. They have their reasons, even if you don’t agree with them.
Yes, the reason they give is that all drivers are in the source tree anyway, and it allows for faster development.
The first one is wrong, there are things like OSSv4 which (tries to) support Linux by requiring an ugly glue full of #ifdefs on the kernel version. Of course some integrists just discard it saying all driver must be in the source tree or just not be at all. That’s a bit pathetic but eh.
As for faster dev, well, maybe, but sometimes it’s better to take the time to see where one is going before running to it.
I think they mean innovations in the sense restricted to Linux only, not as innovations in general.
From the article linked:
So yes, you’re right, it wasn’t the first one.
Linux modules = Windows services
They’re nothing of the sort. Linux loadable modules are nothing more than drivers. The equivalence of Windows Services would be daemons.
Disagreements aside about how innovative Linux is, this is a very nice, and exceptionally clear article on how to get started with kernel modules.