Road to Kernel Developer

Endless learning, experimenting, and thinking

Road to Kernel Developer

If you’re just here for the roadmap to becoming a kernel developer, feel free to skip my personal story and jump straight to the comprehensive reading list at the end.

How It All Started

My programming journey began when I was twelve, captivated by the portrayal of hackers in popular media. My first programming book (화이트 해커를 위한 암호와 해킹 (1st Edition) by 장삼용)—a Korean text on cryptography and network security in Python—was far beyond my comprehension at the time. While I can parse it effortlessly now, back then I grasped maybe 60% of the concepts, if I’m being generous.

Some of my earliest engineering experiences still baffle me today. At age ten, I successfully upgraded the network card in my mother’s aging laptop—a feat I still can’t quite explain. The machine shipped with Windows 7, but I was desperate to experience Windows 10’s sleek, modern interface. After multiple failed upgrade attempts, I dove into online forums, searching for others with similar symptoms.

I stumbled upon a blog post describing my exact issue with a nearly identical laptop model. The solution? A network card upgrade—Windows 10 apparently lacked drivers for the older hardware. Armed with nothing but this single blog post and unwavering determination, I ordered the recommended card, completely disassembled the laptop, swapped the hardware, and reassembled everything. The upgrade to Windows 10 went through without a hitch.

Looking back, I’m amazed that my mother trusted her ten-year-old with such a task. That trust would soon be tested.

The Incident That Changed Everything

My next experiment—attempting to dual-boot Ubuntu—ended in disaster. I accidentally formatted the entire drive, obliterating years of irreplaceable family photos and documents. Despite spending hundreds of dollars on professional data recovery, we salvaged only fragments.

This catastrophe convinced my parents that perhaps I needed my own machine for these experiments. When I was twelve, my mother made a unilateral decision to purchase me a $6,000 iMac—a purchase she hadn’t cleared with my father, who was our family’s sole income earner. The tension was palpable, but the deed was done, and my mother’s unofficial veto power prevailed.

I’d justified the iMac request by claiming macOS’s gaming limitations would keep me focused on programming. Naturally, I immediately installed Windows via Bootcamp and played games. But I also kept my promise—I discovered FreeBSD and became obsessed with contributing to its base system.

The Challenge of Finding Direction

Unlike web development, with its abundance of detailed roadmaps and tutorials, kernel development resources are scarce and scattered. This knowledge is typically reserved for third-year university courses, leaving self-taught programmers to piece together their own curriculum.

After years of trial and error, I’ve assembled the roadmap I wish I’d had when starting. While there may be more efficient paths, this one worked for me.

Roadmap to Kernel Developer

This is subjective path that I found and followed. There could be better roadmaps that are more efficient and in higher quality. I only listed books below because I believe that books are the most efficient, high quality, and accurate resources for programming. If you want to be a kernel developer, you’ll need to read a lot of standard documents, papers, and man pages. Learning through books can help you prepare for those situations.

1. Master the C Language

C is non-negotiable for kernel development. You need to read C code as naturally as you read English. The language itself is deceptively small, but its evolution means you’ll need multiple perspectives:

Start here:

  • C Programming: A Modern Approach (2nd Edition) by K. N. King — An excellent introduction, though it doesn’t cover the latest standards

Then understand the philosophy:

  • The C Programming Language (2nd Edition) by Kernighan & Ritchie — Not for beginners, but essential for understanding C’s design philosophy and machine-oriented thinking

Finally, modernize your approach:

  • Modern C (3rd Edition) by Jens Gustedt — Learn how C is written today, which differs significantly from traditional approaches

2. Algorithms and Data Structures

Programming languages are merely tools—algorithms and data structures are what make programs actually do something meaningful.

Essential reading:

  • Guide to Competitive Programming (3rd Edition) by Antti Laaksonen — A solid introduction to fundamental concepts
  • Competitive Programming 4 by Halim, Halim & Effendy — Advanced material for serious practitioners

For Korean readers: 알고리즘 문제 해결 전략 by 구종만 remains my favorite comprehensive introduction to the field.

3. Computer Architecture

Understanding the machine beneath the code is crucial for kernel developers. You need to know how software and hardware dance together.

The heavyweight champion:

  • Computer Systems: A Programmer’s Perspective (3rd Edition) by Bryant & O’Hallaron — Dense, comprehensive, and absolutely essential. This textbook assumes self-directed learning, so prepare for extensive research and problem-solving.

Alternative perspective:

  • Computer Architecture: A Quantitative Approach (7th Edition) by Patterson & Hennessy — Highly recommended by the community

4. Operating Systems

After 1-2 years of foundation building, you’re ready for the main event.

Modern and accessible:

  • Operating Systems: Three Easy Pieces by the Arpaci-Dusseaus — More current and approachable than traditional texts, available free online (though I recommend print for your eyes)

For Linux enthusiasts:

  • 디버깅을 통해 배우는 리눅스 커널의 구조와 원리 by 김동현 — Hands-on kernel hacking (Korean only, unfortunately)

For FreeBSD developers:

  • The Design and Implementation of the FreeBSD Operating System (2nd Edition) by Neville-Neil & McKusick — Comprehensive but theoretical; essential for FreeBSD contributors

The Reality Check

This roadmap represents a minimum three-year commitment. Unlike web development’s relatively quick onramp, kernel development demands deep understanding of both software and hardware layers. And this is just the beginning—kernel developers never stop learning, constantly adapting to new architectures, technologies, and paradigms.

I’ve completed most of this curriculum and still consider myself a novice. If you’re serious about kernel development, you need two things above all: genuine passion for systems programming and the humility to embrace lifelong learning.

The path is long, the learning curve is steep, but for those who persist, you’ll gain the ability to work at the very foundation of modern computing. Is it worth it? For me, absolutely.


What’s your experience with systems programming? Have you found resources I’ve missed? I’d love to hear about your journey in the comments.