Background
Motivation Behind Learning Linux Kernel
I've always been curious about Linux kernel inner working. Considering the billions of different devices out there leveraging on Linux kernel to operate, it's just really fascinating to me how a single code base could possibly cater for them all. I also want to be able to make contributions through my passion in software engineering and be sure that the contribution is really practical for people, and considering sheer amount of Linux users, Linux kernel seems like a sensical choice.
Anybody who wants to be a better programmer would also benefit from having a deep understanding about an operating system. For example, a user-space programmer coding in high-level language such as Javascript would be able to write more efficient code when he is able to make educated assumption about how the OS would ultimately execute their code. Last but not least, Linux kernel is the single largest open source project with the highest number of distributed contributors. To be able to become one of those contributors would definitely help one to become a better team-player.
Challenges
Having said that, I've been trying to learn Linux kernel for quite some time. My first attempt was to just jump into its code base, but it proven to be too daunting. The code base is so large and contains so many components and require deep knowledge about how low-level system works (i.e. bootloader), making it very challenging to understand by just reading it. I searched around forums to go about learning Linux kernel, and found out people recommending books, online readings, etc. They are all awesome, but for me it's just really boring to focus merely on theory without practice.
My Contribution
I am a big believer that the best way to get into something is by getting one's hands wet. Which means instead of learning the theory and then put it in practice, it's the other way around. First I'd figure out the concrete goal I want to accomplish, and then works backward to learn the theory needed to do it.
After lots of searching, I finally found out Eudyptula Challenge, which is a coding-oriented challenges whose goal is to each its participants to learn Linux kernel. Its website is already closed for new participants, but fortunately there were some good people out there who posted the challenges and their solutions to the challenges up for free on GitHub
Since people say that the best way to learn something is by teaching it, I'm going one step further by attempting to post a theory and explanation behind each of the challenges.
This repository and the solution inside is forked out of Vitaly Osipov's. What I'm doing is understanding his solutions, modifying it as I see fit, and finally adding written explanation on top of it. The explanations can be found on each of the challenges individual folders (i.e. task1/)
Progress
- 2020-04-26: Task 1 write up added
- 2020-04-29: Task 2 write up added
- 2020-05-01: Task 3 write up added
- 2020-05-05: Task 4 write up added
- 2020-07-12: Task 5 write up added
- 2020-07-21: Task 6 write up added
- 2020-07-21: Task 7 write up added