BPF Capsule - DOOM im Linux-Kernel mit eBPF-Fibers
Show HN: DOOM in the kernel, or fibers in eBPF
BPF Capsule ist ein Compiler und eine Laufzeitumgebung, die große C-, C++- oder no_std Rust-Programme in gewöhnliches eBPF übersetzt, ohne Kernel-Patches oder separate VMs. Es überwindet die strengen Grenzen des Linux-Verifiers – winziger Stack, begrenzte Aufruftiefe, verbotene Rekursion – durch clevere Transformationen wie Pointer-Laundering, Regionen und Fibers. Als Härtetest läuft sogar DOOM vollständig im Kernel-JIT: Initialisierung, Spiellogik und Rendering in einem einzigen BPF-Aufruf. Auch Lua, QuickJS, SQLite, zlib, wasm3 und CPython 3.14 laufen bereits. Einfach ausprobieren mit: sudo nix run github:ayles/bpf-capsule#doom -- /path/to/doom1.wad tty
Niemand braucht Spiele im Kernel, natürlich. Aber komplexe Anwendungslogik ist dort nützlich: Pakete parsen zum Beispiel oder Statistiken über sie führen.
- tptacek
Es steckt so viel guter Inhalt drin, es ist eine Schande, dass du deinen Writeup mit KI sandgestrahlt hast. "Für den Verifier ist es eine Zahl mit einer Biografie" – da bin ich von der Straße abgekommen und in einen Graben gefahren.
- markrwilliams
Überspringe die erste Hälfte des Artikels, um zu erfahren, wie das Projekt die eingeschränkte Laufzeitumgebung von eBPF-Programmen überwunden hat:
"Unter Linux 6.9 und neuer (6.10 auf arm64, wo die JIT-Unterstützung für die Arena später kam), wird das Fenster von bpf_arena gestützt ... Auf Kernen ohne nutzbare Arena werden dieselben vier Gigabyte aus 4-MiB-Stücken zusammengesetzt ... [in] separaten global-data maps."
Diese Maps sind vom Typ BPF_MAP_TYPE_ARRAY.
Siehe https://lwn.net/Articles/961941/ für eine Diskussion über `bpf_arena`.
- phishin
Ich schätze die Einhaltung der Großbuchstaben-Anforderung.