I want to understand how computers work at a deeper level. With enough time, courses, and textbooks, could someone read through the complete source code of a major operating system and understand how all of it works? I have a bachelor's degree in computer science so far. What would be the most practical way to approach this?
5 Answers
Reading source code from beginning to end is usually a poor learning strategy. First learn the architecture: user space versus kernel space, system calls, processes, memory, filesystems, drivers, and networking. Then trace a real program with tools such as a debugger or system-call tracer, and inspect the subsystem involved. You learn much more effectively when investigating a concrete behavior or trying to modify something.
The amount of code depends heavily on what you count as the operating system. A small embedded or teaching OS may be understandable in weeks or months. A mature desktop or server operating system includes a kernel, hardware drivers, libraries, services, graphical components, compatibility code, and countless utilities. Even if you read all of it, you would forget much of the detail before reaching the end. Aim to be able to navigate the codebase and quickly understand a new area, not to know every line.
Technically, yes—but major operating systems contain an enormous amount of code. You could learn the overall architecture and understand individual subsystems, but keeping every implementation detail in your head isn't realistic. Large systems are designed so developers can focus on one area while relying on interfaces, documentation, and tools for the rest.
So the goal should be understanding how the major pieces fit together, rather than memorizing every file?
Start with a smaller Unix-like or educational operating system instead of jumping straight into a production system. A compact kernel lets you study booting, processes, system calls, interrupts, virtual memory, scheduling, and filesystems without thousands of drivers and compatibility layers getting in the way. Textbooks that pair operating-system concepts with a small implementation are especially useful.
A practical path would be to build a tiny hobby OS or work through an operating-systems project course. Implement a command-line interface, interrupts, system calls, a scheduler, memory allocation and paging, and a simple filesystem. After that, study one subsystem in a larger open-source kernel and compare its design with your own. Hands-on work gives the code context that passive reading lacks.

That also explains why people can become useful contributors without having read the entire kernel. They learn the relevant subsystem when they need to change or debug it.