Asayomu Tech
注目★★★★★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 設定の差異を監査し。

推奨:異なる環境での検証を現在のドキュメント確認に追加すべき。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。