Monolithic with modules
Where Linux sits in the architecture taxonomy, why, and the honest cost: a driver bug is a kernel bug.
The source tree
Every top-level directory in a line, the four that matter expanded, and a lookup table from question to location.
Kconfig and Kbuild
How a configuration symbol becomes a compiled object, and how to read past the CONFIG_ ifdefs that are everywhere.
Modules
Loading, unloading, parameters, dependency resolution, taint, and building a module out of tree.
Exported symbols
Why "never break user space" and "break modules freely" are a consistent pair of positions rather than hypocrisy.
The kernel C dialect
Freestanding C with no libc, no floating point, a tiny stack, GCC extensions in daily use, and the annotations sparse checks.
Data structures
Intrusive lists, hlists, red-black trees, xarrays, and IDRs — why intrusive containers, and what they cost.
container_of
The central Linux idiom derived from scratch, after which kobjects, the VFS, and the device model all become readable at once.
Error handling
C has no exceptions, no try/catch, and no automatic unwinding. The kernel has instead settled on one
Reference counting
A kernel has no garbage collector and no scope-based destruction — nothing frees an object automatically
kobjects and sysfs
/sys is not a directory tree someone laid out by hand. It is generated, at runtime, from an in-kernel
What goes wrong
This is the catalogue page. Kernel bugs — the ones that end in an oops, a silent corruption, or a security