Rust 成为 Linux 内核官方语言:系统编程的新时代

2026/03/24 Tech 共 3337 字,约 10 分钟

💡 2024 年 Linux 6.1 版本,Rust 正式成为内核官方支持的语言。这是系统编程的一个里程碑。

背景:为什么 Linux 需要 Rust?

C 语言的问题

Linux 内核用了 30 多年的 C 语言,但 C 有个致命问题:内存不安全

// C 代码的常见问题
void* ptr = malloc(10);
free(ptr);
free(ptr);  // 二次释放!程序崩溃

char buffer[10];
strcpy(buffer, "这是一个很长的字符串");  // 缓冲区溢出!

int* p = NULL;
*p = 5;  // 空指针解引用!

这些问题导致:

  • 安全漏洞 — 每年 Linux 内核有 100+ 个内存安全相关的 CVE
  • 维护成本高 — 需要大量代码审查和测试
  • 难以并发 — 多线程编程容易出现数据竞争

Rust 的承诺

Rust 在编译时就能保证内存安全,不需要运行时开销:

// Rust 代码
let mut ptr = Box::new(5);
drop(ptr);
// drop(ptr);  // 编译错误!不能二次释放

let buffer = String::from("hello");
// buffer 的所有权被转移后,原变量不能再用
// 编译器会检查这一切

// 多线程安全
let data = Arc::new(Mutex::new(vec![1, 2, 3]));
// 编译器保证线程安全,不需要运行时检查

一、Rust 进入 Linux 的历程

2020 年:第一次提议

Linus Torvalds 在 Linux Plumbers Conference 上说:

“我们应该考虑用 Rust 写内核代码”

当时反应:

  • 内核开发者:这疯了吗?
  • Rust 社区:终于有人看到我们的价值了!

2021 年:正式立项

Linux 6.0 版本,Rust 支持被合并到主线:

# 第一个用 Rust 写的内核模块
# 位置:samples/rust/

2024 年:官方支持

Linux 6.1 版本,Rust 成为官方支持的语言

Linux 内核语言支持:
- C(主要)
- Rust(官方支持)
- 汇编(架构相关)

二、Rust 在内核中的应用

现状:已有的 Rust 代码

# 查看 Linux 内核中的 Rust 代码
find /linux/rust -name "*.rs" | wc -l
# 约 10000+ 行 Rust 代码

# 主要模块
- GPU 驱动(Nouveau、AMD)
- 文件系统(Btrfs 的部分)
- 网络驱动
- 设备驱动框架

实例:用 Rust 写驱动

// 一个简单的 Linux 驱动框架
use kernel::prelude::*;

module! {
    type: HelloWorld,
    name: b"hello_world",
    author: b"Rust Developer",
    description: b"A simple Rust driver",
    license: b"GPL",
}

struct HelloWorld;

impl kernel::Module for HelloWorld {
    fn init() -> Result<Self> {
        pr_info!("Hello from Rust!");
        Ok(HelloWorld)
    }
}

impl Drop for HelloWorld {
    fn drop(&mut self) {
        pr_info!("Goodbye from Rust!");
    }
}

编译:

make LLVM=1 M=samples/rust

对比:C vs Rust

同样的功能,用 C 和 Rust 实现:

C 版本(容易出错):

struct device* dev = kmalloc(sizeof(struct device), GFP_KERNEL);
if (!dev)
    return -ENOMEM;

// 忘记检查返回值?
int ret = init_device(dev);

// 忘记释放内存?
kfree(dev);

Rust 版本(编译器保证安全):

let dev = Box::new(Device::new()?);  // 自动内存管理
let ret = dev.init()?;                // 强制错误处理
// dev 超出作用域时自动释放

三、为什么这很重要?

1. 安全性提升

Linux 内核每年的内存安全 CVE:
2015: 约 50 个
2020: 约 80 个
2024: 约 100+ 个

如果用 Rust 重写,这些问题会在编译时被发现!

2. 开发效率

C 代码审查时间:
- 需要检查内存管理
- 需要检查指针操作
- 需要检查并发问题
- 平均审查时间:2-3 小时

Rust 代码审查时间:
- 编译器已检查内存安全
- 编译器已检查并发安全
- 只需审查业务逻辑
- 平均审查时间:30-60 分钟

3. 新开发者友好

学习 Linux 内核开发的难度:
C: ⭐⭐⭐⭐⭐ (需要深入理解内存管理)
Rust: ⭐⭐⭐ (编译器帮你检查)

4. 并发编程

// Rust 的并发安全
use std::sync::{Arc, Mutex};
use std::thread;

let data = Arc::new(Mutex::new(vec![1, 2, 3]));

for i in 0..10 {
    let data = Arc::clone(&data);
    thread::spawn(move || {
        let mut v = data.lock().unwrap();
        v.push(i);
    });
}
// 编译器保证没有数据竞争!

四、现实的挑战

1. 学习曲线陡峭

Rust 的所有权系统很强大,但也很难学:

// 初学者常见错误
let s = String::from("hello");
let s2 = s;  // s 的所有权被转移
println!("{}", s);  // 编译错误!s 已经被转移

// 需要这样做
let s = String::from("hello");
let s2 = s.clone();  // 显式克隆
println!("{}", s);  // OK

2. 生态不完整

C 语言库:成熟、稳定、数量多
Rust 库:快速增长,但还有空白

内核中需要的库:
- 内存管理 ✅
- 并发原语 ✅
- 文件系统 ⚠️ 部分
- 网络栈 ⚠️ 部分

3. 性能考虑

Rust vs C 性能对比:
- 大多数情况:相当
- 某些情况:Rust 更快(编译器优化)
- 某些情况:C 更快(手工优化空间)

内核对性能要求极高,不能有任何妥协

4. 社区接受度

Linux 内核开发者的态度:
- 支持者:年轻开发者、新项目
- 保守派:资深开发者、核心模块
- 反对者:少数,但声音大

现状:逐步接受,但不会全面替代 C

五、未来展望

短期(1-2 年)

✅ 更多驱动用 Rust 重写
✅ 文件系统部分模块用 Rust
✅ 网络驱动框架用 Rust
❌ 核心调度器不会改
❌ 内存管理不会改

中期(3-5 年)

可能:
- 30-40% 的驱动代码用 Rust
- 新的子系统优先用 Rust
- Rust 成为必学语言

不太可能:
- 完全替代 C
- 核心内核用 Rust

长期(5+ 年)

理想情况:
- 50% 的内核代码用 Rust
- 内存安全问题大幅减少
- 新开发者更容易上手

现实情况:
- 可能达到 30-40%
- 需要 10+ 年的演进

六、对开发者的影响

如果你是系统开发者

现在学什么?
1. C 语言(必须,内核基础)
2. Rust(未来方向)
3. 汇编(架构相关)

建议:
- 先精通 C
- 再学 Rust
- 两者都懂最吃香

如果你是应用开发者

影响不大,但:
- 系统调用可能更安全
- 驱动更稳定
- 内核 panic 更少

如果你想进入内核开发

新机会:
- Rust 驱动开发
- 新的子系统设计
- 跨越 C/Rust 的桥接

竞争:
- 需要同时懂 C 和 Rust
- 学习成本高
- 但机会也大

七、学习资源

官方资源

资源链接
Rust 官网https://www.rust-lang.org/
Linux 内核 Rust 文档https://docs.kernel.org/rust/
Rust for Linuxhttps://github.com/Rust-for-Linux

学习路径

1. 学 Rust 基础(1-2 周)
   - 所有权系统
   - 借用和生命周期
   - 错误处理

2. 学 Linux 内核基础(2-4 周)
   - 进程和线程
   - 内存管理
   - 中断和异常

3. 学 Rust for Linux(2-4 周)
   - 内核 API
   - 驱动框架
   - 实战项目

4. 贡献代码(持续)
   - 提交补丁
   - 参与讨论
   - 建立声誉

八、总结

方面评价
意义⭐⭐⭐⭐⭐ 系统编程的革命
时机⭐⭐⭐⭐ 恰到好处
挑战⭐⭐⭐⭐ 不容小觑
前景⭐⭐⭐⭐ 光明但需要时间

关键观点:

  1. Rust 不会替代 C,但会占据越来越多的份额
  2. 内存安全是大势所趋,Rust 是最好的解决方案
  3. 学习 Rust 是投资,未来系统编程的必备技能
  4. 这是个机会,早学早受益

作者:牛马便利店一号店员

文档信息

Search

    Table of Contents