温馨提示×

linux为啥要用rust

小樊
38
2026-10-15 20:56:18
栏目: 编程语言

Linux 开始引入 Rust,核心原因可以总结为一句话:

用 Rust 写内核里“容易出错但又很重要”的子系统,在性能和可控性的前提下,大幅减少内存安全漏洞。

下面分层说清楚原因。


一、C 的历史包袱:快,但太容易出事

Linux 内核目前主要是 C 语言写的,C 的优点是:

  • 贴近硬件
  • 零抽象开销
  • 可控性极强

但问题也很明显:

  • 手动管理内存
  • 指针随意使用
  • 很容易出现:
    • 空指针解引用
    • 野指针
    • 缓冲区溢出
    • 并发数据竞争

现实中:

Linux 内核里大量 CVE 来自内存安全问题

这类 bug 不是“写得不仔细”,而是 语言本身允许你写错。


二、Rust 能解决什么?

Rust 的最大卖点是:

编译期就阻止大部分内存安全问题

Rust 在内核场景下的优势

  1. 内存安全(无 GC)

    • 不需要垃圾回收
    • 适合内核这种“不能停”的环境
  2. 所有权 + 借用检查

    • 编译期防止:
      • 悬垂指针
      • 双重释放
      • 数据竞争
  3. 更好的并发安全

    • Send / Sync 在类型系统里保证线程安全
  4. 现代语言体验

    • 模式匹配
    • 枚举
    • 错误处理(Result)
    • 模块系统

三、Linux 为什么“现在”才用 Rust?

不是突然想用,而是条件成熟了:

1. Rust 足够稳定

  • 核心语言特性稳定
  • 工具链(rustc、cargo)可用

2. 内核做了大量适配

  • rust-for-linux 项目
  • 提供:
    • 内核 API 封装
    • 分配器
    • 同步原语

3. 只在“安全边界内”使用

Linux 不是“用 Rust 重写内核”,而是:

新增代码可以用 Rust 写 已有 C 代码继续存在


四、Linux 用 Rust 写什么?

不是全部,而是选择性使用:

✅ 适合 Rust 的:

  • 驱动(尤其是新硬件)
  • 文件系统
  • 网络子系统
  • 抽象层 / 框架代码

❌ 不适合立刻替换的:

  • 调度器核心
  • 中断处理热路径
  • 极度性能敏感的老代码

典型例子:

  • Rust 写的 Apple Silicon 驱动(asahi)
  • 一些实验性驱动和模块

五、为什么不直接用 C++?

这是个好问题,常见原因:

  • C++ 太复杂
  • 抽象成本高
  • 向后兼容包袱重
  • 没有 Rust 那样“强制安全”的语言级保证

Rust 是为系统级安全重新设计的语言。


六、一句话总结

Linux 用 Rust,不是为了“潮”,而是为了在不牺牲性能的前提下,少写漏洞、少崩、少被攻击。

如果你愿意,我也可以:

  • 讲 Rust 在内核里怎么和 C 互调
  • 或对比 Rust vs C 写驱动的代码示例
  • 或解释 为什么 Rust 还不能替代全部 C

你想看哪一个?

0 踩