2023年8月28日 Go生态洞察:完美可重现,经过验证的Go工具链 ️
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁
🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐
🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
☁️🐳
Go语言开发者必备技术栈☸️
:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥
文章目录
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
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生态洞察专栏收录,详情点击这里。
下一篇预告
🐾 下一篇,我们将探讨Go 1.21中的“基于性能分析的优化”。将深入了解如何通过性能分析来优化Go代码,提升其性能和效率。敬请期待! 🚀�
原创声明
======= ·
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。
更多推荐
所有评论(0)