Wambui Karuga

The Eudyptula Challenge

The Free and Open Source Software movement has existed since the 1980s with Richard Stallman being credited as the “father” of the free and open source movement. Throughout the years, FOSS has gained momentum and popularity in the technology world with many developers and advocates hailing it as the future standard of technology. However, there are also two different positions covered under the umbrella term “FOSS”:

  • Free software which gives the user the power/ability to run, change and distribute the software as they see fit. It should be noted here that “free” does not refer to the price of the software but rather the rights and liberties the user of the software has. This position is based on trying to protect and guarantee a user’s essential freedoms and liberties.
  • Open source software which is usually governed by different licenses that allow the redistribution and editing of software released to the public. The source code of open source projects is publicly available for inspection, enhancement and modification.

The Linux Kernel is probably the largest and well known free and open source software. It was originally created in 1991 by Linus Torvalds with the source code being both free and open source. The use of the Linux kernel as the operating system of choice in most aspects of computing has (in my opinion) been one of the main drivers of the adoption of the open source development model. The ability to customize and use your operating system however you see fit is one of the main reasons that the Linux kernel and Linux-based distributions are so popular.

For a while now, I’ve been looking into ways on how to get started in contributing to the Linux kernel. As a developer, I’d tried to contribute to several different open source projects, but I kept being drawn back to the Linux kernel. I’d spend whole days going through documentation and articles on how to start working on the kernel but I could never make the leap to actual contributions.
One of the main challenges was that the Linux kernel is huge – with millions of lines of code in the main code base. I had so many ideas of what I was interested in and which parts of the kernel I wanted to contribute to that I could not figure out where to start.
The kernel also has a unique contribution and development model that is daunting to kernel beginners. There are also literally thousands of developers from around the world actively developing and maintaining it.
Fun fact, the GitHub repository of the Linux kernel indicates that it has infinity collaborators: Linux Kernel Contributors

It wasn’t until I took part in the Outreachy programme that I finally got to contribute to the Linux kernel. During this period, I also found out about the Eudyptula Challenge which was described as “a series of programming exercises for the Linux kernel, that started from a very basic ‘Hello world’ kernel module, moving on up in complexity to getting patches accepted into the main Linux kernel source tree.”

The Eudyptula Challenge, unfortunately, has not been active 2017, but the exercises used in the challenge can be easily found from people who have attempted it. After reading through the Linux Device Drivers book during my internship, I’m hoping to practice what I learnt by attempting the Eudyptula Challenge. This series will therefore try to document and explain my progress as I make my way through the challenge exercises. So here’s to hoping I’ll do and write about all twenty of the exercises!