Eight tracks
Each track is a question the kernel already answers and almost nobody reads the answer to. Prose on one side, a running kernel on the other, and every claim a program you can run against it.
Processes
lands in M2What exactly does the child get?
forkand what is copied, shared and reset;execand what survives it;waitand who reaps; zombies and orphans; process groups, sessions and the controlling terminal.Descriptors
lands in M2Which of the three levels is this bug in?
The fd table, the open file description and the inode, drawn apart.
dup2and redirection, the offset two processes share afterfork,O_APPENDagainstlseekandwrite, pipe capacity and the deadlock that follows from not draining one, and leaks as you can see them.Signals
lands in M2When is this delivered, and what does it interrupt?
Dispositions and masks, what cannot be caught, delivery at syscall boundaries,
EINTRand the restart that does not happen,SIGCHLD,SIGPIPE, and whykill -9is not a solution but an admission.PID 1 and lifecycle
lands in M3Why does your container take ten seconds to stop?
What init owes the system: reaping, forwarding
SIGTERM,execin an entrypoint so the shell gets out of the way, graceful shutdown and the grace period that runs out.Identity and permission
lands in M4Who does the kernel think you are?
Real and effective uid and gid, supplementary groups, the mode bits and the one function that checks them, setuid and the confused deputy, dropping privilege in the right order, and capabilities instead of root.
/proc and observability
lands in M3What is this process actually doing?
Reading state rather than guessing it.
straceand what it costs,Dstate and why you cannot kill it, and fd and memory forensics on a process you did not start.Namespaces and cgroups
lands in M5What is a container, before any container tooling exists?
PID, mount, net, user and UTS namespaces as views a process holds, and cgroup v2 as a tree:
memory.maxand the OOM killer's score,cpu.maxand throttling that looks like a slow disk.Reading what was generated
lands in M6What will the kernel do with this?
The track the rest exists for. You are handed the entrypoint script, the systemd unit, the
/auditsubprocesscall or the privilege-dropping helper that a model wrote, and asked what the kernel will do with it. Then you run it and read the trace.
No lesson is written yet. The kernel is built first — a lesson whose claims cannot be run against a live kernel is an article, and there are enough of those.