注目★★★★★Lobsters
Nix のサンドボックス設定は隠れたビルド入力──再現性が保証されない落とし穴
30秒で把握
- 1Nix のサンドボックスパス設定が derivation に含まれず隠れた入力となり、同じ derivation でも異なる出力を生む可能性が判明
- 2コンパイル時に決まるため同じ Nix バージョンでも環境で異なり、OpenJDK ビルドで出力破損が実例化した
- 3sandbox-paths を derivation に含めると binary cache 共有が崩壊するため、マシン間の検証体制強化が必須
要約
Nix のサンドボックスパス設定 (sandbox-paths) はビルド定義 (derivation) に記録されない隠れた入力となり、同じ derivation でも異なるビルド結果を生む可能性がある。/bin/sh をマウントするかどうかなど、sandbox-paths はコンパイル時に決まるため、同じ Nix バージョンを使っていてもマシン間で異なり得る。OpenJDK ビルドで Guix (sandbox に /bin がない) から Nix (デフォルトで /bin/sh をマウント) に移行した際、derivation は同じでも build スクリプトの動作が変わり出力が破損した事例から、この設定がビルド再現性を密かに損なうことが判明した。sandbox-paths を derivation に含めると binary cache の共有が崩壊するため根本的な解決は難しく、マシン間の hidden input が信頼できるビルドを困難にしている。
あなたへの影響
Nix でマルチマシン開発や binary cache 共有を運用するチームは、sandbox-paths を含む build 設定の差異を監査し。
推奨:異なる環境での検証を現在のドキュメント確認に追加すべき。