土法炼钢兴趣小组的算法知识备份

【操作系统百科】Rust for Linux

文章导航

分类入口
os
标签入口
#rust#rust-for-linux#kernel-development#memory-safety#asahi

目录

Linux 内核 70% 的漏洞是内存安全问题。Rust 的所有权系统能在编译时消除这些 bug——但把 Rust 引入 30 年历史的 C 代码库,代价是什么?

一、先看图

flowchart TD
    RUST[Rust 代码<br/>驱动/模块] --> ABS[Rust 抽象层<br/>kernel crate]
    ABS --> C_API[C 内核 API<br/>bindgen 生成]
    C_API --> KERNEL[Linux 内核<br/>C 代码]

    classDef rust fill:#f0883e22,stroke:#f0883e,color:#adbac7;
    classDef c fill:#388bfd22,stroke:#388bfd,color:#adbac7;
    class RUST,ABS rust
    class C_API,KERNEL c

二、时间线

时间 里程碑
2021 RFC 提出
2022.12 Linux 6.1 合入基础 Rust 支持
2023-2024 抽象层逐步扩展
2024+ Asahi GPU 驱动、网络驱动
2025 kernel crate 稳定化

三、架构

3.1 kernel crate

use kernel::prelude::*;

module! {
    type: MyModule,
    name: "my_module",
    license: "GPL",
}

struct MyModule;

impl kernel::Module for MyModule {
    fn init(_module: &'static ThisModule) -> Result<Self> {
        pr_info!("Hello from Rust!\n");
        Ok(MyModule)
    }
}

3.2 unsafe 边界

// 安全抽象包裹 unsafe C 调用
pub fn alloc_pages(order: u32) -> Result<Page> {
    // 内部调用 unsafe C API
    // 但对外暴露安全接口
}

原则:unsafe 集中在抽象层 → 驱动代码尽量全 safe。

四、Asahi GPU 驱动

Apple Silicon GPU 驱动 → 用 Rust 编写 → 最大的 Rust 内核驱动:

证明了 Rust 可以写真实的内核驱动。

五、解决的问题

问题 C Rust
UAF 运行时 crash 编译时拒绝
双重释放 运行时 crash 编译时拒绝
缓冲区溢出 运行时 crash 编译时拒绝
数据竞争 需要 lockdep/kcsan 编译时拒绝(Send/Sync)
空指针 运行时 crash Option 类型

六、挑战

6.1 工具链

6.2 维护负担

C 内核开发者需要学 Rust → 社区分裂风险。

6.3 ABI 稳定性

Rust 没有稳定的 ABI → 模块需要与内核同一 rustc 版本编译。

6.4 抽象层维护

每个 C API 变更 → Rust 抽象层需要同步更新。

七、与 eBPF 中的 Rust

// Aya 框架
#[map]
static EVENTS: PerfEventArray<Event> = PerfEventArray::new(0);

#[kprobe]
fn my_probe(ctx: ProbeContext) -> u32 {
    // ...
}

Aya 让你用 Rust 写 eBPF 程序 → 编译时安全检查 + BPF verifier。

八、社区态度

Linus Torvalds 支持引入 Rust → 但要求不强制 C 开发者学 Rust。

九、其他内核语言实验

项目 语言 状态
Rust for Linux Rust 合入主线
Redox OS Rust 独立 OS
Hubris Rust 嵌入式 OS(Oxide)
seL4 C + Isabelle/HOL 形式化验证

十、小结


参考文献

工具


上一篇Unikernel 下一篇机密计算

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-05-06 · os

【操作系统百科】内核内存调试

内核内存 bug 是最难追的:UAF、OOB、double free、leak 都可能沉默数月。本文讲 KASAN 三种模式、KFENCE 生产采样、kmemleak、SLUB_DEBUG、UBSAN/KCSAN 联动。

2026-05-08 · os

【操作系统百科】VFS 四层抽象

Linux 的一切皆文件靠 VFS 实现——superblock、inode、dentry、file 四层抽象加 ops 表。本文讲 VFS 核心数据结构、dcache、inode cache、RCU lookup,以及文件系统如何插入 VFS。

2026-04-22 · os

操作系统百科

Linux 6.x 视角下的操作系统系列索引:110 篇覆盖调度、虚拟内存、文件系统与 I/O、并发、隔离、可观测性,按主题、阅读路径与关键问题三种入口组织。

2026-05-27 · os

【操作系统百科】用户态分配器:jemalloc vs tcmalloc

jemalloc 与 tcmalloc 都想解决多线程分配器的老问题:锁争抢、碎片、RSS 膨胀与回收抖动。但两者把优化重点放在了不同位置:tcmalloc 更激进地把热路径推到 per-CPU,jemalloc 则把 arena、extent、decay 和 profiling 做成了一套更完整的内存治理工具箱。


By .