再現性のあるビルド(さいげんせいのあるビルド、、決定論的なビルド)とは、同じソースコードを用いてコンパイルした場合確実に同じバイナリデータを再現するビルド手法のことを指す。
再現性のあるビルドは、の一部を構成する。再現性のあるビルドによりバイナリが信頼できるソースコードからコンパイルされたことを証明できる。
方法 再現性のあるビルドを実現するためには、使用するビルド環境に関係なく、コンパイラへ入力される情報が同じである必要がある。それには入力ファイルの順序、タイムスタンプ、ロケール、パスなど、変更される可能性のある変数の正規化が必要とされる。
また、コンパイラ自体が非決定論的な動作を用いてはならない。例えば、ランダムなハッシュシード値を持つハッシュテーブルを使用したり変数のアドレスを使用したりしてはならない。
使用例
F-Droidで公開されているアプリの多くは再現性のあるビルドによって作られていて(必須ではない)、公開されているソースコードによって作られていることが保証されている。 パッケージ管理システムNix,Guixは再現性のあるビルドによって作られたソフトウェアパッケージを使用し、依存パッケージをハッシュ値で厳密に指定することで、依存関係を含め高い再現性を確保している。このため依存関係地獄に陥らずに済む。これらパッケージ管理システムを使用したNixOS,GuixOSは高い再現性を持ち、設定ファイルを別のマシンにコピーし、更新コマンドを実行するだけで、(ユーザーデータなどNixパッケージマネージャによって管理されていない部分を除いて)全く同じシステム構成(カーネル、アプリケーション、システムサービスなどを含む)を再現できる。
脚注
外部リンク reproducible-builds.org Debian再現性のあるビルド