I have been slowly going through the awesome Eudyptula challenge which unfortunately has stopped accepted new participants.

The Eudyptula Challenge is (was) a Linux kernel programming challenge that takes you from creating your first “Hello, World!” module to submitting patches to the Linux kernel itself.

At the moment of writing this, I have submitted task 11 and awaiting a reply. The last submission I made was back in April 2017, so I’m progressing rather slowly. I intend to complete it eventually, but as Little Penguin says: “Remember, this is not a race, there is no rush [and] Have fun!”.

I already have a patch accepted in the linux-next tree (a small one, fixing a code style issue).

What can be said about the challenge?

  • The majority of the time is spent reading kernel source and documentation
  • The most difficult aspect to get right is the process. Understanding the cycle of submitting patches via a sane e-mail client. Fortunately, tools are built right into git to help with this. git format-patch and git send-email are useful tools
  • Read code! The kernel is a huge project

Why did I start the challenge? Well, to begin with, I love the Linux kernel and it woud be a dream to work with it some time in the future. I’m also a big fan of open-source development as the shared-knowledge development is much more appealing to me. Finally, I just want to learn — the Linux kernel is one of largest open projects and a lot of developer time has gone into it. So I figure there is a lot of useful stuff to learn.

My setup

When I began the challenge, I decided to install Gentoo on my machine and install experimental kernels on it. I have had the suggestion a couple of times just to use a virtual machine, but somehow that feels like cheating a little. I have also used Gentoo before but never really as my primary operating system, so I figured this might be a good opportunity to get more into it.

For kernel sources, I use:

which should be the official tree.

A regular kernel install roughly goes as (after pulling in the latest commits):

$ make oldconfig
$ make -j4
$ sudo make modules_install
$ sudo make install
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

Then I can reboot and have the newly installed kernel available.

A good working practice (for any Git project, really) is always to create a new branch for some new line of work. If the work doesn’t turn out right you can always return to master and delete the work branch.