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
git send-emailare 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.
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.