# Linux Kernel Module Cheat

### 2.1. Should you waste your life with systems programming?

Being the hardcore person who fully understands an important complex system such as a computer, it does have a nice ring to it doesn’t it?

But before you dedicate your life to this nonsense, do consider the following points:

- almost all contributions to the kernel are done by large companies, and if you are not an employee in one of them, you are likely not going to be able to do much.

  This can be inferred by the fact that the `devices/` directory is by far the largest in the kernel.

  The kernel is of course just an interface to hardware, and the hardware developers start developing their kernel stuff even before specs are publicly released, both to help with hardware development and to have things working when the announcement is made.

  Furthermore, I believe that there are in-tree devices which have never been properly publicly documented. Linus is of course fine with this, since code == documentation for him, but it is not as easy for mere mortals.

  There are some less hardware bound higher level layers in the kernel which might not require being in a hardware company, and a few people must be living off it.

  But of course, those are heavily motivated by the underlying hardware characteristics, and it is very likely that most of the people working there were previously at a hardware company.

  In that sense, therefore, the kernel is not as open as one might want to believe.

  Of course, if there is some super useful and undocumented hardware that is just waiting there to be reverse engineered, then that’s a much juicier target :-)

- it is impossible to become rich with this knowledge.

  This is partly implied by the fact that you need to be in a big company to make useful low level things, and therefore you will only be a tiny cog in the engine.

  The key problem is that the entry cost of hardware design is just too insanely high for startups in general.

- Is learning this the most useful thing that you think can do for society?

  Or are you just learning it for job security and having a nice sounding title?

  I’m not a huge fan of the person, but I think Jobs said it right: https://www.youtube.com/watch?v=FF-tKLISfPE

  First determine the useful goal, and then backtrack down to the most efficient thing you can do to reach it.

- there are two things that sadden me compared to physics-based engineering:

  - you will never become eternally famous. All tech disappears sooner or later, while laws of nature, at least as useful approximations, stay unchanged.

  - every problem that you face is caused by imperfections introduced by other humans.

    It is much easier to accept limitations of physics, and even natural selection in biology, which are not produced by a sentient being (?).

  Physics-based engineering, just like low level hardware, is of course completely closed source however, since wrestling against the laws of physics is about the most expensive thing humans can do, so there’s also a downside to it.

Are you fine with those points, and ready to continue wasting your life with this crap?

Good. In that case, read on, and let’s have some fun together ;-)

Related: Soft topics.