ずっと能力ベースのセキュリティモデルが欲しかったんだ。実際、ここで議論したこともある。能力は、関連する権限を持つオブジェクトポインタみたいなもので、Unixのファイルディスクリプタのようなものだよね。私たちが持つべきは、- OSレベルの能力。起動したプログラムには、シェル(またはプログラムを起動した場所)から能力トークンが渡される。すべてのシステムコールは、最初の引数として能力を取る。だから、「open path /foo」はopen(cap, "/foo")になる。能力は、フェイクファイルシステム、実際のファイルシステムのブランチ、ネットワークファイルシステム、あるいは本当に何でも対応できる。プログラムは、自分がどんなサンドボックスにいるのかを知ることはできない。- ライブラリ/言語の能力。サードパーティのライブラリを取り込むとき、例えばnpmモジュールのように、そのライブラリにも能力が渡されるべきだ。インポート時か呼び出し元ごとに。プログラムのアドレス空間内のすべてのバイトに対して読み書きアクセスを持つべきじゃないし、私のコンピュータ上で私のように何でもできる権限を持つべきじゃない!質問は、「このコードの爆風半径はどれくらいか?」ってこと。使っているライブラリが悪意があるか脆弱な場合、どれだけのダメージが起こり得るかのために、健全なデフォルトが必要だ。lib::add(1, 2)が私のコンピュータ全体の持続的な侵害につながるべきじゃない。SeL4は、速くて効率的なOSレベルの能力を持っていて、何年も前からそれを実現している。すごくうまく機能してるし、多くの場合Linuxよりも速い。透明なサンドボックス化、ユーザーランドドライバー、IPC、セキュリティの改善などに非常に役立つ。LinuxをSeL4のプロセスとして実行することもできる。私は、Linuxデスクトップのすべての機能を持ちながら、SeL4のように動作するOSが欲しい。でも、残念ながら、私が求めるような言語レベルの能力を持つプログラミング言語はないと思う。Rustはすごく近いけど、サードパーティのクレートが信頼できない依存関係からのunsafeコードを呼び出すのを制限する方法が必要だ。Rustの長年の健全性バグも修正する必要があるし、能力ベースの標準ライブラリも必要だ。グローバルなopen() / listen() / などはもういらない。openat()とOSの他の部分の同等物だけでいい。LLMがどんどん良くなっていくなら、誰かが最初にやらない限り、数年後にはLLMを使ってこれらのものを作るつもりだ。現代のデスクトップOSのセキュリティは冗談みたいなものだよ。