主要观点:功能性包管理器如 Nix 常被视为可提供可重现性,但 Nix 不能保证所有构建实现位级可重现性,虽有“可重现构建和部署”口号但存在争议,难以客观评估 NixOS 对于位级可重现性的好坏,因其包集规模大缺乏重现性监测。
关键信息:
- 可写非确定性构建的 Nix 包代码示例。
- NixOS 社区曾以可重现性作营销论点,引发与可重现构建组织成员的紧张关系。
- 研究了 6 年中 nixpkgs 的位级构建可重现性,发现可重现率从 2017 年的 69%稳步上升至 2023 年 4 月的约 91%,2020 年 6 月有可重现性回归。
- 识别出导致不可重现的主要原因,如嵌入日期、uname 输出、环境变量、构建 ID 等。
重要细节: - 研究通过选择 17 个 nixpkgs 修订版,本地重新编译并与 Hydra 历史构建对比来确定可重现性。
- 对不可重现的包生成 diffoscope 以理解差异,通过二分法确定修复提交。
- 指出即便 nixpkgs 已有高可重现率,仍有提升空间,研究结果可用于增加对 Nix 替换协议的信任等。
- 提供了相关研究的参考链接,如关于可重现性的研究文章及相关 GitHub 问题等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。