矛盾的很,Go1.24 将需要更新的 Linux 内核!

大家好,我是煎鱼。

一门编程语言总是要适配多个平台多种架构,其中莫过于适配 Windows 和 Linux 的不同版本。

老的可能会被逐渐废弃,稳定版本的逐渐占据主流。Go 有 Go1 兼容性保障,导致取舍之间总是会纠结要不要继续保留老的 Linux 版本内核支持。

Go1.24 期望用 Linux 内核 3.2

最近 Go1.24 的规划已经提上日程了,其中包含一项内核变更《all: require Linux 3.2 kernel for Go 1.24[1]》:

c21dd9e13ae2ee87f19479b2e270ae43.png

在 2021 年,Go 将 Linux 内核的最低版本提高到了 2.6.32。至此 3 年多再也没变过。

Rust 和 glibc 在去年决定将内核的最低版本定为 3.2。Linux 生态系统的其他部分也逐步开始采用 3.2。

作为 Go 的最低版本,rsc 认为选用 3.2 这似乎是合理的。Go 团队计划在 Go 1.24 中做出改变。每个人都应该使用更新的内核进行安全更新。

Go 创始人的纠结

Go 创始人 Rob Pike 还是挺纠结的,他表示:总体而言,我对这一趋势持矛盾态度。对于 Go,它也有点违背兼容性承诺。

5b88fdb7bfac99671e1028afe42a16e8.png

制造商放弃对旧硬件的支持,要求我购买昂贵的升级产品,但没有任何回报,这让我多次感到困扰。

我仍然在实验室中运行 32 位 x86 Mac,因为没有它,我无法控制只能与旧版 macOS 交互的重要设备。我甚至无法将其连接到网络,因为担心某些更新会导致我的设备无法工作。

虽然我理解 “更新更安全,更新更好” 的隐含价值,但让 Go 二进制文件在旧操作系统上运行对项目的实际成本是多少?这似乎是评估该提案的更好方法。

最终结论

本次是由 rsc 直接当机立断,表示即使是改向支持 Linux 3.2 也都已经是 12 年前发布的了。肯定不算是先进技术!得变!

同时他们在 crypto/rand: crash process on error reading randomness[2] 的讨论中发现,Linux 3.17 增加了 getrandom(2) 方法,可以满足 Go 的使用诉求。将原定的 Linux 3.2 版本要求再度提高了。

最终 Go1.24 将 Linux 内核所需的最低版本定到了:Linux 3.17。另外 Linux 3.10 版本中追加补丁后添加了 getrandom(2) 系统调用也是能够支持的。

推荐阅读

参考资料

[1]

all: require Linux 3.2 kernel for Go 1.24: https://github.com/golang/go/issues/67001

[2]

crypto/rand: crash process on error reading randomness: https://github.com/golang/go/issues/66821

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

64638aceed0b76981ee7561009e914f4.jpeg

25da70868a12abaadb2dd1125e04bd14.png

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

原创不易 点赞支持

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值