您现在的位置是:首页 >技术教程 >这不是你的一亩三分地——简评Rust for Linux项目被内核维护者刁难网站首页技术教程
这不是你的一亩三分地——简评Rust for Linux项目被内核维护者刁难
原创作者:庄晓立(LIIGO)
原创日期:2025年2月10日
原创链接:https://blog.csdn.net/liigo/article/details/145559373
版权所有,转载请注明出处。
有关此事件的来龙去脉,可参考以下文章:
- C、Rust混合用被批为Linux的“癌症”,Rust开发者逼Linus“站队”失败后愤然辞职
- Rust 补丁两年零通过,34年开发者煽动网友逼Linus表态,维护者激烈反击:Rust 就是 Linux 的“癌症”!
许多不明就里的吃瓜群众,错误地把Rust for Linux项目(以下简称R4L)想象成异族入侵Linux,想象它非要舔着脸把Linux的C代码改成Rust,而Linux维护者、原住民则奋起反抗、保卫家园。
其实完全不是这回事。Rust for Linux在Linux v6.1时就被正式合入内核主仓,6.1发布于2022年底,距今两年多了。所以R4L的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项目举步维艰,做成了一锅夹生饭,很难按计划顺利推进,同时让当初引入R4L的初衷失去根基。(同志们勿忘初心啊,全世界内核开发者团结起来。)
这就好比公司老板请来一个空降的高管,让他整顿提升公司生产效率,可是有些部门故意抵制,导致高管的政策无法顺利落实。这时候是需要老板出来一锤定音的,顶一踩一也好,中庸一下也好,总之要主导事件往有利大局的方向前进,不能纵容双方内耗。
再有一比。男主人娶了后妈,后妈带来一个干儿子。表面上干儿子亲儿子小姑子大舅子都是一家人,可私底下处处勾心斗角。男主人的责任是最大的,必要的引导疏通要有,必要的约束规范要有。
具体到本案中,我觉得R4L开发者提交的代码没啥过分的,改了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代码,那他显然是主张从内核里完全删除R4L(如果其他模块维护者也都这么干,内核里将没有可供R4L生存的一寸土地)。他这个逻辑很霸道:你北京人不能走我河北地界的路,你走坏了我还得花钱修。(我就问你是不是中国人?)
他说Rust代码会增加他的维护工作量嘛,当回复者承诺愿意自行维护时,他又说,“And I also do not want another maintainer.”。意思就是,我不维护,也不想让你维护。
人家在Rust代码里调用一个C函数,又没有反过来让C依赖Rust,你哪来的额外的维护工作量?人家愿意自己维护,你还不让。
LIIGO曰:你是DMA模块的维护者不假,但DMA模块不是你家的一亩三分地。你也太霸权了,调用你一个C函数都要被你处处刁难。
Rust代码在Linux内核里已经被相对隔离了,除非主动Opt-in,C代码不会依赖Rust代码。都这样了还不行?非要把Rust当眼中钉连根拔掉?别忘了你也只是Linux内核里其中一个模块(DMA)的维护者,更上层的决策恐怕还轮不上你主导。
Linux老板的表态也莫名其妙,他没有批评Christoph Hellwig的霸道,却批评了Rust for Linux在社交媒体上的炒作行为。什么意思,被多次刁难还不允许人家发声了?说是要回归技术,可是Linux老板也并没有在技术方向上表态,没有表态其实也是一种表态,貌似默许对R4L的抵制。真是这样的话,R4L危矣。
其实我能理解Christoph Hellwig他们的担心。他们大概率是担心Rust for Linux发展好了,未来内核里会有越来越多的C代码主动调用Rust代码,C有可能会越来越势弱,甚至有一天会被Rust鸠占鹊巢(可以联想刘备入蜀西川易主啦)。嗨,何必纠结许多年后的事,说不定C和Rust哥俩好的跟一个人似的,说不定C还能反杀Rust,谁知道呢,管他干嘛。
LIIGO曰:咱们讲大局、识大体,只要Linux能发展的更好,谁出力不是出力,谁立功不是立功?勿立山头,枪口不要对准自己人。
此前我(LIIGO)在本事件相关文章下有过几次评论:
唉,改革难题,推进不力,基层阻碍。开源项目不是你自家的东西,你不想维护自有别人维护。本人反对Linux内部一言堂守旧作风,单模块维护者应多于一人并集体决策。此类事件事实上高层已有决策,推进障碍来自基层模块维护者。
Rust是Linux高层决策引入内核的鲶鱼,并非外行眼中所谓的外部入侵者。Linux想革新想与时俱进,但面临来自基层模块维护者的阻力。增加维护负担是必然的,但是具体增加多少需要量化,需要评估费效比,以便进一步决策是否值得去做。这不应是单个模块的内部决策,而应是Linux整体的统一决策,这是目前所欠缺的。总之希望双方斗而不僵吧,不希望两败俱伤。
此文很好,来龙去脉我看明白了。某些维护者视r4l为外来户并全面抵制,连rust调用dma一个c函数都不允许。Linus不表态实质上等同于默许对r4l的排斥。那r4l前路在哪里,已经没有路了呀。你当初同意引入r4l现在又不指路,的确有违领导风范。也许他有苦衷不想得罪老战友。既然要回归技术,我认为下一步需要量化新增维护量,以便评估是否继续r4l项目。