At the beginning of March last year (2014) I read about something called The Eudyptula Challenge. It's website describes it as:
...a series of programming exercises for the Linux kernel, that start from a very basic "Hello world" kernel module, moving on up in complexity to getting patches accepted into the main Linux kernel source tree.
Being both a programmer and a Linux enthusiast I was intrigued by this and immediately signed up. I've always been interested in getting involved with the Linux kernel project but never really knew where or how to get started.
The format of the challenge couldn't be simpler:
- You send an email to little at eudyptula-challenge.org, you get back a task.
- You email your solution, they send you back the results.
- If you pass the task they send you the next one.
You also get the occasional status update about the challenge letting you know how many people are currently taking part, how many have finished and estimated waiting times for results.
There are currently 20 tasks to be done in order to complete the challenge but as it's all done by email it's really easy to work at your own pace or take a break between tasks. I found the tasks to be well structured and clear. They also appear to increase in difficulty in fairly even increments.
I started the challenge on the 3rd of March 2014 and completed it on the 18th of August 2014. So that's a little over a week per task on average. Some of that time was me taking a break and some of it was me waiting for the results to come back as the more complicated tasks need to be manually reviewed whereas other simpler ones were assessed automatically.
When I received my results for the last task I was informed that I was the 43rd person to complete all 20 tasks. To put that into perspective based on the last status update I received on the 19th December 2014, over 9100 people have signed up for the challenge and only 69 had completed it. What I don't know is how many people are still actively participating in the challenge and how many signed up just to see what it was like and then gave up.
These statistics might make the challenge sound really difficult but the majority of the tasks are really quite straight forward and the biggest requirement is perseverance. Unless you're a really excellent programmer or already have kernel programming experience you're going to hit at least one brick wall along the way and it's this determination to not be beaten that will eventually get you over, around or even through those walls.
I actually read an article the other day Why Contributing to the Linux Kernel is Easier Than You Think that debunks some of the myths about kernel programming. I found it really interesting and based on my experience with the challenge I have to agree with most of what he says.
Unfortunately as of yet I still haven't managed to find the right opening where I can make a genuine contribution to the Linux kernel like I'd hoped but I still found it to be a very valuable experience. If I could go back I'd still do it again and if it's something you're interested in I'd definitely recommend giving it a go. If nothing else you should end up with at least a couple of real kernel commits to your name. I did and here is the proof:
In keeping with the spirit and the rules of the challenge I won't go into details about the actual tasks but for anyone thinking of taking the challenge I'd offer this advice:
Don't use Yahoo mail. You'll have problems when it comes to submitting real patches to the kernel mailing lists. Gmail was fine.
Setup The Mutt E-Mail Client on your Linux system and learn the basics if you've never used it before. This isn't essential, I started out using Icedove (Thunderbird) for the first few tasks but I just found it much easier to attach patches and code files using mutt.
Find a good tool for searching the kernel source code. You'll find most of the answers you're looking for just by reading the code that's already there. I cheated here. As I did most of the tasks on a Linux VM hosted on a Windows 7 machine I had a copy of the kernel source code on Windows and used Notepad++.
Read the kernel documentation. Specifically the SubmittingPatches file.
Most importantly don't get discouraged if you fail a task or have a patch rejected.