Iteration roadmap
How the full topic list maps onto iterations, from the r1.0 scaffold to the complete tutorial, with the per-iteration verification rhythm.
This is the roadmap from the r1.0 scaffold to a complete tutorial. Each
iteration ships as ebpf-with-aya-rNN.x.tar.gz per the cadence in
CONTRIBUTING.md, extracts in place, and is committed as
chore: archive rNN β <summary>. The reconciliation plan tracks
verification state for every claim across all iterations.
Iteration boundaries are flexible; part boundaries are stable. A
dense iteration may split into sub-iterations (rNNa, rNNb); a light
one may merge with its neighbour.
Phase 1 β Foundations
| r# | Deliverables | Status |
|---|---|---|
| r1.0 | Site scaffold (config, layouts, includes, CSS, index, Pages workflow); README, PRD, CONTRIBUTING; onboarding docs; reconciliation + iteration plans; Chapters 0β6 (outline, prerequisites, lab setup, observability stack, toolchain, concepts, hello-world); lab scripts; examples/03-observability-stack/ and examples/06-hello-world/ |
shipped (unverified) |
| r1.1 | Verify Foundations on real Fedora 44; fix whatever the first cargo build / ./demo.sh / VM provision surfaces; promote rows |
open |
| r6.1 | site: two-level Part/Chapter navigation (homepage shows Part cards; each Part page lists its chapters) | shipped (unverified) |
| r7.1 | conventions: container policy (multi-stage UBI, all user space in Podman), version pins (Java 25/Quarkus 3.33, Python 3.14/FastAPI, crun 1.27.1), first Excalidraw diagram (lab topology) | shipped (unverified) |
| r14.1 | diagrams: 19 Excalidraw+SVG diagrams (Tier 1β3) embedded across Ch 3β26; spec-based generator; networking diagrams deferred to r15+ | shipped (unverified) |
Phase 2 β Tracing the kernel (Part: kprobes, fentry, tracepoints)
| r# | Chapter(s) | Topics | Status |
|---|---|---|---|
| r02 | 7 | kprobe + unlink β first kprobe, read syscall args |
shipped (unverified) |
| r03 | 8 | fentry + unlink β BTF-based, lower overhead than kprobes; compare |
shipped (unverified) |
| r04 | 9β10 | opensnoop, sigsnoop β ring buffers, per-event records |
shipped (unverified) |
| r05 | 11β12 | execsnoop, exitsnoop β process lifecycle tracepoints |
shipped (unverified) |
Phase 3 β User-space & language probing (Part: uprobes, USDT, runtimes)
| r# | Chapter(s) | Topics | Status |
|---|---|---|---|
| r06 | 13β14 | uprobe + bashreadline; uprobe rust (probe a Rust binaryβs symbols) |
shipped (unverified) |
| r07 | 15 | btf uprobe β BTF-assisted user probes |
shipped (unverified) |
| r08 | 16 | bootstrap for user-space targets β Java and Python target examples | shipped (unverified) |
| r09 | 17β18 | sslsniff; funclatency β uprobe-based latency histograms |
shipped (unverified) |
| r10 | 19β20 | trace goroutine states; javagc β runtime-aware probing |
shipped (unverified) |
Phase 4 β Performance & resources
| r# | Chapter(s) | Topics | Status |
|---|---|---|---|
| r11 | 21β22 | runqlat, hardirqs β scheduling latency, IRQ timing |
shipped (unverified) |
| r12 | 23 | profile β sampling profiler, flame-graph-ready output |
shipped (unverified) |
| r13 | 24β25 | memleak, biopattern β allocation tracking, block I/O patterns |
shipped (unverified) |
| r14 | 26 | energy monitoring β eBPF offload of power/QoS feedback (modern theme) | shipped (unverified) |
Phase 5 β Networking
| r# | Chapter(s) | Topics | Status |
|---|---|---|---|
| r15 | 27β28 | tcpconnlat, tcpstates β connection latency, TCP state transitions (two-VM) |
shipped (unverified) |
| r16 | 29β30 | L7 tracing (http socket filters + syscall tracepoints); sockops |
shipped (unverified) |
| r17 | 31β32 | tc traffic control; xdp β first XDP program |
shipped (unverified) |
| r18 | 33β34 | xdp tcpdump; xdp load balancer (two-VM) |
shipped (unverified) |
| r19 | 35β36 | xdp test (BPF_PROG_TEST_RUN); tcx β modern TC attach |
shipped (unverified) |
Phase 6 β Security & LSM
| r# | Chapter(s) | Topics | Β |
|---|---|---|---|
| r20 | 37β38 | lsm connect β deny via LSM (cgroup-scoped); signal kill β bpf_send_signal to terminate processes |
shipped (unverified) |
| r21 | 39β40 | hiding process/file information (lab-only offense); LSM file/tamper protection | shipped (unverified) |
| r22 | 41β42 | sudo privilege-escalation (offense, lab-only); security sensor β telemetry + shielding (modern theme) | shipped (unverified) |
Phase 7 β Schedulers (sched_ext)
| r# | Chapter(s) | Topics | Β |
|---|---|---|---|
| r23 | 43 | scx_simple β minimal scheduler via struct_ops/sched_ext (model + run + Aya observer) |
shipped (unverified) |
| r24 | 44 | scx_nest-style policy β keeping work on warm cores (more realistic) |
shipped (unverified) |
Phase 8 β Application targets
| r# | Chapter(s) | Topics | Β |
|---|---|---|---|
| r25 | 45 | nginx β uprobe per-request latency on a containerized server |
shipped (unverified) |
| r26 | 46 | capstone β three signals tied together (Java + Python, OTel/OBI) | shipped (unverified) |
| r27 | 47 | postgres β query latency + lock waits (multi-process uprobes, USDT) |
shipped (unverified) |
Phase 9 β Advanced kernel surface (the 2024β2026 BPF feature set)
| r# | Chapter(s) | Topics | Β |
|---|---|---|---|
| r28 | 48 | detach/pinning β outliving the loader |
shipped (unverified) |
| r29 | 49 | syscall programs β loader programs & light skeletons |
shipped (unverified) |
| r30 | 50 | user ring buffer (user β BPF) | shipped (unverified) |
| r31 | 51 | userspace eBPF (rbpf, bpftime) | shipped (unverified) |
| r32 | 52 | kfuncs β typed kernel calls, KF_ACQUIRE/RELEASE |
shipped (unverified) |
| r33 | 53 | bpf token β delegating BPF into containers (kernel 6.9) |
shipped (unverified) |
| r34 | 54 | timers & workqueues β deferred in-kernel work | shipped (unverified) |
| r35 | 55 | struct_ops (general) β BPF implements a kernel vtable |
shipped (unverified) |
| r36 | 56 | dynptr & bpf arena β flexible/shared memory |
shipped (unverified) |
| r37 | 57 | bpf iterators β walk a kernel set, emit like a file |
shipped (unverified) β Part 8 complete |
| r38 | 58 | CO-RE deep-dive β compile once, run everywhere | shipped (unverified) β opens Part 9 |
| r38.1 | 58 | correction: CO-RE (kernel, libc-independent) vs musl static (distro, optional) | shipped (unverified) |
| r38.2 | 4 | foundation: LLVM/Clang/rustc compiler path, eBPF tooling landscape, glibc vs musl | shipped (unverified) |
| r38.3 | 4 | honesty pass: list the chapters where kernel-side is C (sched_ext/struct_ops/iter/arena) | shipped (unverified) |
| r39 | 59 | operating eBPF β lifecycle, pinning, zero-downtime (L3AF/bpfman) | shipped (unverified) |
| r40 | 60 | offload β eBPF off the host CPU (SmartNIC/DPU/FPGA/GPU) | shipped (unverified) |
| r41 | 61 | power & efficiency β RAPL + eBPF attribution, cpufreq_ext frontier | shipped (unverified) |
| r42 | 62 | correlating signals β Tempo/Mimir/spans, trace_id across stores | shipped (unverified) |
| r43 | 63 | CAPSTONE β one request, every layer, one trace_id | shipped (unverified) β closes Part 9 |
| r44 | 64 | Part 10 field guide β bpftrace from Python (NDJSON) | shipped (unverified) |
| r44.1 | 64 | + 7 working bpftrace programs (snoop/runqlat/profile/β¦) + tool βlist/-e | shipped (unverified) |
| r45 | 65 | bpftool from Python β inventory/top/maps/dump/links/net/features/audit | shipped (unverified) |
| r46 | 66 | BCC tools tour from Python (resolve/run/parse + hello_bcc) | shipped (unverified) β closes Part 10 |
| r47 | 5,64,65,66 | reader polish: 4 new diagrams (bpf-arch/events/tool-maps), explicit paths, Ch65 table, +bcc examples, README diagram | shipped (unverified) |
| r47.1 | 5,64,66 | diagram readability (dark labels), Fig5.4 arrows fixed, 5.3 divider+steps, Ch5 stepwise pipeline + bpftool/bpftrace table | shipped (unverified) |
| r47.2 | css | table cells + inline code wrap (fixes overflowing tables) | shipped (unverified) |
| r47.3 | css | correct table fix β wrap inline code (break-word), stop column collapse | shipped (unverified) |
| r47.4 | css | table code-wrap: correct source order + specificity so cell code wraps | shipped (unverified) |
| r47.5 | css | table-layout: fixed (stops one column squeezing others) | shipped (unverified) |
| r48 | 67 | RETROSPECTIVE β the whole arc + the road ahead (book finale) | shipped (unverified) |
| r49 | 0,2,PRD | cleanups: Ch0/PRD outline re-sync, tooling-coverage pass + Ch2 tooling table, skill chapter-template | shipped (unverified) |
| r50 | 68 | ADDENDUM β observing a homomorphic-encryption (TFHE-rs) workload, data-blind (Part 12) | shipped (unverified) |
| r50.1 | 68 | HE addendum: second op (homomorphic add) + profiling he_computeβNTT (profile.sh, Pyroscope panel) | shipped (unverified) |
| r51 | 69 | APPENDIX β eBPF metrics with Performance Co-Pilot (pmdabpf/pmdabpftrace, openmetrics bridge, grafana-pcp) | shipped (unverified) |
Phase 10 β Operating eBPF
| r# | Chapter(s) | Topics |
|---|---|---|
| r33 | 56 | BPF CO-RE deep dive β relocations, portability across kernels |
| r34 | 57 | L3AF β managing and zero-downtime-upgrading eBPF programs |
| r35 | 58 | AI & GPU offloading β tracing data flows in AI/GPU clusters (modern theme) |
| r36 | 59β60 | power management recap; where to go next + project close-out (prd-reconciliation) |
Within-iteration verification rhythm
For any iteration shipping an Aya program:
- Tarball delivered with the example dir, chapter prose, and
reconciliation rows marked
unverified/in flight. - Extract into the working copy, push,
gh run watchconfirms the site build is green. cd examples/NN-name/ && ./demo.sh; share output.- Pass β next iterationβs first move flips the row to
verified (Fedora 44). Fail β diagnose from output, fix inrNNa, re-run.
This honors βtested code first, then proseβ: prose ships alongside the
code but does not claim verified until a real Fedora 44 run passes.
Flex points
- The libbpf/libbpf-rs warm-up lives inside Chapter 6 rather than as its own iteration; Aya is the toolkit everywhere after.
- Two-VM chapters (Phase 5 networking, the load balancer) assume the
optional
ebpf-peerguest from Chapter 2. - Modern-theme chapters (energy monitoring, runtime hardening, AI/GPU offloading, L3AF) are placed where they reinforce a concrete program, not isolated at the end.
- The offense chapter (sudo priv-esc) runs only inside the disposable target VM and is framed defensively.