概念定义
当用相同的声明式工具链与输入重复构建时,产出逐字节一致——无论何时、何地、由谁构建——这样的构建就是可复现的。实现它需要固定工具与依赖版本、去除时间戳与绝对路径、控制文件顺序,并隔离环境。可复现性使独立验证“已发布构件与其源码对应”成为可能。
为什么重要
如果构建可复现,独立各方就能重建源码并确认其与已发布构件一致,这是针对被攻陷构建流水线的最强可用检查。可复现性还让缓存变得可靠——相同输入确实产出相同输出——并让已发布的二进制可追溯到产出它的代码,从而简化安全调查。
工程实践
在锁文件中固定工具与依赖版本,并在来源证明中记录工具链。从构件中剥除时间戳与路径,处理前对输入做确定性排序,并在受控环境中构建。随后在第二个环境中持续重建并比较摘要以验证;一次宣告却从不复检的可复现性,会随工具变化悄悄回退。