計画する(Making plans)
再現性のあるビルド とは、同じソースコードからバイト単位で完全に同じバイナリを生成することで、ビルドプロセスの途中で何一つ問題を混入していないことを、誰でも検証できるようにする考え方です。
再現性のあるビルドを実現するには、ソフトウェア開発における複数の役割の人々との共同作業が不可欠です。 小規模なプロジェクトなら、一人で全ての役割を演じることができるでしょう。 しかし、どのような役割が(責任が)あるのか区別するのに役立ちます。
確実なビルドシステムを手に入れる
再現性のあるビルドを実現するには、ソースコードをビルドした結果に予測できない差異を生成しないようにしなければなりません。
再現性のないバイナリに困っているようでなければ、予測できない差異が生じていてもたいした問題にはならないでしょう。 ある環境(ユーザー名、CPU、バージョン、ファイルシステムなど)で再ビルドした結果に、差異が含まれていることを前提にしたテストのやり方を決めればいいでしょう。
ビルド環境を定義する
コンパイルするためのツールのバージョンが違えば、異なる結果を生成するかもしれません。 ユーザーは、最初にビルドしたときの環境にできるだけ近い環境を準備しなければなりません。 ツールチェイン1 自体をバイト単位で同一にする必要はありませんが、同じ結果を出力するようにしなければなりません。
ビルド環境は、そのソフトウェアを開発しているときに確認したものでもいいですし、ビルド時に確認したものでもいいでしょう。
ビルド環境を広く周知する
ユーザーが、ソフトウェアを再ビルドするためのビルド環境に関する情報を得られるようにしなければなりません。
ソースコードの一部としてビルド環境を定義してあれば、余計な作業は不要です。
それが無理ならせめてバイナリと同じ場所で参照できるようにしなければなりません。 検証を自動化できるように、かつ、有識者が環境の正しさをレビューできるようにするため、人間と機械の両方が理解できる形式になっているのが理想的です。
比較方法を定義する
ユーザーが、ビルド環境を簡単に再作成できるようにしなければなりません。 また、ソースコードの取得、ビルドの実行、ビルド結果の比較についても同様です。
理想的には、同じバイナリかどうかを確認する方法は出来る限り簡潔になっているべきです。 バイト単位で比較する方法と、暗号学的ハッシュ関数の結果で比較する方法は、どちらも簡単で分かりやすい方法です。
暗号署名(暗号学的ハッシュ関数に基づく電子署名)を消去したり、一部の要素を無視するような方法も存在します。 しかし、そういう場合はドキュメントとスクリプト(手順書?)を両方用意しなければならないでしょう。 原理とコードは、レビューアに理解してもらえるよう分かりやすくしなければならないでしょう。
-
ツールチェイン とは、ソフトウェアをビルドするために必要な全ての要素のことです。 ↩
Introduction
- 定義(Definitions)
- History
- やってみる(Buy-in)
- 計画する(Making plans)
- Academic publications
Achieve deterministic builds
- SOURCE_DATE_EPOCH
- 確実なビルドシステム(Deterministic build systems)
- 揮発性のある入力データは消える場合がある(Volatile inputs can disappear)
- 入力データの順序を固定する(Stable order for inputs)
- 値を初期化する(Value initialization)
- バージョン情報(Version information)
- タイムスタンプ(Timestamps)
- タイムゾーン(Timezones)
- ロケール(Locales)
- アーカイブのメタデータ(Archive metadata)
- 出力データの順序を固定する(Stable order for outputs)
- 無作為性(Randomness)
- ビルド時のファイルシステムパス(Build path)
- システムイメージ(System images)
- JVM
Define a build environment
- ビルド環境に含む要素(What's in a build environment?)
- ビルド環境を記録する(Recording the build environment)
- ビルド環境の定義における戦略(Definition strategies)
- Proprietary operating systems
Distribute the environment
Verification
Specifications
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