Ubuntu 构建是确定性的吗?我假设它们是,也就是说,如果我重新创建构建 Ubuntu 安装媒体的过程,我将获得与 Ubuntu 镜像上的图像相同的图像(逐位,具有相同的校验和)。
Joanna Rutkowska(Qubes OS发行版的首席开发人员)最近的一篇文章表明事实并非如此:
目前大多数项目,包括所有 Linux 发行版,都不是确定性地构建
为什么不?
Ubuntu 构建是确定性的吗?我假设它们是,也就是说,如果我重新创建构建 Ubuntu 安装媒体的过程,我将获得与 Ubuntu 镜像上的图像相同的图像(逐位,具有相同的校验和)。
Joanna Rutkowska(Qubes OS发行版的首席开发人员)最近的一篇文章表明事实并非如此:
目前大多数项目,包括所有 Linux 发行版,都不是确定性地构建
为什么不?
不,他们不是。让我们在这里澄清一个区别,
系统是否支持“可复制构建”?
是的,所有系统都支持确定性的包。
系统是否强制执行“可复制构建”?
不,尽管它确实有助于诊断问题,并且正在努力使包可重现——无论如何都会报告和处理错误。
一切都无一例外地可复制吗?
差远了。
现在让我们定义“可复制的构建”
现在让我们谈谈需要什么
在“如何”下查看此页面,其中规定了三个标准
构建系统需要完全确定:转换给定的源必须始终产生相同的结果。通常,不得记录当前日期和时间,并且必须始终以相同的顺序写入输出。
用于执行构建的工具集以及更一般的构建环境应该被记录或预定义。
应该为用户提供一种方法来重新创建足够接近的构建 3.,执行构建过程,并验证输出是否与原始构建匹配。
您可以在此处找到有关所有这些的更多文档。
至于为什么 Ubuntu 目前无法重现,像Perl 这样的东西目前失败了,因为
-V
为了方便存储了编译器参数——他们正在等待 GCC 来修补这个上游。很多这样的功能都可以简单地取消。其他一些问题:一些手册页和程序编译了构建日期,其他编译在共享库等的可变路径中。不可重现不是问题或漏洞。它只会让验证你没有被篡改变得更加困难,而且目前该功能被认为更有价值。
您可以在此处关注 Debian 在确定性方面的进展
对于初学者,我认为 Rutkowska 不是在谈论确定性地构建安装介质,而是在谈论包(deb、rpm)。
Debian 正在致力于可重复地构建软件包(https://wiki.debian.org/ReproducibleBuilds),但仍然有很多软件包无法以这种方式构建...
确定性地构建整个分布无疑是一个更大的挑战。