Working on a kernel module is a fantastic method to expand your knowledge and competence with Linux programming before stepping into core development on the Linux kernel. These are self-contained pieces of software that work together with the grain to form a complete operating system. The kernel modules all include device drivers for various hardware peripherals, file managers, and other low-level functional system features.
Working on a kernel module has significantly lower entry barriers than working on the Linux kernel. There are hundreds of modules being built by various teams and individuals, and thus there is no one set of gatekeepers dictating development. Furthermore, with module development, the stakes are a little smaller.
What You Should Know
Kernel modules are typically written in C, just like the kernel itself. (There is some off-the-wall discussion about writing kernel modules in C++, and there are some off-the-wall ways to do so, but it is not the normal nor preferred manner.)
If you’re building a device driver for a piece of hardware, you’ll need to understand the hardware and the software it contains. You’ll also need a good grasp of the Linux kernel and how kernel modules interact with it. Finally, if you’re contributing to an existing kernel module, you’ll need to familiarise yourself with its development procedures and cycle.
The Linux Kernel Module Programming Guide is a comprehensive resource and a good walk-through explanation of How to Write Your Own Linux Kernel Module with a Simple Example.
Also, check the Kernel Development section for a list of resources.
Application Development for the Linux Operating System
The work becomes a little simpler. We have many more alternatives once we get out of the weeds of operating system development and start talking about designing actual apps for the Linux operating system. There exist compilers and interpreters for almost every programming language for the Linux platform, frequently more than once for a single language.
What You Should Know
If you’re used to programming for Windows or Mac OS, the most surprising aspect about developing for Linux is the sheer number of Linux environments available. There are many Linux distributions, and every Linux user has the opportunity to customise their environment quite a bit. This means, among other things, that you’ll have to focus on dependency management far more than you would otherwise.
Another distinction, especially compared to Windows, is that many Linux users prefer to assemble their programmes from source code. This also happens on Mac OS, although less frequently. Many Linux users will always choose to compile apps from the source rather than utilise an installation package. This may have an impact on how you approach software development and delivery.
Most Linux development is done in C, C++, Perl, or Python. Learning those languages thoroughly and exploring the resources listed above (Kernel and Modules) and below (scripting) will be quite beneficial.
C Programming in Linux: a comprehensive introduction and tutorial for developing Linux applications in the C programming language.
Linux Developer Training: The Linux Foundation offers paid courses on Linux development.