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

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

大家好,我是煎鱼。

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

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

Go1.24 期望用 Linux 内核 3.2

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

图片图片

在 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,它也有点违背兼容性承诺。

图片图片

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

我仍然在实验室中运行 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

责任编辑:武晓燕 来源: 脑子进煎鱼了
相关推荐

2022-04-26 16:20:43

dockershimDockerKubernetes

2021-08-30 07:49:31

Linux内核负载均衡

2013-08-08 09:43:33

Linux桌面桌面系统

2022-01-16 08:09:03

微软DirectXLinux

2023-05-26 21:22:05

2015-10-28 10:13:25

中国软件网

2011-01-14 16:51:44

Linux内核

2022-12-09 08:52:51

Go匿名接口

2012-01-04 10:51:13

服务器云计算

2023-01-14 13:36:12

Linux内核

2013-11-14 09:37:19

Linux内核社区

2010-10-13 10:57:54

2023-02-20 17:27:21

2019-05-10 08:00:00

UKUUUbuntuLinux

2021-12-29 11:51:15

Linux 内核源码Linux 系统

2013-11-06 13:03:10

Linux内核

2013-11-05 09:58:39

Linux内核

2013-11-12 11:01:46

Linux内核

2013-11-07 13:59:56

Linux内核

2013-11-25 14:07:11

Linux内核内核特性
点赞
收藏

51CTO技术栈公众号