这不是你的一亩三分地——简评内核维护者刁难Rust for Linux

原创作者:庄晓立(LIIGO)
原创日期:2025年2月10日
原创链接:https://blog.csdn.net/liigo/article/details/145559373
版权所有,转载请注明出处。


有关此事件的来龙去脉,可参考以下文章:

20250214 LIIGO 补记Hector Martin: “Resigning as Asahi Linux project lead”. Reddit comments.

20250218 LIIGO 补记Maintainer opinions on Rust-for-Linux

20250221 LIIGO 补记Resistance to Rust abstractions for DMA mapping

20250221 LIIGO 补记Linus Torvalds: That PR “DID NOT TOUCH THE DMA LAYER AT ALL”

20251211 LIIGO 补记The (successful) end of the kernel Rust experiment


许多不明就里的吃瓜群众,错误地把Rust for Linux项目(以下简称RFL)想象成异族入侵Linux,想象它非要舔着脸把Linux的C代码改成Rust,而Linux维护者、原住民则奋起反抗、保卫家园。

其实完全不是这回事。Rust for Linux在Linux v6.1时就被正式合入内核主仓,6.1发布于2022年底,距今两年多了。所以RFL的Rust开发者也是Linux开发者,他们和原来的C开发者,理论上应该是一家人。双方的共同目标也是一致的,都是致力于让Linux内核更完善。

The Rust support was merged in v6.1 into mainline in order to help in determining whether Rust as a language was suitable for the kernel, i.e. worth the tradeoffs.

Rust for Linux是被请进Linux内核的(先别联想刘备入川哈)。

要知道当年C++想进内核有多难。Linux老大Linus Torvalds当面指着C++的鼻子大骂呀,那拒绝的话别提多难听。可是Rust想进内核时,Linus并没有大骂,反而是持中立而又有所期许的态度。按他那个暴脾气和权威地位,如果他反对Rust进Linux他一定会明确表达反对意见(同时配合国骂),结局一定是Rust进不了Linux,别人谁说话都不好使;如果他坚决支持Rust进Linux,那结局一定是Rust直接进Linux,别人谁反对都不好使。结果他持中立观点,没有明确的反对和明确的赞成,没有强推强拽,没有使用一言堂特权。

既然Linus Torvalds没有发表主导意见,Rust for Linux项目最终能进内核,其实就是Linux内核开发者们集体讨论、民主决策的成果(那过程也旷日持久)。结果说明Rust在内核开发者中是有群众基础的,最起码支持的声音大于反对的声音。

支持的声音很容易理解,希望Linux更好嘛,摒弃偏见,让内存更安全、让内核CVE更少。反对的声音也容易理解,他们认为内核里容不下第二个语言,那会令项目维护难度加大,不利于Linux成长。因为反对的声音很强烈,势同水火难以调和,这让Rust for Linux项目举步维艰,做成了一锅夹生饭,很难按计划顺利推进,同时让当初引入RFL的初衷失去根基。(同志们勿忘初心啊,全世界内核开发者团结起来。)

这就好比公司老板请来一个空降的高管,让他整顿提升公司生产效率,可是有些部门故意抵制,导致高管的政策无法顺利落实。这时候是需要老板出来一锤定音的,顶一踩一也好,中庸一下也好,总之要主导事件往有利大局的方向前进,不能纵容双方内耗。

再有一比。男主人娶了后妈,后妈带来一个干儿子。表面上干儿子亲儿子小姑子大舅子都是一家人,可私底下处处勾心斗角。男主人的责任是最大的,必要的引导疏通要有,必要的约束规范要有。


具体到本案中,我觉得RFL开发者提交的代码没啥过分的,改了4个文件全是在rust/目录内,总共不到300行代码,而且未动kernel/dma目录内任何代码。就这样还前后改了至少11个版本(v1-v11),迟迟得不到合并,谁能不上火。

我觉得Linux内核DMA模块维护者Christoph Hellwig做的有点太过分了。

他先是说"No rust code in kernel/dma, please.",这句话就莫名其妙,人家提交的代码全在rust/目录内,未动你kernel/dma目录内一根毛。

后来他说"I do not want it anywhere near a huge C code base that I need to maintain."。变脸了,他规定不仅不能动kernel/dma里的代码,rust/里的代码也不能使用他的DMA模块。这就不讲理了。自2022年合并到Linux内核主仓以来,Rust for Linux的代码全都集中在rust/目录,已经跟内核其他代码做了目录隔离。如果"rust/"目录内都不能有与DMA有关的Rust代码,那他显然是主张从内核里完全删除RFL(如果其他模块维护者也都这么干,内核里将没有可供RFL生存的一寸土地)。他这个逻辑很霸道:你北京人不能走我河北地界的路,你走坏了我还得花钱修。(我就问你是不是中国人?)

他说Rust代码会增加他的维护工作量嘛,当回复者承诺愿意自行维护时,他又说,“And I also do not want another maintainer.”。意思就是,我不维护,也不想让你维护。

人家在Rust代码里调用一个C函数,又没有反过来让C依赖Rust,你哪来的额外的维护工作量?人家愿意自己维护,你还不让。

20250214 LIIGO补记

Ar-Curunir: How many times will this need to be said: the Rust maintainers have committed to handling all maintenance of Rust code, and handling all breakage of their code by changes on the C side. The only “burden” the C maintainers have to carry is to CC a couple of extra people on commits when APIs change.

LIIGO曰:你是DMA模块的维护者不假,但DMA模块不是你家的一亩三分地。你也太霸权了,调用你一个C函数都要被你处处刁难。

Rust代码在Linux内核里已经被相对隔离了,除非主动Opt-in,C代码不会依赖Rust代码。都这样了还不行?非要把Rust当眼中钉连根拔掉?别忘了你也只是Linux内核里其中一个模块(DMA)的维护者,更上层的决策恐怕还轮不上你主导。

Linux老板的表态也莫名其妙,他没有批评Christoph Hellwig的霸道,却批评了Rust for Linux在社交媒体上的炒作行为。什么意思,被多次刁难还不允许人家发声了?说是要回归技术,可是Linux老板也并没有在技术方向上表态,没有表态其实也是一种表态,貌似默许对RFL的抵制。真是这样的话,RFL危矣。

其实我能理解Christoph Hellwig他们的担心。他们大概率是担心Rust for Linux发展好了,未来内核里会有越来越多的C代码主动调用Rust代码,C有可能会越来越势弱,甚至有一天会被Rust鸠占鹊巢(可以联想刘备入蜀西川易主啦)。嗨,何必纠结许多年后的事,说不定C和Rust哥俩好的跟一个人似的,说不定C还能反杀Rust,谁知道呢,管他干嘛。

LIIGO曰:咱们讲大局、识大体,只要Linux能发展的更好,谁出力不是出力,谁立功不是立功?勿立山头,枪口不要对准自己人。

20250218 LIIGO 补记:变更上文出现过的所有R4L为RFL(Rust for Linux项目之简称)。但下文引述的评论,因为是发表在别人文章下,我没有编辑权限,故保持原文不予变更。


20250221 LIIGO 补记

哈哈,就在今天,事情完满解决了,Linus Torvalds终于说了公道话。他在邮件组公开回复给Christoph Hellwig的邮件中说:

The fact is, the pull request you objected to DID NOT TOUCH THE DMA LAYER AT ALL. … So let me be very clear: if you as a maintainer feel that you control who or what can use your code, YOU ARE WRONG.

大意就是:RFL提交的代码没有变更DMA模块,而仅是在外部使用它;你(Hellwig)无权拒绝该PR。Linus在同一封邮件中也解释了为何他的最终表态来的如此之晚:

I was hopeful, and I’ve tried to just see if this long thread results in anything constructive, but this seems to be going backwards (or at least not forwards).

总结:个别Linux内核维护者故意刁难抵制Rust for Linux的行为以失败而告终。事情本来很简单,很容易捋清楚,就是Hellwig不讲理、滥用权力嘛(我此前的分析被证明是正确的)。只因Linux老板最终表态来的太迟,导致事件发酵,各种情绪爆发,伤了和气。按说这种小事也不至于需要老板表态吧,应该反思为何Hellwig可以越级管辖。

Rust for Linux项目组的同仁们终于吐出了那口闷气。希望此前因此事愤而离职的Hector Martin也尽快重返工作岗位吧。而Christoph Hellwig会不会因为羞愤也离职呢?不得而知,我个人不希望那样。Linux内核团队仍然需要团结一致的合谐氛围。再次强调,RFL及其成员,都是Linux内核开发者大家庭中的一员。LIIGO在此呼吁停止内讧。


此前我(LIIGO)在本事件相关文章下有过几次评论:

唉,改革难题,推进不力,基层阻碍。开源项目不是你自家的东西,你不想维护自有别人维护。本人反对Linux内部一言堂守旧作风,单模块维护者应多于一人并集体决策。此类事件事实上高层已有决策,推进障碍来自基层模块维护者。

Rust是Linux高层决策引入内核的鲶鱼,并非外行眼中所谓的外部入侵者。Linux想革新想与时俱进,但面临来自基层模块维护者的阻力。增加维护负担是必然的,但是具体增加多少需要量化,需要评估费效比,以便进一步决策是否值得去做。这不应是单个模块的内部决策,而应是Linux整体的统一决策,这是目前所欠缺的。总之希望双方斗而不僵吧,不希望两败俱伤。

此文很好,来龙去脉我看明白了。某些维护者视r4l为外来户并全面抵制,连rust调用dma一个c函数都不允许。Linus不表态实质上等同于默许对r4l的排斥。那r4l前路在哪里,已经没有路了呀。你当初同意引入r4l现在又不指路,的确有违领导风范。也许他有苦衷不想得罪老战友。既然要回归技术,我认为下一步需要量化新增维护量,以便评估是否继续r4l项目。


(全文完)


20251211 LIIGO 补记:日前收到最新消息,RFL项目将转正、Rust正式入驻Linux内核。

corbet: The topic of the Rust experiment was just discussed at the annual Maintainers Summit. The consensus among the assembled developers is that Rust in the kernel is no longer experimental — it is now a core part of the kernel and is here to stay. So the “experimental” tag will be coming off. Congratulations are in order for all of the Rust for Linux team.

网友1668553684精彩评论link

Rust being pulled from the kernel wouldn’t have killed the language, but it would have been brought up every single time someone mentioned using Rust instead of something else forever.

On the flip side, Rust being a success in Linux, Android, Windows, AWS, Google, etc. is making it pretty clear that serious developers approve of Rust for serious projects worth hundreds of billions of dollars. It should start getting easier to convince smaller shops to give it a try going forward.

A great honor to those who pushed the language to this point, and a great milestone for those who will keep pushing tomorrow!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值