前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023年8月28日 Go生态洞察:完美可重现,经过验证的Go工具链 ️

2023年8月28日 Go生态洞察:完美可重现,经过验证的Go工具链 ️

作者头像
猫头虎
发布2024-04-08 15:20:44
970
发布2024-04-08 15:20:44
举报
文章被收录于专栏:用户11053981的专栏

2023年8月28日 Go生态洞察:完美可重现,经过验证的Go工具链 🛠️

摘要

🐾 猫头虎博主来啦!今天我们深入探讨开源软件的一大优势:可重现性。搜索词条:完美可重现、经过验证的Go工具链。在Go 1.21版本中,我们迎来了首个具有完美可重现构建的Go工具链,这一进步对于加强供应链安全至关重要。让我们一起揭开Go工具链可重现性背后的神秘面纱吧!

引言

尽管开源软件允许任何人阅读源代码,但大多数软件,即使是开源软件,也以编译后的二进制形式下载,这些形式更难以检查。为了应对潜在的供应链攻击,使开源软件构建可重现变得至关重要。Go 1.21是首个实现完美可重现构建的Go工具链,这是一个重要的里程碑。

正文

🛠️ 构建可重现的必要性

计算机通常是确定性的,但许多构建工具却无意中纳入了我们通常不会意识到的相关输入。为了实现可重现的构建,每个相关输入都必须是可配置的,并且二进制文件必须与明确列出的配置一起发布。

🛠️ 完美可重现构建的Go

从Go 1.21开始,Go工具链变得完美可重现:其唯一相关的输入是该构建的源代码。我们消除了许多相关输入,包括主机C工具链、动态链接器、源代码目录、主机操作系统和主机架构等。

Go 1.10中的可重现性

Go 1.10引入了一个内容感知的构建缓存,它根据构建输入的指纹来决定目标是否是最新的,而不是依赖于文件修改时间。

Go 1.20中的进步

我们为了简化可重现构建和工具链管理,在Go 1.20中去除了更多相关输入,例如主机C工具链。

在Go 1.21中实现的完美可重现性

Go 1.21完全消除了剩余的相关输入,实现了完美的可重现性。这包括彻底移除主机C工具链和动态链接器作为相关输入。

🛠️ 验证Go工具链

我们不仅要制作一次可重现的Go工具链,还要确保它们持续保持可重现性,并且其他人也能轻松地复制这一过程。我们现在在可信的Linux/x86-64系统和Windows/x86-64系统上构建所有Go发行版。这两个系统必须产生逐位相同的存档,否则我们不会继续发布。

🛠️ 验证Ubuntu的Go工具链

通过重现Ubuntu的golang-1.21包,我们证明了即使打包者使用不同的配置或其他更改来编译,Go工具链的易于重现性也使得重现其二进制文件变得简单。

总结

可重现构建是加强开源供应链安全的重要工具。像SLSA这样的框架关注于软件的来源和监管链,用于通知关于信任的决策。可重现构建则是通过提供验证该信任是否得当的方式来补充这种方法。理想情况下,

所有以二进制形式分发的开源软件都应该拥有易于重现的构建。在实践中,正如我们在这篇文章中看到的,非预期输入很容易渗透到构建中。有关如何使您自己的软件构建可重现的更多信息,可以参考可重现构建项目。

本文已被猫头虎的Go生态洞察专栏收录,详情点击这里

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2023年8月28日 Go生态洞察:完美可重现,经过验证的Go工具链 🛠️
    • 摘要
      • 引言
        • 正文
          • 🛠️ 构建可重现的必要性
          • 🛠️ 完美可重现构建的Go
          • 🛠️ 验证Go工具链
          • 🛠️ 验证Ubuntu的Go工具链
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档