Documentation index

計画する(Making plans)

再現性のあるビルド とは、同じソースコードからバイト単位で完全に同じバイナリを生成することで、ビルドプロセスの途中で何一つ問題を混入していないことを、誰でも検証できるようにする考え方です。

再現性のあるビルドを実現するには、ソフトウェア開発における複数の役割の人々との共同作業が不可欠です。 小規模なプロジェクトなら、一人で全ての役割を演じることができるでしょう。 しかし、どのような役割が(責任が)あるのか区別するのに役立ちます。

確実なビルドシステムを手に入れる

再現性のあるビルドを実現するには、ソースコードをビルドした結果に予測できない差異を生成しないようにしなければなりません。

再現性のないバイナリに困っているようでなければ、予測できない差異が生じていてもたいした問題にはならないでしょう。 ある環境(ユーザー名、CPU、バージョン、ファイルシステムなど)で再ビルドした結果に、差異が含まれていることを前提にしたテストのやり方を決めればいいでしょう。

ビルド環境を定義する

コンパイルするためのツールのバージョンが違えば、異なる結果を生成するかもしれません。 ユーザーは、最初にビルドしたときの環境にできるだけ近い環境を準備しなければなりません。 ツールチェイン1 自体をバイト単位で同一にする必要はありませんが、同じ結果を出力するようにしなければなりません。

ビルド環境は、そのソフトウェアを開発しているときに確認したものでもいいですし、ビルド時に確認したものでもいいでしょう。

ビルド環境を広く周知する

ユーザーが、ソフトウェアを再ビルドするためのビルド環境に関する情報を得られるようにしなければなりません。

ソースコードの一部としてビルド環境を定義してあれば、余計な作業は不要です。

それが無理ならせめてバイナリと同じ場所で参照できるようにしなければなりません。 検証を自動化できるように、かつ、有識者が環境の正しさをレビューできるようにするため、人間と機械の両方が理解できる形式になっているのが理想的です。

比較方法を定義する

ユーザーが、ビルド環境を簡単に再作成できるようにしなければなりません。 また、ソースコードの取得、ビルドの実行、ビルド結果の比較についても同様です。

理想的には、同じバイナリかどうかを確認する方法は出来る限り簡潔になっているべきです。 バイト単位で比較する方法と、暗号学的ハッシュ関数の結果で比較する方法は、どちらも簡単で分かりやすい方法です。

暗号署名(暗号学的ハッシュ関数に基づく電子署名)を消去したり、一部の要素を無視するような方法も存在します。 しかし、そういう場合はドキュメントとスクリプト(手順書?)を両方用意しなければならないでしょう。 原理とコードは、レビューアに理解してもらえるよう分かりやすくしなければならないでしょう。

  1. ツールチェイン とは、ソフトウェアをビルドするために必要な全ての要素のことです。 


Documentation index

Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches welcome via our Git repository (instructions) or via our mailing list. • Full contact info