ブートストラップ可能なビルド:信頼の連鎖をゼロから構築する

Bootstrappable Builds: How and Why

FOSSY 2026で、Timothy Sample氏がブートストラップ可能なビルドの概念を解説。これは、最小のシードから始めて、依存関係の連鎖を経て現代のLinuxユーザーランド全体を構築する手法で、信頼できないバイナリへの依存を排除する。Sample氏は、GNU Guixの例を挙げ、初期の250MBのバイナリブロブが256バイトのhex0プログラムに置き換えられたことを紹介。また、Ken Thompsonの「Trusting Trust」攻撃のような、コンパイラや自己ホスト型プログラムに潜むバックドアを防ぐセキュリティ上の利点を強調した。ブートストラップの課題として、Rustのビルドチェーンの遅さや、カーネルのブートストラップが範囲外であることなどを挙げた。

「私たちは基本的に、デニス・リッチーがベル研究所から持ち込んだスターターでCコンパイラを作っているのです。」
  1. 0xDEAFBEAD

    [遅延]

  2. robalni

    私は、最小限の始まりからブートストラップされる環境全体のようなものになるプロジェクトに取り組んでいます。hex0のような16進数から2進数への変換器は機械語に近すぎると思い、すべてをソースコードにしたかったので、代わりに英語で説明され、ユーザーが自分で任意の方法でインタプリタを書くことを想定した、超シンプルな解釈系言語から始めることにしました。これにより、人間をコンピュータに人間の言語で結びつけることができ、より良く、理解しやすいと感じました。この超シンプルな解釈系言語は、次に超シンプルなRISC-Vアセンブラを構築します。ここで、アセンブラ内の関数がポインタを通じて呼び出されるという素晴らしいテクニックを思いつきました。これにより、アセンブラの実行中に関数を置き換えることができます。つまり、アセンブラが自身の関数のより良いバージョンをコンパイルするとすぐに、その関数は実行中のアセンブラ内でより良いバージョンに置き換えられ、残りのコードのコンパイルを続行し、新しい機能を使用できるようになります。そのため、再起動することなく進化します。

  3. moring

    > hex0プログラムは、16進数のテキスト文字列を、それらのバイトを持つバイナリに変換する方法を提供します。

    これを使って、基本的な考え方についての説明を求めます:16進テキストはバイナリの塊よりもどう優れているのでしょうか?どちらも理解するには詳細な知識が必要です。どちらも表示するためのツール(ASCIIまたはバイナリの読み取り)が必要であり、そのどちらも「信頼する信頼」の意味で侵害される可能性があります。

    私には、初期の「シード」の実際に重要な側面は、そのサイズ(大きいほど検証が難しい)と、使用される言語(Lispであれ、バイナリ機械語であれ、何であれ)が厳密に定義されたセマンティクスを持つことであるように思えます。

    (それとは直交して、シードと残りのすべてを、何も隠せないメディアに保存し、それをソースとして使用したいでしょう。しかし、それはすべてのアプローチに当てはまります。)

  4. lrvick

    私たちは、このチームの素晴らしい仕事のおかげで、初日からこの方法で、100%決定論的で、クォーラム署名され、LLVM/muslネイティブで、コンテナネイティブなディストリビューションを完全にソースからブートストラップしました。ブートストラップ可能なビルドはstagexを可能にし、それはリモートで証明可能なブートを可能にし、ライブサーバーのブートからhex0まで信頼の連鎖を遡ることができます。

    https://stagex.tools

    https://codeberg.org/stagex

    https://distrust.co/blog/enclaveos.html

    https://caution.co/

  5. andrewchambers

    動作するC89コンパイラからRustへのブートストラップチェーンを自動化しようとする人がいるのを見てみたいです。現時点では、現在のLLMは、複数日/週にわたる信じられないほど長いビルド時間を処理できるため、これらの驚くべきブートストラップの偉業を支援できると思います。

    私は一般的に決定論的ビルドに対して非常に楽観的です。

この日のほかの記事

2026-08-28