Principles
| # | Principle | Where you saw it |
|---|---|---|
| 0 | You can’t reason about what you can’t see | strace -c ls: the syscalls you’d never counted |
| 1 | Isolation is a boundary you can name | a cross build and a sysroot keep the host out |
| 2 | Indirection is never free; it is sometimes worth it | the loader’s syscalls before main() |
| 3 | Interfaces outlive implementations | your ls is a symlink, and POSIX callers can’t tell |
| 4 | The first process is the contract | the fork/exec tree in the first second; the zombie that never left |
| 5 | Every default is a decision someone made for you | your option count against defconfig’s |
| 6 | Startup is a dependency graph, not a script | the initramfs waiting for a device that never appeared |
| 7 | Caches change behaviour, not just speed | the second read, with almost no block read requests |
| 8 | End-to-end: the ends are where the meaning is | connect() into tcp_v4_connect, and only the caller knew why |
| 9 | Isolation is a set of kernel objects, not a product | a container from unshare and a cgroup directory |
| 10 | A claim you can’t check is a story | two builds, one differing byte, found |
| 11 | Observability is a property of the system, not a tool you add | the tracer’s own bpf() calls; the cost of looking |
Each principle has exactly one home in the series and one trace behind it. The trace is what makes each principle concrete.