I started writing a kernel module for linux recently. I’ve written small proof-of-concept kernel modules before, but nothing of any substance.
This time I wanted it to do something.
I have a friend who’s a linux kernel developer who’s been helping me out. You can’t really appreciate how different a beast it is to write software for the linux kernel, until you actually try it, or spend hours sitting with somebody who is.
I have not written or tried to write a kernel module for windows, but I have seen the source code for one and have code reviewed bits of it and had some of it explained to me by the author.
In some ways these two environments are similar and in some ways very different.
And it dawned on me, that deep down, the reason for this is, because the windows kernel was designed by people with experience in designing operating system kernels and linux is the culmination of thousands of scratched itches.
There is decent tooling for debugging the windows kernel, with an actual debugger, there’s actually two.
There is none for the linux kernel. It’s a big itch to scratch and nobody has yet been up to the task.
I’ve met some linux kernel developers and have heard them give talks. Despite all my experience and generally low opinion of software developers as a group, I for some reason thought that kernel development was a step up. You had to really have your shit together to endeavor to work on the linux kernel.
Turns out I was wrong, and you’ve got the same barrier to entry for writing software for the linux kernel as you do for writing any other kind of software: None.
No license or degree or certification is required. Any moron can write software for the linux kernel and if it scratches a sufficiently annoying itch, you have a chance of getting it accepted. To be fair, there is a mailing list where things like kernel patches are discussed. Actually there’s many mailing lists, because even the kernel developers who lack the sense to use a real messaging or ticketing system appear to acknowledge the fact that it is a good idea to split up discussions into groups.
The fact that it is 2019 and the linux kernel exists, despite being the sum of many dermatological challenges, organized by a messaging system dating from the 1970s, shows the true grit of humanity.
It is this same grit that allowed the space shuttle to come into existence.
It is pathetic to compare the two though.
…and yet the Linux kernel is still going strong while the space shuttle has been retired.
It might not be fair to paint the kernel as a hodgepodge of solutions thrown together by whoever needed them. Think of it as peer reviewed science. Just like a scientific paper is reviewed by other scientists, kernel modules are reviewed by other kernel developers. And until recently, Linus could drop in and say “this code is garbage” and reject the commit.