PyPIで再現可能なビルドを実現するために欠けているもの
What's missing to have reproducible builds on PyPI
Pythonパッケージのサプライチェーンセキュリティ強化の観点から、PyPI上のディストリビューション(sdistやwheel)で再現可能なビルドを実現するために必要な仕様の欠落を考察。ソースコードの場所やビルドに使用したツールの記録方法、SBOMの活用、PyPIでの検証結果の表示方法など、具体的な提案を行っている。
再現可能なビルドは、独立した第三者がディストリビューションのビットがソースコードから期待されるものと一致することを検証できるようにし、ビルドプロセス中の改ざんを検出する可能性を提供します。
HNでの議論
10- edelbitter
> このファイルは<信頼できる当事者の名前>によって独立に再現されました
これは、検証者が何をすべきかについての強力なポリシーと組み合わせない限り、危険に聞こえます。
例えば、検証者が単にビルドボットにネットワークアクセスを許可し、その結果がどうあるべきかをチェックするだけなら、侵害は見えないままで、ラベルは静かに「独立にダウンロードされた」に格下げされる可能性があります。
そして、このようなサービスを自分のニーズを超えて提供する意思のある当事者は多くないと思います。同時に、インフラとポリシーがすでに整っている場所(Debianなど)でそのサービスをすでに提供していない限りは。あるいは、少なくとも、バージョンが上がるたびに再現性を壊さないビルド依存関係にすでに貢献しているでしょう。
- whateverboat
Pythonでは、実際に有用な方法で再現可能なビルドを行うのは非常に難しいように思えます。なぜなら、Pythonのホイールは、他のどこにも存在しないパスや環境についての非常に暗黙的な仮定を持っているからです。
- crabbone
これらの人々は、自分の空想の世界にあまりにも深く入り込んでいます...
> それで、私たちは肩をすくめて「再現可能なビルドが必要ならsdistsを使うな」と言わざるを得ないのでしょうか。
これは何だ、私には理解できない... ソースをダウンロードしたのに、どうして再現可能なビルドの成果物を期待できるのでしょうか。
そして、最も重要なのは、この話はすべて「純粋な」(つまりPythonのみの)パッケージについてです。これは、実際にはほとんどの実用的なPythonプロジェクトにとってほとんど価値がありません。なぜなら、それらはネイティブバインディングに依存しているからです。それらをビルドするための標準的な手順が存在しないのに、なぜPyPIがそれらをビルドできると期待すべきなのか、私には理解を超えています。