BPF Capsule - DOOMをLinuxカーネル内で実行するeBPFコンパイラ

Show HN: DOOM in the kernel, or fibers in eBPF

BPF Capsuleは、C/C++/Rustコードを変更なしでLinuxカーネル内のeBPFで実行できるコンパイラ兼ランタイムです。カーネルパッチやユーザー空間VMは不要で、Linux 5.15以降の標準的なverifierとJITで動作します。DOOMを完全にカーネル内で動かすことに成功し、ゲームロジックや描画を1回のBPF呼び出しで処理します。Lua、QuickJS、SQLite、CPython 3.14なども同じ仕組みで動作し、XDPによるパケット解析や統計処理に応用できます。NixとWADファイルがあれば、コマンド1つで試せます。

DOOMはeBPFの中で動くはずがない。Linuxは最初の命令を実行する前にそんなプログラムを拒否するはずだ。それでも、未改造のLinuxカーネルは私のBPFオブジェクトを受け入れ、標準のverifierで検証し、標準のJITで実行する。
  1. tptacek

    ここには本当に良い内容がたくさんあるのに、AIで文章をぶち壊してしまったのは残念だ。「検証器にとって、それは経歴を持つ数値だ」という箇所で、私は道を外れて側溝に突っ込んでしまった。

  2. markrwilliams

    記事の前半は飛ばして、このプロジェクトがeBPFプログラムの限られた実行環境をどう克服したかを読もう:

    「Linux 6.9以降(arm64では6.10、arenaのJITサポートが後から入ったため)、このウィンドウはbpf_arenaによって支えられている……使用可能なarenaがないカーネルでは、同じ4ギガバイトが4MiBの断片から組み立てられる……[別々の]グローバルデータマップで。」

    これらのマップはBPF_MAP_TYPE_ARRAY型である。

    `bpf_arena`に関する議論はhttps://lwn.net/Articles/961941/を参照。

  3. phishin

    全て大文字という要件を守っているのがいいね。

この日のほかの記事

2026-09-10