/**********************************
* 情怀叙事,可跳过本区域
我的第一个C程序是1997年写的,MSDOS + Turbo C。后来被老乡带到清华大学校园机房玩水木清华(当时校园安保措施没那么严),看到了Linus Torvalds在1991年发给comps.os.minix新闻组的那封信:
Hello everybody out there using minix -…
我的第一感觉是,MSDOS/Windows不是很好吗,为啥还要另外一个操作系统?后来才认识到,MSDOS/Windows并不好,更不好的是它是商业操作系统,是个黑盒子,你不可能知道它是怎么运作的。当时的Linux虽然不够好,图形界面也很丑陋,但是开放源代码,可以让人任意修改。
毕业后我在中关村买了张Red Hat Linux 6.2 光盘折腾了一下,很快对这个单体内核(monolithic kernel)模块化设计的操作系统感兴趣了。那时候生活虽然拮据,还是咬牙买了一台电脑,装上了Red Hat Linux,用电话线连上水木清华跟人海聊。除夕那天,我在职工集体宿舍用自己做的交叉线试了很久,终于把两台电脑连通,累计在心头的乡愁瞬间烟消云散。
Linux后来的发展非常迅速,从桌面电脑、服务器市场到手机和电视,基本上每次内核更新这些设备都会同步感知。
*********************************/
Linux内核版本经历了从2.6到3.0、从4.20到5.0、从5.19到6.0,现在从6.19变成了7.0。在Linus Torvalds看来,版本号只是数字,没有其他含义(无技术上的里程碑意义、无API兼容问题)。最近是每发布20次,就有一个大版本号变化。没有别的原因,就是刚学数数的孩子只能数到20,因为手指头和脚趾头都用光了。:D
Linux Kernel 7.0带给我们程序员的有以下惊喜。
1 Rust成为官方开发语言
从1991年Linux诞生以来,一直用C语言开发。C语言很强大,但是犯的错误也不可饶恕:它会让系统崩溃、内存数据损坏、制造安全漏洞。Rust可以从语法层面规避这些问题,由于它比较新,一些老师傅不愿意接受它。在2025年日本东京内核维护者峰会上,终于达成了共识:Rust在内核开发社区不再是实验性质,它是内核的一部分,不搬家了。历经五年,Rust终于转正。在这五年时间,C代码增长了34M行,Rust接近25K行,这说明Rust并没有取代C。
下面拉出不愿意接受Rust的老师傅黑名单:
* Christoph Hellwig, DMA子系统维护者,说Rust是毒瘤,并因此离职
* Wedson Almeida Filho, 来自微软的工程师,为Linux贡献Rust代码的核心人员,说Rust是非技术的胡说八道
* Alex Gaynor, Rust项目的联合负责人,在Rust官宣认可的同一周离职
* Ted Ts’o,备受尊敬的内核开发者之一,直言不讳地说不能强迫大家学Rust
Linus Torvalds力挺Rust,安卓16打包了Rust内核代码(ashmen分配器),在上百万台设备运行,证实Rust可以产品使用。
下图是Rust在Linux Kernel被曲折接受的过程。

2 后量子密码学(Post-Quantum Cryptography)
每次内核加载驱动程序或者其他软件模块,都要检查它的数字签名,确保没有被篡改,就像检查信封上的封蜡。问题是,未来的量子计算机计算能力很强,可能会伪造这些封印。Linux Kernel 7.0引入了ML-DSA签名,就算量子计算机也无可奈何。
ML-DSA(Module-Lattice-Based Digital Signature Algorithm)是一种基于模数格(module lattice)数学原理的数字签名算法。它是 FIPS 204(Federal Information Processing Standards,联邦信息处理标准)的一部分,获得了 NIST(National Institute of Standards and Technology,美国国家标准与技术研究院) 的批准。这个算法的特别之处在于,它利用了 格理论(lattice-based cryptography)中的数学问题,格理论被认为对传统计算机和量子计算机都具有很高的安全性,因此被认为是未来对抗量子攻击的潜在解决方案之一。
量子计算机还没出来,为啥Linux内核就开始考虑这种攻击呢?别有用心者一直在收集加密过的数据,一旦量子计算机出来,就可以大规模解密这些数据,所以需要未雨绸缪。
这种防范不是无中生有的,比如2011年NIST宣布不再使用SHA-1签名,2017年就出现了针对SHA-1签名的攻击。
3 XFS自我修复
我们日常用EXT4文件系统,XFS主要用在数据中心和大存储系统里。断电、硬件瑕疵、软件臭虫等原因会导致文件系统损坏,修复过程需要让系统处于离线状态。新的改进可以让XFS在运行时自我修复,不需要人工干预,不会影响在线服务。
xfs_header实时监测文件系统健康状态,如果发现元数据损坏(计算校验和比对),从备份里拷贝一份恢复,用户程序不会受到影响。
在企业级存储里,XFS被大规模应用,对他们来说这次更新意味着实打实的资金节省。
4 io_uring:百万美金的修复赏金得到解决
每次我们读写文件、在网络上收发数据,都要通过系统调用访问Linux内核。为什么不直接调用内核呢?这是为了提高系统安全性和健壮性。内核代码在内核空间运行,用户代码在用户空间运行,二者具有不同的执行上下文(堆、栈、内存映射、指令指针等)。系统调用会把执行上下文从用户空间切换到内核空间,其中包括安全检查。
如果每次调用都做安全检查,会降低系统性能,影响I/O吞吐量,所以Linux提供了io_uring这个快速车道。io_uring是任何操作系统I/O操作最快的方式之一,但因为没有“安全摄像头”,容易被黑客盯上。比如2022年,谷歌60%的安全漏洞是io_uring引起的。谷歌悬赏百万美金修复这个问题,Chrome OS则是彻底关闭了io_uring。
核心问题是:io_uring绕过了传统的系统调用,导致标准安全过滤器seccomp无法碰到它。Linux kernel 7.0给io_uring加上了基于BPF(Berkeley Packet Filter,用过tcpdump的应该熟悉)的过滤器,系统管理员可以精确控制安全策略,不用彻底关闭它。现在你可以既要安全又要性能了,虽然等待时间太长太长,终归是值得的。
5 进程调度器:更少模式,更高性能
进程调度算法直接影响系统性能和用户体验,新的调度算法从四种抢占模式改成了两种,以适应现代体系架构:PREEMPT_LAZY 和 PREEMPT_FULL 。
PREEMPT_LAZY 这个选项很有意思。它恰到好处:对普通任务采取宽松的抢占策略(让他们完成工作),而对实时任务则采取积极的抢占策略。想象一下,一位经理会等员工说完话才打断他们,除非发生了火警。
与此同时,一个历时十年开发的时间片(time-slice)扩展补丁也已合并。桌面 Linux 用户应该会感受到系统更流畅,不过 7.0 版本的正式基准测试结果尚未公布。
6 容器和文件系统的改进
容器在云端和开发人员中用得比较多,比如docker。通过容器,我们可以建立服务之间的隔离运行环境,运行环境就是开发环境,减少了因二者差异导致的不确定性。一台机器可以部署成百上千个容器,如何让容器启动更快内存使用更少就很关键了。
有两个小小的改进值得注意:
- OPEN_TREE_NAMESPACE(由 Christian Brauner 开发)可将容器创建速度提升 40%。基准测试显示,旧的 pivot_root() 方法在 60 秒内大约创建 73,000 个容器,而新的 open_tree() 方法在相同时间内大约创建 109,000 个容器。如果您运行的是拥有数百个节点的 Kubernetes,这将直接影响您的 Pod 启动时间
- EROFS 新增了对容器共享页面缓存的支持。现在,跨容器具有相同哈希值的文件共享一个缓存副本。由于容器环境大多数镜像都基于相同的文件层 (layers)构建,这会大大减少内存用量
Btrfs 文件系统实现了对大数据块直接 I/O 操作,这在以前是不可能的。数据库、视频处理和科学计算都直接受益。
7 对AI代码如何合并进内核有了明确规则
Linux 内核由成千上万的志愿者和公司员工构建,他们提交的代码需要经过其他人审查才能被合并。随着 ChatGPT 和 Claude Code 人工智能工具开始写代码,内核社区需要决定:人工智能能否提交代码?如果人工智能编写的代码破坏了某些功能,谁该负责?
Linux 7.0对此有明确的规定:
您必须使用“Assisted-by”标签披露人工智能辅助。人工智能代理不得添加“Signed-off-by”标签,因为只有人类才能根据开发者原创性证书(Developer Certificate of Origin)合法地认证代码。
内核每次发布都会收到来自 200 到 250 家公司、1500 到 2000 名开发者的贡献。代码量超过 4000 万行(10 年间翻了一番),并且每两个月大约新增 40 万行。因此,人工智能生成代码不可避免,制定官方政策既务实又必要。
下图总结了Linux Kernel 7.0的新变化。

未来正变得越来越好,不是吗?
参考
https://canartuc.medium.com/linux-7-0-googles-1m-bug-finally-fixed-afa20f37b892
/**********************************
*
* exit(0)
*
*********************************/