http://www.linux.com/news/software/linux-kernel/801601-4-myths-about-linux-kernel-programming-debunked
I gave a talk at LinuxCon Europe in Dusseldorf last year with the main goal being to show
people how easy it is to start with Linux kernel development. Despite
my fear that the audience might be too advanced and find this topic
rather boring I received good feedback with several opinions that these
kind of guidelines and advice are more than welcome. Now, since the room
capacity was about 30 people, which is not really much, I have the
impression that there are more folks out there who would enjoy this
topic. Therefore I decided to form the presentation into a series of articles. (See the full presentation at Events.LinuxFoundation.org.)
These
articles, similar to the talk, will be divided into three parts. In the
first, not really technical article, I will explain that Linux kernel
development is super easy especially for those who possess the right
attitude. In the second part I'm going to show where to get inspiration
and the best angles to approach Linux kernel development for newcomers.
And in the third and last part, I will describe some of the things that I
wish that I knew before I started.
4 Myths
For
some reason there is a group of negative opinions or myths describing
either Linux kernel programming itself or the effort required to become a
Linux kernel developer. In particular these are:
- Linux Kernel programming is hard and requires special skills.
- Linux Kernel programming requires access to special hardware.
- Linux Kernel programming is pointless because all of the drivers have already been written.
- Linux Kernel programming is time consuming.
Let's put more detail into this way of thinking:
Myth #1: The Linux Kernel programming is hard and requires special skills.
This thinking comes from the fact that many people, especially without proper knowledge of the kernel internals tend to view the the whole project as one big blob of code, effectively an operating system itself. Now, we all know that writing the operating system is a damn hard job and requires deep understanding of quite a number of different topics. Usually this is not just a hobby ;) but something that you are well prepared for. Looking at the top-level Linux kernel developers does not help either because all of them have many years of experience and judging your own skills using them as a reference leads one to believe that special skills are in fact required.
Myth #2: Linux Kernel programming requires access to a special hardware.
Jim
Zemlin, who is the executive director of the Linux Foundation, said
during his LinuxCon keynote that open source software is running on 80
percent of electronic devices. The Linux kernel, as the biggest open
source project ever, gets more than a huge bite of this cake. In fact
this is the most portable software of this size ever created and it
supports an insane number of different hardware configurations. With
this in mind one might get the impression that working on the kernel is
about running it on different kinds of devices and since the most
popular are already supported a successful developer needs to have
access to all sorts of odd hardware.
Myth #3: Linux Kernel programming is pointless because all of the drivers have already been written.
The
very popular impression of Linux kernel programming is writing drivers
for various kind of peripheral devices. This is in fact the way that
many professional kernel hackers nowadays have started their Linux
carers. However, with the portability that the kernel offers it may seem
that it is hard to find unsupported devices. Naturally we could look at
the USB devices landscape as here we have the majority of peripherals,
however most of those are either already supported or it is better to
use the libusb and solve the problem from the user space, thus no kernel
work.
Myth #4: Linux Kernel programming is time consuming.
While reading the LKML or any other kernel-related mailing list such as the driverdevel list it is easy
to notice that the number of patches sent weekly is significant. For
instance the work on the comedi drivers generates sets with many patches
in it. It clearly shows that someone is working really hard out there
and the comedi is not alone as an example. For people for whom kernel
development is going to be a hobby, not a daily job, this might be
off-putting as they could feel that they just cannot keep up the pace
with that kind of speed of development.
The Facts
These
either alone or accumulated can draw a solid, thick line between trying
Linux kernel development and letting it go. This is especially true for
the less experienced individuals who therefore may fear trying, however
the truth is that, to quote Dante, “the devil is not as black as he is
painted.” All of these myths can be taken down so let's do it one by
one:
Fact: Linux Kernel programming is fairly easy.
One
can view the kernel code as a single blob with rather high complexity,
however this blob is highly modularized. Yes, some of the modules are
really hardcore (like scheduler), however there are areas of less
complexity and the truth is that in order to do very simple maintenance
tasks the required skill is a decent knowledge of C.
Not
everyone has to redesign kernel core modules, there is plenty of other
work that needs to be done. For example, the very popular newbie task is
to improve the code quality by fixing either the code style issues or
compiler warnings.
Fact: Special hardware is not required.
Well,
the old x86 is still good enough to do some parts of the work and since
this architecture is still quite popular I would say that it is more
than enough for most people. Those who seek more can buy one of the
cheap ARM-based boards such as PandaBoard, BeagleBone or RaspberryPi.
Fact: It is not pointless, there is still work to be done.
The
first thing to know is that the Linux kernel is not only about the
drivers but also the core code which needs to be taken care of. Second
there is still a vast amount of drivers to be completed and help in this
area is more than appreciated.
Fact: It does not have to be time consuming.
Whoever
works on the kernel allocates as much time as he or she wants. The
people who do it out of passion, aside from their daily duties, use a
few evenings a week and they still contribute. I started contributing
during the period where I run every second day (evening), I still did a
complete renovation of part of my apartment, I went for holidays, and I
watched almost every game during the World Cup 2014 and World Volleyball
Championship 2014. There was not much time left for kernel stuff and
still I succeeded in sending a few patches.
The
important thing to remember is that unless you are paid for it there is
no pressure and no hurry so take it easy and do as much as you can.
A New Mindset
In
this first installment of a series aimed at encouraging people to do
kernel programming. I introduced a complete change of mindset by
explaining that what might have seemed hard is in fact fairly easy to
do. Just remember that:
- Linux kernel programming is fairly easy.
- It is not required to have access to special hardware.
- There is still a lot of work to be done.
- You can allocate as much time as you want and as you can.
Armed
with this knowledge we are ready for the next part which will give
insight into what could be your starting point in Linux kernel development.
This blog is republished with permission from Zapalowicz.pl.
No comments:
Post a Comment