Linus强推Rust进内核,维护者说这是"癌症"
观点:Rust进内核是正确的事,但那些反对的维护者也不是顽固不化——他们反对的不是Rust,而是Linus这种"我不管你们死活"的推进方式。两边都有道理,但我觉得这场争议暴露了Linux内核社区一个更深层的问题:维护者制度已经跟不上了。
今天早上刷到一条热榜:“Linus将不顾反对合并Rust代码,内核维护者无奈强调:不能让’癌症’扩散”。
作为一个老嵌入式工程师,我看完也不安起来。
这不是第一次了。去年Rust for Linux从"实验性"转正的时候,社区就吵过一次。但这次不一样——这次是Linus本人下场硬推,而且反对的声音来自在内核社区混了十几年的老维护者。
这场架到底在吵什么。
先还原一下现场
事情大概是这样的:
Rust for Linux项目经过5年发展,已经从实验性标签毕业了。Linus在最近的邮件列表中表态,他不顾反对也要合并更多Rust代码进主线。
然后几个关键子系统的维护者炸了。有人直接在邮件里说Rust是"癌症",说这会"污染"内核代码库。也有相对温和的反对者,他们的论点是:我们不懂Rust,你让我们怎么review Rust代码?内核的维护者制度建立在"每个维护者都理解每一行代码"的基础上,Rust一进来这个基础就塌了。
两边越吵越凶。Linus的态度是:技术趋势不可阻挡,你们不学Rust就会被淘汰。反对者的态度是:你让我们review我们看不懂的代码,出了问题谁负责?
我站谁?
都不站。说说我的真实感受。
先说我支持Rust这边。
我做嵌入式Linux若干年年。C语言的内存安全问题,我踩过的坑很多。野指针、缓冲区溢出、use-after-free、double free——这些bug我每个都排查过。有些是在开发阶段发现的,有些是产品出货后客户报上来的。
我做过一个安防摄像头项目,因为驱动层一个use-after-free bug,导致设备在客户现场运行12小时必死机。我花了整整两周,用printk+watchdog才定位到问题。改了就一行代码,但这一行代价很大。
如果用Rust写这个驱动,这个bug根本就不会出现。Rust的所有权模型在编译阶段就把这类问题堵死了。所以我从技术角度是完全支持Rust进内核的——安全隐患是真实存在的,而Rust确实能解决其中很大一部分。
但我也不觉得反对者是在无理取闹。
一个子系统的维护者,通常是一个人(或者两三个人)负责review这个子系统所有的patch。他们要对代码的正确性、性能、兼容性负全责。
现在你突然让他们review Rust代码——大部分人没学过Rust,甚至没时间学。他们连语法都看不懂,怎么判断代码对不对?
Rust进入内核带来的核心矛盾:维护者对C代码有深厚理解,但对Rust代码只能做"黑盒审查"
这不是态度问题,是能力问题。一个维护者说:“我连Rust的泛型和trait都还没搞明白,你让我review一个用了复杂泛型的Rust驱动?”——我觉得这是合理诉求。
问题的核心不是Rust,是制度
这场争议让我看到的是:Linux内核的维护者制度,在面对Rust这种"破圈"技术时,暴露出严重的局限性。
传统的维护者制度基于一个前提:所有提交的代码都在每个维护者的能力范围内。C语言内核代码,写了30年C的老手基本都能看懂。但Rust打破了这一点。
Linus说"你们不学Rust就会被淘汰"——这话从技术角度看没错,但从人情角度看,等于对一群把半辈子贡献给内核的人说"你们的经验贬值了"。换你你也不爽。
我认为正确的做法不是"不顾反对合并",而是建立一套过渡机制:
- 建立Rust代码的专项review团队— 不是每个维护者都要懂Rust,但每个子系统应该配备一个Rust reviewer
- Rust和C的接口层要极度简化— 减少FFI边界,降低review难度
- 给维护者学习时间— 定一个3年过渡期,这期间Rust代码合并走特批通道
如果Linus能做到这三点,反对声音至少能减少80%。
这对嵌入式工程师意味着什么?
如果你是做嵌入式Linux驱动的,这事跟你有直接关系。
未来3-5年,Rust在内核中的地位只会越来越重要。这不以任何人的意志为转移。你看Android已经强制要求新驱动用Rust写了,Google的力推是实打实的。
但也不要焦虑。经历了好几次"技术革命":从2.4到2.6内核、设备树替换platform_data、devicetree overlay、设备驱动模型重构……每一次都说"不改就会被淘汰",但每次真正被淘汰的都是那些拒绝学习的人,不是暂时不会的人。
但,那些内核维护者的反对声,有一部分是真的合理的。Linus不能因为自己懂Rust,就假设所有人都懂。内核社区的核心资产不是代码,是那些有几十年经验的维护者。把这些维护者逼走了,换来的Rust代码谁来长期维护?
总结
Rust进内核是好事,但不是好事就可以不讲方法。Linus的"强行推进"可能会造成比Rust带来的好处更大的伤害——社区分裂。
我的建议:
- 如果你是内核开发者,去学Rust。不是为了跟上潮流,是为了能看懂别人提交的代码
- 如果你是维护者,不要抵制Rust。抵制改变的最后都被改变了
这场争论还会持续很久。但有一件事是确定的:代码不会骗人,Rust的安全性优势是实实在在的。反对者与其说"这是癌症",不如说"我需要时间和支持来学习"。