V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
VchentozV
V2EX  ›  Linux

为什么不直接用 rust 开发新的内核? 修修补补什么的, 最讨厌了.

  •  
  •   VchentozV · 3 天前 · 8359 次点击
    Linux 内核爆发 C / Rust 大战,核心开发者愤然离职 - IT 之家
    https://www.ithome.com/0/830/010.htm
    95 条回复    2025-02-13 21:05:20 +08:00
    hxndg
        1
    hxndg  
       3 天前   ❤️ 9
    我建议 RUST 开发者直接开发新的内核再争论吧,毕竟使用 RUST 开发出安全的内核,需要安全的语言+安全的开发,缺一不可。不是说语言安全就够了。
    rrfeng
        2
    rrfeng  
       3 天前   ❤️ 5
    ?张口就来
    VchentozV
        3
    VchentozV  
    OP
       3 天前
    @hxndg 我最近看到的一个 comment 是, rust 底层调用的 c 库是不安全的, 所以导致... rust 啥时候成熟啊?
    VchentozV
        4
    VchentozV  
    OP
       3 天前
    @rrfeng https://t.me/CE_Observe

    订阅一下, 看看下面的评论
    VchentozV
        5
    VchentozV  
    OP
       3 天前
    @rrfeng 我现在的心态是, 看事大不嫌热闹. 哇咔咔.
    VchentozV
        6
    VchentozV  
    OP
       3 天前
    @hxndg 也许随着 linux 内核一起成熟吧
    liaohongxing
        7
    liaohongxing  
       3 天前   ❤️ 1
    前几天 v2 相关讨论 https://v2ex.com/t/1109794
    PTLin
        8
    PTLin  
       3 天前   ❤️ 4
    https://www.zhihu.com/question/11940762516/answer/99152469629
    你可以看看这个回答,这次事件根本不用绕到 c 和 rust ,单纯就是因为人的原因和技术政治原因。
    本质上就是假如 Linux 要引入一门新的语言诞生的问题,因为 c 实在太老了,真正会的人只会越来越少,所以 rust 被合并进去了,可以当成是一种现代化尝试。并且你把 rust 换成任何一个语言照样会爆发类似这次的争吵。
    janus77
        9
    janus77  
       3 天前
    这种就是典型的你行你上问题。。。不想多说
    VchentozV
        10
    VchentozV  
    OP
       3 天前
    @PTLin c/c++ 这么简单的东西...越来越少...


    妈的, 我昨天看到一个笑话, 微软研究者说使用 AI 会降低人的批判能力. 这他妈的不是又当又立吗?

    反正我倾向于人类走向 wall-e 语言的世界.

    我昨天还被我妈怼, 写字的能力弱化了, 写通知的能力弱化了, 语文表达能力弱化了, 在她眼里我就是个渣渣...

    世界真的进步了吗? 我狂笑三声
    PTLin
        11
    PTLin  
       3 天前   ❤️ 7
    大概意思就是,我是个前端,要加个页面,需要使用后端的一个接口。
    然后通知了后端一声,说我要用这个东西了。
    然后后端来了一句,我不允许你来更改我的代码,我也不想我改这个接口的时候还要通知你。
    Yadomin
        12
    Yadomin  
       3 天前
    那确实是有的啊,没人用而已
    https://github.com/redox-os/kernel
    JoshuaEstell
        13
    JoshuaEstell  
       3 天前
    单片机还在用着汇编和 C ,怎么都不可能淘汰,甚至有些还是用的 C89
    PTLin
        14
    PTLin  
       3 天前   ❤️ 2
    @VchentozV 那只是你是这么觉得,事实上之所以进入内核的是 rust 而不是 cpp 就是因为 cpp 实在太复杂了,而且很多特性没法禁用,会给 review 造成问题。并且会 cpp 的群体和 c 很重合,主力军都不小了,需要一点更新的东西和更年轻的人来参与到 Linux 中。
    capric
        15
    capric  
       3 天前
    @VchentozV c 还算简单,c++简直太复杂了好不好
    darkengine
        16
    darkengine  
       3 天前
    建议分裂出一个 Rinux 内核 /doge
    zhywang
        17
    zhywang  
       3 天前   ❤️ 1
    @Yadomin 搞新内核太难,就算 google 前几年搞的 fuchsia/zircon 都已经凉了
    VchentozV
        18
    VchentozV  
    OP
       3 天前
    @capric 其实主要 c++ 编译器做了很多"看不见"的事情, 你可以看看 c++ 对象模型.
    至于多态继承什么的, 其实我觉得很多时候, 可以看看 CRTP/静态多态 + SOLID 原则在 C++ 上的应用, 或者说用 Java 的写法写 c++.
    我后来也喜欢 c 比较简单, 虽然干活累一点. 我有一段时间 c++真的为了偷懒都喜欢写一些可复用的模板, 以至于 visual studio 的 intellisense 直接没响应了. 特别是我用了一些 c14 之后的特性, 比如我把 function 的参数都做成模版类型推导. i9 的机器直接卡爆. 感觉 屌软 在全员使用 C# 之后, c++ 就被抛弃了... 所以各种 c++ draft 的开发都比较慢, 但还是比 gcc 快....
    lloovve
        19
    lloovve  
       3 天前 via iPhone   ❤️ 2
    Rust 连单片机领悟都没混出像样点的东西,全面进 linux 别妄想了,后面可能会吧合并进去的几个 rust 东西直接移除,因为这样已经被污染内核了,造成跨平台移植困难
    VchentozV
        20
    VchentozV  
    OP
       3 天前
    @capric 中小型公司的老板还是喜欢短平快, 你要 get 老板的 G 点. 复杂的东西, 还是自娱自乐, 没成熟之前不要用在工作上.
    PTLin
        21
    PTLin  
       3 天前   ❤️ 1
    说实话,想要了解这次的冲突,起码要大概会点内核,明白大概的子系统,要很熟悉 rust ,并且看过 rust for linux 是怎么做抽象的和现在的项目进程才能说出点正常的评论。
    不然就会犯以为现在 rust 重写了 Linux ,或者核心部分由 rust 编写了的错误。
    实际上现在 rust 也就能写写驱动,做对 c 语言 api 的抽象,并且只抽象出来了非常小的一部分内核功能,这次的焦点 dma 的抽象都没有,离什么 rust 重写内核还差了十几年,而且 Linux 现在本身根本没有哪个部分是 rust 开发的。
    CodeAllen
        22
    CodeAllen  
       3 天前   ❤️ 2
    C++11 、14 、17 、20 、23 、26
    C89 、C95 、C99 、C11 、C17 、C23
    标准都有这么多,还简单?而且 C 标准和 C++标准是独立的
    XIVN1987
        23
    XIVN1987  
       3 天前
    支持。。

    Linux 有太多 C 代码了,,就算用 Rust 写部分模块,,可 Rust 模块和 C API 之间的接口没法保证内存安全,,建议干脆完全用 Rust 写一个全新的 OS ,,彻底保证内存安全。。
    VchentozV
        24
    VchentozV  
    OP
       3 天前
    @capric 你也可以看看 ATL 早期的库. 我其实觉得 ATL / WTL 这些算是 c++ 用得比较成熟的东西了. 包括 Don Box 发明的 COM 和面向接口编程, 真的是 c++ 集大成的天才设计. 我觉得微软最牛逼的贡献之一, 就是解决了大规模并行开发的范式.
    VchentozV
        25
    VchentozV  
    OP
       3 天前
    @CodeAllen 复杂的是 C++ 支持的范式太多, 然后各种范式像 spaghetti 那样搅和在一起, 这个人是这个人的写法, 男个人是那个人的写法, 说白了, 我看你不顺眼.
    VchentozV
        26
    VchentozV  
    OP
       3 天前
    @PTLin Orz
    c0t
        27
    c0t  
       2 天前 via iPhone
    别太理想化,rust 年初在 project goal 里把 rust for linux 定为代表项目,现在 project goal 里列出来的问题又解决了多少呢…大社区驱动的项目完全取决于贡献者的热情,比如 @compiler_errors 之于 async ,我几乎读过所有 active 的 RFC ,rust 的变化相对还是很慢的,任重而道远咯
    pagxir
        28
    pagxir  
       2 天前 via Android   ❤️ 3
    AI 那么强,都说要替代程序员了。为什么不让 AI 把 Linux 内核重新用 rust 重写一遍
    sir283
        29
    sir283  
       2 天前 via Android
    linus 为了稳定跟统一性,肯定不会让 rust 进入上游啊。

    这就好比一个公司业务用 Java 的 ssm 框架跑的好好的,稳定十来年了,结果你一来,说什么这个框架太老了,不行,要换成最新的 golang 来跑。这是一样的道理。
    MrKrabs
        30
    MrKrabs  
       2 天前 via iPhone   ❤️ 1
    firefox 整明白了吗?
    cnbatch
        31
    cnbatch  
       2 天前
    Rust 写的新内核,是指 Redox?
    还是指 API 兼容原 Linux 的 Rust 版 Linux 内核?
    thevita
        32
    thevita  
       2 天前
    rust 的 内核当然是有的

    https://github.com/asterinas/asterinas

    Asterinas is a secure, fast, and general-purpose OS kernel, written in Rust and providing Linux-compatible ABI.
    cndns
        33
    cndns  
       2 天前 via Android
    hxndg
        34
    hxndg  
       2 天前   ❤️ 2
    @rrfeng 有啥张口就来的,接触的几个 Rust 神教都说 Rust 安全,但是光语言安全并不能证明开发出来软件安全,某企业的网关用 RUST 开发的,效率很好,但是有缓慢的内存泄露。我本身也是写过这玩意的代码的,但是涉及到写高性能的一些代码的时候我还是得切回 C/C++
    前段时间我还本地改过 wirefilter 换底层正则库用 hyperscan ,但是 hyperscan 还是得底层 C 库支持,我建议先把重量级底层库替换再继续

    @VchentozV 成熟是个定义,也许 Ruster 已经认为 Rust 成熟了。
    @PTLin 技术政治原因没什么问题,不过 C 太老不觉得是被取代的理由,

    多扯一句,rust 大规模进入内核是必然的吗?还是那句话,这个事情能带来什么肉眼可见的收益再说吧。
    catazshadow
        35
    catazshadow  
       2 天前
    rust 还是先解决自己连全局变量都不好使的毛病再来说 system programming 吧
    PTLin
        36
    PTLin  
       2 天前
    @hxndg 不是取代,是一直都有加入第二门稍微现代一点的语言到内核里建议,c++ for linux 的设想都十多年了,并且都有人写出 patchset 了,最后没被接受,最后不了了之了。
    rust 所谓的内存安全其实不包含内存泄漏,而且现在的”内存泄漏“很大可能是是 glibc 分配器的问题,很多 rust 用 tokio 的程序换成 mimalloc 会好很多。并且所谓的安全其实反倒不是太重要,开发体验的提升才重要,毕竟 c 这个老古董,懂得都懂了,内核里现在都开始引入类似 go 里面 defer 的机制了。
    并且这次吵起来中的人里就有维护 macbook 的那个 linux 发行版的人,因为那个内核里图形驱动就是 rust 写的,这个项目虽然不完善,现代的开发体验本身就是收益。
    最后 rust 现在只是 kernel api 的抽象,最多只能用来写内核模块,短期内都不会出现 rust 写核心部件的情况。
    w568w
        37
    w568w  
       2 天前   ❤️ 6
    从这帖子下的暴论就能看出有的人真的是张口就来。

    @hxndg

    > 接触的几个 Rust 神教都说 Rust 安全……但是有缓慢的内存泄露

    经典「对于别人论点中不懂的名词望文生义,然后打虚空靶」,你知道 memory safety 是什么意思吗?你知道内存泄漏是 safe 的吗?维基的定义给你,这可不是你口中的「 Rust 信徒」信口开河瞎编的词语哦: https://en.wikipedia.org/wiki/Memory_safety

    > 我本身也是写过这玩意的代码,但是涉及到写高性能的一些代码的时候我还是得切回 C/C++

    所以为什么要切回呢?为了「高性能」?但你明明说 Rust 的缺点是「可能内存泄漏」啊?看不懂你的前后逻辑。

    > hyperscan 还是得底层 C 库支持,我建议先把重量级底层库替换再继续

    孤例代表整体的谬论。rustls 替换 OpenSSL 、uutitls 替换 coreutils 算「重量级」吗?另外 Rust 本身标准库的正则性能就不低,我好奇为什么需要上 hyperscan ?

    不信?数字说话,rust std 里的 regex 性能就是能和 hyperscan 打平手: https://github.com/rust-leipzig/regex-performance

    > rust 大规模进入内核是必然的吗?还是那句话,这个事情能带来什么肉眼可见的收益再说吧。

    但现在连个「用 C 子系统的 Rust 接口定义」都不让进主线了,哪来的直接收益可以看呢?经典又要马跑又不准马吃草。

    说到收益,Asahi Linux 用 Rust 编写的 Apple 设备驱动没有出现过重大内存安全问题算不算?

    @catazshadow

    > rust 还是先解决自己连全局变量都不好使的毛病

    什么乱七八糟的,要么你已经五年以上没有用过 Rust 了,要么你根本没搞懂 Rust 中的全局变量怎么写。我用 Rust 从来没有遇到过全局变量不好使的问题。
    james122333
        38
    james122333  
       2 天前 via Android
    太难了 一堆人在吹用 rust 的好处 但在我眼里它有许多致命的坏处 撰写成本过高 工作上不能快速更动并翘二朗腿的语言不是很适合搬砖 太占硬盘还有编译慢都很致命 私下用如果排除以上因素还外加一个语法糖很魔幻 语法糖并没有什么哲学大架构的意义 考虑的小细节也是太多
    w568w
        39
    w568w  
       2 天前   ❤️ 8
    @w568w

    再补充一句,要是说「编译速度慢」「依赖 LLVM Backend 」「工具链复杂化」「与 C 开发者协调困难,拖慢开发进度」「严格类型系统鼓励过早抽象,造成重构优化困难」,我都算 Ta 骂到点子上了。

    但有的人偏偏既不懂 Rust ,又不懂 Linux ,没看过 RIL 的仓库,还根本不知道这次事件的来龙去脉是什么、双方分别是谁,看几个 AI 翻译的生成文章就开始张口就来,属实贻笑大方了。
    kitrap
        40
    kitrap  
       2 天前 via Android
    c 的内核安全成熟,为啥里要搞一坨 rust 出来?一直都没有个充分的理由。想推 rust 的是手里有锤子看什么都是钉子?
    hxndg
        41
    hxndg  
       2 天前   ❤️ 2
    @w568w
    说明你根本没看懂我在说啥,你的反驳很符合《学会提问》里面的一些观点,看起来非常专业,但是你攻击的点不对。
    我的观点“使用 RUST 开发出安全的内核,需要安全的语言+安全的开发”,我并不觉得语言安全就一定要大规模推广,恰恰相反,重点还得“安全的开发”。所以我并不是要说 rust 导致内存泄露,重点是安全的开发

    解释一下为什么要切回 C/C++,因为需要对 Suricata 做二次开发,涉及到引入新协议和多模态匹配的开发。Suricata 的多模态匹配部分是 C ,协议解析器是 Rust 的

    至于你说的 rust std 的 regex 性能和 hyperscan 打平手。。。我后续会看一下这个 bench 的内容,起码我一年前写的时候我测试的同时匹配 20000 条正则规则时,hyperscan 的多模态匹配效率高很多(和条件相关)

    孤例代表整体的谬论,这个的反驳我认可,但是我所谓的替换是指当我要编写代码的时候第一反应是安装 Rust 版本的基础哭而不是旧版本

    最后一点“经典又要马跑又不准马吃草。”,这有什么好奇怪的呢?什么事情不是得先做出来比当前优秀的成果才能推广的?真以为这世界非常友善?
    hxndg
        42
    hxndg  
       2 天前
    @PTLin
    嗯,我理解是引入现代的语言,C++这个我觉得没可能,毕竟现在 C++自己都在革自己的命。。。
    你们的假设我在攻击 Rust 还有内存泄露,有没有可能我是想说即使用所谓安全的语言,不经过安全的开发,也会开发出来不安全的软件。
    w568w
        43
    w568w  
       2 天前
    @hxndg #41

    > 重点是安全的开发

    所以你想表明什么,Rust 提供了一定安全,但因为没有把所有其他 Bug (包括内存泄漏,以及 C 语言的 Bug )从根本上全部解决,所以引入的意义很小?

    我明确一下我的观点:「目前,Rust 加入 Linux 是为了预防未来的新模块中引入新的内存安全问题」,至于已有的 bug ,当然要靠 C 开发者来修咯。

    > 解释一下为什么要切回 C/C++,因为需要对 Suricata 做二次开发
    > 我所谓的替换是指当我要编写代码的时候第一反应是安装 Rust 版本的基础哭而不是旧版本

    这都是你自己的情况,我没法读心提前知道。Again ,直接说「 Rust 不适合我的场景」不就好了,没看懂这和你前面的举例有什么关系。
    catazshadow
        44
    catazshadow  
       2 天前
    @w568w 来来来,Arc<Mutex<[T, SIZE]>>的全局变量要怎么用零初始化? C 的全局变量只要一行,rust 要几行?
    hxndg
        45
    hxndg  
       2 天前
    @w568w

    我觉得你需要审视一下你对我观点的假设,我前面的观点都是“重点是安全的开发,而不是语言,人很重要“,所以建议直接 choose the hard way ,走自己的路。 而不是“Rust 没能解决所有问题,所以引入的意义很小”,涅槃谬误也太荒谬了。

    至于你的观点,你说的“预防未来的新模块中引入新的内存安全问题“,所谓新的内存安全问题指什么,我很好奇,

    你说“ Rust 不适合我的场景」”,当然可以这么说,我想表达的是,只有 Rust 成为最优选择的时候,Rust 语言才会有话语权,当然,这依然是纯观点,哈哈
    leconio
        46
    leconio  
       2 天前 via iPhone
    Rust 大势所趋,但内核不是一个人开发的,贸然切换会丢失现有人力,举步维艰
    hxndg
        47
    hxndg  
       2 天前   ❤️ 1
    @w568w 多说一句,如果我回复的内容不清楚导致你理解错误我的观点,那我先道个歉,毕竟词不达意是一个巨大的缺点
    w568w
        48
    w568w  
       2 天前
    @catazshadow #44

    首先,全局变量不能使用 Arc 初始化,因为它依赖原子计数器,而原子操作是平台定义的而且需要分配内存,请你回去重新学习一下。

    强调一下,这不是语言的问题,相同的语义在 C 中也不可能实现,因为这就不是编译期静态初始化能完成的事。具体请读: https://users.rust-lang.org/t/what-prevents-arc-from-having-a-const-constructor/49532

    另外,如果你试图编译 static ... = Arc::new ,编译器输出的报错会直接告诉你使用 LazyLock 即可,这也是一个解决方案。

    然后,[T, SIZE] 这个语法我没查到,我猜你想说 [T; SIZE]?实现在这里:

    static GLOBAL: Mutex<[i32; 1024]> = Mutex::new([0; 1024]);

    还有别的问题吗?
    catazshadow
        49
    catazshadow  
       2 天前   ❤️ 1
    @w568w

    rust 不能就不是语言的问题了。怪不得要被 linux 踢出来呢,果味十足,教人编程啊

    来来来,还没完,T 是个 struct 的时候,你要几行啊?是不是还要来个 copy trait 啊?这要几行啊?
    catazshadow
        50
    catazshadow  
       2 天前
    @w568w 对了,原子变量不能静态分配是吧?那我这 DEFINE_SPINLOCK() 是干啥的?你写过几行内核啊?
    JensenQian
        51
    JensenQian  
       2 天前 via Android
    这边建议 linux 内核和三星的手机一样
    一个猎户座版本,一个高通版本
    fgwmlhdkkkw
        52
    fgwmlhdkkkw  
       2 天前 via Android
    我支持 C ,效率和灵活性加起来要比单纯的安全更重要一点。因为写 C 的程序员的初衷也不会是不安全。
    fgwmlhdkkkw
        53
    fgwmlhdkkkw  
       2 天前 via Android
    相较于裸指针来说,Rc 都是消耗,更何况 Arc 。全世界这么多 linux 设备,为了计算 Rc 和 Arc 要多消耗多少能源呀。🤪
    w568w
        54
    w568w  
       2 天前   ❤️ 5
    @catazshadow #50

    刚打了一大段字被 V2EX 吞了,比较坏心情。我说重点吧。

    > 怪不得要被 linux 踢出来呢,果味十足,教人编程啊

    鄙人不才,翻过两页 Rust 教程,教人写全局变量不成问题。至于第一句,我认为你完全在撒泼、无理取闹了。不知道你在对谁说话,我又不是 RIL team member 。

    > T 是个 struct 的时候,你要几行啊

    当然是一行。

    > 是不是还要来个 copy trait 啊?这要几行啊?

    咄咄逼人的语气,不明白你想说什么。首先,如果要做公平的比较,显然 C 的所有 struct 都是(在 Rust 语义上) Copy 的吧。如果禁止 Rust struct 实现 Copy ,那在 C 中根本找不到对应的语法特性了,比较没有意义。

    但尽管如此,丢代码,这段代码还实现了动态确定每个元素赋值的需求(而不像 C 只能赋常数): https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c180d3fc345e865024298088c079ad3e

    > 原子变量不能静态分配是吧?那我这 DEFINE_SPINLOCK() 是干啥的?

    ……什么乱七八糟的。旋转锁对应的是 Mutex ,我说的是「 Arc 不能静态分配」。

    > 你写过几行内核啊?

    移植重写过 NPU 驱动: https://github.com/w568w/alarm_repo/blob/main/linux-orangepi-3b-dev/0003-rknpu-add-rknpu-driver.patch

    为 SBC 移植 u-boot: https://github.com/w568w/u-boot-orangepi-3b
    w568w
        55
    w568w  
       2 天前   ❤️ 1
    @w568w #53 fix:上面那段代码的正确链接应该是 https://play.rust-lang.org/?version=beta&mode=debug&edition=2021&gist=978f5add73e7fa241821b926ec0f8efc ,都躺在剪贴板里,发错了。
    w568w
        56
    w568w  
       2 天前   ❤️ 1
    @catazshadow

    所以为什么这么咄咄逼人呢,为什么我提代码你就要开始扣帽子 + 需求加码呢?

    我很好奇「不能在一行内声明一个没有实现 Copy trait 的 struct 成员的静态预初始化数组」,就是你所说的「 Rust 连全局变量都不好使」?这样的需求你在 C 中甚至不可能碰到(因为 C 里所有 struct 都是 "Copy" 的)。
    msg7086
        57
    msg7086  
       2 天前
    @pagxir #28 你别说你还真别说,确实不远了。
    很多项目的开发成本来源于人工,用 AI 以后对人工需求下降,很多不可能经济地实现的事情现在已经变成可能了。
    前几天刚给一个开源项目发了 2 个 PR ,半 AI 半人工的优化,找到热点以后让 AI 做针对性优化,性能大幅提升。
    这种本来可能要花几个小时甚至几天才能做好的事情,现在一个晚上就能写完了。
    我只要花时间开 profiling 找到哪个函数最慢,然后告诉 AI 我要优化这段代码,AI 基本就能把事情干完了。
    cooltechbs
        58
    cooltechbs  
       2 天前
    有啊。Redox 了解一下。可惜曲高和寡。
    mayli
        59
    mayli  
       2 天前
    主要是开发和使用都费劲,rust 现在高层还可以,但是底层(内核)部分还是少
    而且一堆驱动和文件系统都费劲,这玩意需要堆人力,或者把内核模块化,然后 ffi 调用现有接口。
    然后是性能,你这要是比人力优化的还慢,那就只能是玩具了。
    lsww
        60
    lsww  
       2 天前
    开发相对好说,稳定需要时间检验。
    my3157
        61
    my3157  
       2 天前 via Android   ❤️ 2
    我个人对开源项目的看法是,任何付诸行动而不是停留在口头上的行为都值得称赞(比如 RIIR),另外不就是因为拥抱变化才有了如今的百花齐放的开源项目么?

    回归到问题本身,内核要不要引入第二种语言,我觉得只要有人愿意做,能控制质量和范围,逐步推进,多几种语言都没事,反而能吸引更多的贡献者

    至于 Rust 和 C 或者别的语言之争,实在是没啥意思,不是踩低别人就能抬高自己,反之亦然,纯属个人或小部分人的口舌之快,不知道为啥有人这么执着,就像有的人对 if err != nil 深恶痛绝,有的人对 python/perl 里面的各种奇技淫巧爱不释手
    Mark24
        62
    Mark24  
       2 天前 via Android
    zig 也想进入内核,汇编觉得用 c,rust 都不够好,go 觉得我也可以试试,Crystal 如果 go 可以我也行。怎么办?
    glcolof
        63
    glcolof  
       2 天前   ❤️ 1
    @PTLin 内核增加一种新语言,并不会扩大维护者数量,只会降低维护者数量——理论上看起来可以取并集,现实中大部分时候只能取交集。
    而且这个新语言还是使用人数更少、入门难度更大的 Rust ,这让“因为 c 实在太老了,真正会的人只会越来越少”这句话变得非常讽刺。
    如 OP 说的,建议 Rust 发展自己的操作系统,或者开个 Linux 的新分支。
    PTLin
        64
    PTLin  
       2 天前
    @hxndg 你说的对呀,本来就是所谓内存安全的语言也未必开发出整体逻辑安全的软件呀,这个不是共识吗,rust 又不是你用了就没 bug 了,只是通过语法消除一点内存方面的问题。
    yangyaofei
        65
    yangyaofei  
       2 天前   ❤️ 2
    看高贵的 rust 信徒和其他人(包括正常 rust 使用者)辩经挺好玩的, 就是看多了有点无聊, 没有新的创意.

    想起某个可爱的前同事,和他聊到空指针, 他表示应该弄出一门语言从定义到使用都直接去掉空这个概念, 这样就能避免这个问题了.
    hd7771
        66
    hd7771  
       2 天前
    编程语言 O 神建议另起炉灶呢
    w568w
        67
    w568w  
       2 天前   ❤️ 5
    @yangyaofei #65

    其他人(高贵的 Rust 信徒)我不清楚,既然这楼里只有我发表过相关论述,我就假定你在说我,故对号入座了。如果不是,还请见谅。

    > 和其他人(包括正常 rust 使用者)辩经

    我对正常 Rust 使用者的定义是,起码会写出能通过编译的代码,看到报错有基本的检索信息能力。楼上属于根本没怎么正经用过 Rust ,张口就来 Arc<Mutex<>> 静态变量。这是初学者常犯的错误(编译不通?加个 Arc<Mutex<>> 试试),但拿着一个入门常犯的错误来说一门语言不好,解释完正确写法还反将一军扣帽子是否沾点……?

    我举个你可能熟悉的例子,这就好比一新人拿着 (1, 2).append(3) 得出「 Python 设计是一坨屎,**才用」,你和他解释 Tuple 和 List 的可变性区别,他直接开始问候你好为人师、高高在上。

    至于什么 Rust 信徒,你可以翻我的发言记录咯,为什么我指出其他语言里的理解问题都没人说话,一指出 Rust 问题,立刻就被扣上信徒帽子?这是技术社区该有的氛围?怎么跟小孩过家家似的。

    > 可爱的前同事,和他聊到空指针, 他表示应该弄出一门语言从定义到使用都直接去掉空这个概念, 这样就能避免这个问题了.

    事实上,几乎所有新语言,包括 Go 、Zig 、Kotlin 、Dart 、TypeScript 、Julia 、Nim 、V ,全都要么严格限制了 null 的使用(可空类型),要么直接去掉了 null 。Rust 根本不是什么首创,也肯定不会是最后一个。连 null 的发明者自己很多年前都说 it's a mistake ,怎么还有人觉得去掉这个概念是天真的?眼光是否太狭隘了?

    @hd7771

    > 编程语言 O 神建议另起炉灶呢

    经典闭眼输出立场不看事实。

    ====

    不过有一点是说对了,不管是哪个编程语言的社区,都有一群装睡叫不醒的人。你和他谈技术,他和你摆立场和屁股。社区政治才是核心啊。
    maix27
        68
    maix27  
       2 天前
    @PTLin #11 实际上后端说的是“你前端不要这样,你要用这个东西就用,别往后端代码里丢,你写前端页面啥的没问题“
    后端说“我不是讨厌 Rust ,Rust 很好”( AT 立场属于是)但你不应该直接放内核里,这样对于维护项目有很大压力,我们这个大项目能活这么久就是 ld 把关做的好,没有 代码边界,如果你喜欢 Rust ,可以在新项目里用,我不希望你把这个项目搞砸。“


    前端被拒绝了很难过,然后发社交媒体写小作文,给 ld 和整个团队上压力。
    “我们偷偷干,发 patch 进内核树,给 ld 发提案让他评价,如果 ld 不发表意见,后端的意见不重要 继续往内核里插,如果 ld 和后端都不同意,那么我们前端项目基本就死了。 直到 Linus 或 Christoph 采取行动。其他一切都在拐弯抹角。”。(好家伙以偏概全是吧,不同意一个提案直接全项目死加离职小作文,给谁摆脸呢)

    我不知道你们家前端咋想,但攻击性这么强的前端对团队协作应该没好处吧?
    maix27
        69
    maix27  
       2 天前
    我觉得不管咋样,至少开发者的脾气得改改,太冲了,动不动就小作文+项目死+离职,也幸好国外没有 HR 联盟,不然不轻松拿捏你?
    VchentozV
        70
    VchentozV  
    OP
       2 天前
    @yangyaofei 我其实也考虑过这个点。就是怎么能够不空。

    这个看 M$ 推吧,感觉毛子 CTO 还是挺靠谱的,比中国人说得上话。毕竟搞编译器生态这种东西,背后都是大金主。
    zzz22333
        71
    zzz22333  
       2 天前   ❤️ 1
    @PTLin #8 "因为 c 实在太老了,真正会的人只会越来越少" 只是你没接触到用 C 的工程师而已,所以给你的感觉是没人用 C 语言。 实际上不管是手机厂,云厂商,汽车行业,机器人行业,物联网行业,用 C 的都很多。
    VchentozV
        72
    VchentozV  
    OP
       2 天前
    @maix27 说不定每一门语言兴起的时候都是这种样子, 没经历过上古时代, 无法妄加评论。想想国外的程序员兴起了多少年,国内兴起了多少年。再看看 35 岁危机。扯远了。
    zzz22333
        73
    zzz22333  
       2 天前
    作为只会 C 语言的开发者,不希望 Rust 进 Linux ,Linux 本身的东西都够吃一壶,还引入新的语言,搞死人。
    maix27
        74
    maix27  
       2 天前   ❤️ 1
    @VchentozV #10 压根就不是技术 原因 Rust 狂信徒要不得,你 C 都学不会咋学会的 Rust ?还硬往技术上靠。你就 C 都学不会用不熟,还指望你学个新东西然后往公司核心代码库里拉屎?

    那拒绝的“后端老哥”也说了,不是政治原因,而是因为项目规模太大了,你别急着往核心项目里插其他语言的代码,Linux 能活到现在,发展的这么良性,就是 Linus 独裁者做的好,没有跟国内这些短命项目一样,出点啥新语言就插核心业务里。
    人家也说了 Rust 没问题,Rust 很好,你要是想用就做新项目用,别插内核里把项目搞黄。

    现在 Rust 到底能不能成器是不知道。项目搞黄倒是真的,先说 Rust 项目死了,然后写小作文发社交媒体,威胁 Linus 和那后端。 话说你们 Rustocean 都这么魔怔的吗,这 Rust 人也不是纯粹的开源开发者吧?而是一个大公司的员工,反正他内部能转岗,说白了靠这项目搞 KPI 罢了,哪像那后端老哥和 Linus 这样真的是维护了半辈子。
    maix27
        75
    maix27  
       2 天前
    @VchentozV #72 不是技术冲突,而是你动不动就写小作文,然后绑架员工 威胁老板 我想应该这种人你们不想招吧?
    maix27
        76
    maix27  
       2 天前
    @VchentozV #72 &#32769;&#21733; sorry &#65292;&#22238;&#38169;&#20102;&#65292;&#25105;&#22238; PTLin &#30340;
    maix27
        77
    maix27  
       2 天前
    @VchentozV 回错了,我回 PTLin 的 尴尬了
    victorc
        78
    victorc  
       2 天前   ❤️ 1
    你用 rust 多写点代码就知道,这是 tm 一托 shit 一样的玩意,也配进内核,那会搞疯所有人
    mizuki9
        79
    mizuki9  
       2 天前
    @yangyaofei 空永远不能被消除,如果某个新语言声称去掉了空,不过只是发明了另一个“空”,甚至说不定更复杂难懂
    hellomsg
        80
    hellomsg  
       2 天前
    “都推进到 95%了,为什么 curl 还是放弃基于 Rust 开发了四年的 HTTP 后端替代”
    fox0001
        81
    fox0001  
       2 天前 via Android
    GNU Hurd ,已经说明问题了吧
    yangyaofei
        82
    yangyaofei  
       2 天前   ❤️ 1
    @VchentozV #70 就我浅显的知道的语言, 对空的去除基本上就是强制在进行操作之前进行判断和处理, 这挺好的, 但是离没有空还远得很, 毕竟空本身就是存在的.

    同样的, rust 里面所谓的内存安全不泄露也是一种强制的行为或者说语法, 别的语言也可以做, 这没什么, 挺好的, 当时看的时候觉得很赞, 但是呢, 不是还有 unsafe, 不是还要调用 c 库, 不是还有内存泄露, 然后狂热的改造和逼迫改造来达到完美的无内存泄露, 一点点翻白能翻白的地方, 直到整个都是 rust 这样, 但是万一他就是有一些地方翻白不了呢.

    理想乡是挺好的, 为了某个伟大的主义去实践. 但是总把(实践的)问题放在别人不懂没有真正实践那个伟大的主义才导致的问题这个点上, 只能让人觉得这个主义的普适性和完备性以及内部的逻辑自洽有待商榷.

    (不是指 OP 你, 虽然那些人会自己找上来的, 即使不想和他们交流)
    yangyaofei
        83
    yangyaofei  
       2 天前
    @mizuki9 #79 对, 因为空本身就是一个存在的东西, 用佛教的说法, 空这个东西本身就是非空的. 但是那种特性还挺好的, 相当于自动或被动的写 if 判断
    Nugine0
        84
    Nugine0  
       2 天前
    @maix27
    实际上是后端在只改动前端代码的 PR 里跳出来,说我看不懂这些代码你们别改了,到时候我改后端接口还得学前端语言。
    前端说那我们自己维护前端这块,不需要你负责。
    后端就认为前端在夺权,直接撕破脸开喷。
    前端炸了,一纸小作文捅到社交媒体上。
    ld 这时不潜水了,指责前端把事情闹大。

    要我说没一个无辜的,最先引战的负主责。
    Nugine0
        85
    Nugine0  
       2 天前   ❤️ 4
    现在的社区氛围,Rust 用户在就事论事,反 Rust 魔怔人上来就扣帽子满嘴冒火。
    我就请问了为什么对事不对人那么困难。
    maix27
        86
    maix27  
       2 天前   ❤️ 2
    @Nugine0 #84 具体看第一条,我回 PTLin 的回答,没必要回我了,zhihu 没少见你装理中客拉偏架。

    “那我们自己维护前端这块,不需要你负责。” 这后端就是那上游的唯一贡献者,到时候出问题你下游的💩别让上游擦,真到处拉屎给核心 C 开发者搞急了给你投票让禁用 Rust 。

    转一下>
    当然 Christoph 也不是毫无道理,他作为 DMA 子系统维护者,理论上有权对 DMA API 做 breaking change ,但是如果他真的这么做了,作为代价,他要帮所有下游使用者修复所有的编译错误,如果这个 breaking change 造成 Rust DMA Binding 失效,那他就无能为力了。

    chirs 认为核心 dma 是自留地,api 应该是自己说了算。当他自己做 break change 时,有能力将目前下游全部修好。但是 r4l 加进来会导致他不能一己之力将下游修好,同时他不信任不愿意其他维护者协助。
    <

    人家后端同意你在(前端)驱动里拉屎,人家不同意在 DMA 里拉屎,够不够清楚?

    说难听点,你老员工能干好的活,现在你新员工进来要抢权,到时候做差了又指望老员工背锅,这谁能受得了?人家明明白白跟你说,你先做小活干着,获取信任和经验,干个 5 ~ 15 年(哪个老员工没干这么久?)到时候再来说这个事。

    好,请问你现在能告诉我 Rust 进 Linux 项目多久吗? Linux 项目发起多久了?
    maix27
        87
    maix27  
       2 天前   ❤️ 2
    @Nugine0 #85 别说 Christoph 不愿意,Linus 怕是也不愿意,人家也是让你先从边缘业务开始改造,谁让你改核心业务了?

    > 现在的社区氛围,Rust 用户在就事论事,反 Rust 魔怔人上来就扣帽子满嘴冒火。

    你对个锤子事,开马车的当然在对待落后交通工具的时候就事论事,等开汽车的上来你还能就事论事吗?
    而且 Linux 这个项目能直接像你一样把 Rust 当先进生产力来看待吗?能直接用马车汽车的例子吗?

    冒火不是很正常,V2/zhihu 的网友 5 ~ 10 年码龄以上的不少吧?工作中这样改技术栈的例子见的也不少吧?改一次的成本有多大人家应该是知道的。

    更别说人家 Linux 项目,求的就是稳定,20 几年多少语言都进不了库,给你写写驱动算不错了,你真把别人当 sb 给你搞政治正确?

    > 为什么对事不对人那么困难

    因为事是靠人做的,人做的不好要背锅,人没活做要死,你可以换位思考下,不要天天抱怨装理中客。我国为啥不裁员还加工资,为啥不招新人同时裁老人?信任不懂?你老板能随时裁老人,其他老人和新人自然对你也没啥信任可言,当然你要是做互联网业务当我没说,互联网是特别的。明不明白?
    Nugine0
        88
    Nugine0  
       2 天前   ❤️ 2
    @maix27

    结论不符合你心意就是“装理中客拉偏架”呗。这种帽子到处都在扔,看来如今我也收到了。

    https://rust-for-linux.com/rust-kernel-policy

    > The "RUST" subsystem maintains certain core facilities as well as some APIs that do not have other maintainers. However, it does not maintain all the Rust code in the kernel — it would not scale.
    > Nevertheless, the team can be approached for help if needed — indeed, the intention has always been to build a mixed team of people that could help across the kernel to bootstrap Rust.
    > Eventually, the "RUST" subsystem could also act as "fallback maintainers" for Rust code too, similar to how akpm serves as a last resort maintainer.

    没说必须让你擦,你不行还能找人。

    > However, exceptionally, for Rust, a subsystem may allow to temporarily break Rust code. The intention is to facilitate friendly adoption of Rust in a subsystem without introducing a burden to existing maintainers who may be working on urgent fixes for the C side. The breakage should nevertheless be fixed as soon as possible, ideally before the breakage reaches Linus.

    你做 C 的 breaking change ,也允许临时破坏 Rust 构建。

    > 人家后端同意你在(前端)驱动里拉屎,人家不同意在 DMA 里拉屎,够不够清楚?

    写驱动要用 DMA ,你一万个不同意,就因为你 hate Rust 。这下下游没法干了,你这是合作的态度?

    > 好,请问你现在能告诉我 Rust 进 Linux 项目多久吗? Linux 项目发起多久了?

    https://en.wikipedia.org/wiki/Rust_for_Linux
    https://fosdem.org/2025/events/attachments/fosdem-2025-6507-rust-for-linux/slides/236835/2025-02-0_iwSaMYM.pdf

    一批关键维护者,Google, Arm, Microsoft, Red Hat 等公司支持 Rust for Linux ,不然你以为 Linus 为什么推得动 Rust for Linux 进主线?人家内部斗争闹着玩呢?
    maix27
        89
    maix27  
       2 天前   ❤️ 2
    @Nugine0 #88 又开始扣 Hate Rust 帽子了,我说了,你要别人客观,就事论事,自己得先客观,别动不动扣“hate rust”的帽子。

    Every additional bit that another language creeps in drastically reduces the maintainability of the kernel as an integrated project. The only reason Linux managed to survive so long is by not having internal boundaries, and adding another language completely breaks this. You might not like my answer, but I will do everything I can do to stop this. This is NOT because I hate Rust. While not my favorite language it's definitely one of the best new ones and I encourage people to use it for new projects where it fits. I do not want it anywhere near a huge C code base that I need to maintain.


    看清楚了吗?人家没恨。别动不动扣帽子。

    为啥说你装理中客?你上知乎看看就知道呗,你对那问题下所有举例子的一律不回复,能杠的就杠,还写篇回答装理中客,现在又在这喊冤,真没必要👬。

    Google, Arm, Microsoft, Red Hat 等公司支持 Rust for Linux ,不代表就要动核心,Linus 也支持不代表现在就全部重写,我说了现在大家不是完全信任 Rust ,Rust 也没证明它对得起大家的信任,有几个项目用这个改写的已经迁移回去了,你能不能看清楚?
    你是政治 zz 的获益者吗? Rust 不绝对就是绝对不 Rust 是吧?极端主义都卷到这来啦?

    > 写驱动要用 DMA ,你一万个不同意,就因为你 hate Rust 。这下下游没法干了,你这是合作的态度?

    你是写驱动吗? 他说了

    If you want to make Linux impossible to maintain due to a cross-language codebase, do that in your driver so that you have to do it instead of spreading this cancer to core subsystems. (where this cancer explicitly is a cross-language codebase and not Rust itself, just to escape the flameware brigade).
    Nugine0
        90
    Nugine0  
       2 天前   ❤️ 4
    @maix27
    你自己也承认你在对人不对事,承认你在冒火。帽子飞来飞去,你认为我“装理中客”,那我也没办法。
    这样吧,你想让我回复哪个评论,你就贴链接出来,或者知乎私信我。

    > This is NOT because I hate Rust

    Hellwig 这段叠甲承认他 hate Rust ,否认他干出这事是因为 Rust 。实际上呢?你猜?

    下游写驱动要用 DMA ,没改到核心 C 代码,只是做了个 Rust binding ,也答应一旦被 break 会修复。
    看到没,是要用,不是要改。

    但 Hellwig 想单人掌控所有调用 DMA 的地方,完全不接受其他人合作。我是没看到有哪个人这样写项目的。
    lesismal
        91
    lesismal  
       2 天前
    两人都是大神, 各有对错, linus 的立场是非常正确的, 项目中有这种路线冲突之类的问题很正常, 应该沟通寻求各方都能接受的方案.
    项目内的事情没必要发作文, 他们两个争论什么其实不是重点, 写作文才是导致问题爆发的点, 写作文才是真的搞政治的魔怔行为, 完全意识不到自己的问题而且随便去发作文说明他本身就心智不咋地.
    强烈支持 linus !

    对于 rust, 至少我见到的有足够基础的人都是赞美, 几乎没有人贬损 rust, 最多就是觉得它难度大不好学.
    反 go 的那帮人的言论, 才是真的魔怔.
    Nugine0
        92
    Nugine0  
       2 天前
    @lesismal
    同意各有对错的说法。Hellwig 引战不对,Martin 发小作文也不对。Linus 首先表示别搞小作文是正确的,但仍需要站出来调和两派冲突。
    jqtmviyu
        93
    jqtmviyu  
       1 天前
    @Nugine0 #81 作为项目整体而言, 确实引入不稳定性和沟通成本了. 后端以后改个接口, 前端可能就炸了. 以前后端能看懂, 改接口可能就把自己能看懂的其它部分也修了.
    NealLason
        94
    NealLason  
       1 天前
    @w568w 老哥是 rockchip 的大佬啊
    Nugine0
        95
    Nugine0  
       1 天前 via Android
    @jqtmviyu
    确实是增加了沟通成本。但大领导都决定要推进新功能了,其他人也都干了几年了,轮到这个模块时后端突然撕破脸大家都别干了,你说离不离谱
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:08 · PVG 17:08 · LAX 01:08 · JFK 04:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.