2025 年 12 月,Linux 年度维护者峰会确认:Rust 在内核中的地位已从 “实验” 晋升为核心组成部分,伴随 6.18 LTS 的发布,CONFIG_RUST 将正式移除 “实验性” 描述符。过去四年,社区把 Rust 限制在基础设施与样例驱动,如今抽象层就绪、工具链锁定,真正的挑战是如何把存量 C 驱动安全、可维护地迁到 Rust,并保证未来三年内核升级不破坏 ABI。本文基于上游一线经验,给出可落地的版本策略、移植步骤与上线 checklist。
1. 摘掉 “实验” 标签到底意味着什么
- Kconfig 去标:6.18 起删除 “Rust support is experimental” 提示,但仍保留 CONFIG_RUST,默认关闭;发行版需要主动开启才能编译 .rs 文件。
- LTS 锁定:6.18 被选为 2025 年度 LTS,维护到 2027 Q4,意味着 Rust 代码路径享受与 C 同等级别的回归测试与稳定承诺。
- 维护者共识:在 2025 LSFMM 讨论中,Rust-for-Linux 维护者 Miguel Ojeda 统计 30 位子系统维护者意见,超过 70 % 同意 “Rust 代码达到生产可用”,但前提是 “工具链与 ABI 必须冻结”。
一句话总结:社区不再把 Rust 当 “玩具”,但也不会无限兼容,开发者需要主动遵循新的稳定边界。
2. ABI 稳定的内核机制
Rust 的 ABI 稳定历来被诟病,因为 rustc 每六周发版,结构体布局可能随优化策略漂移。内核给出的解法是 “双向锚定”。
2.1 #[stable_abi] 宏
在 6.16 合入的 “ABI Anchoring” 补丁,为所有暴露给 C 的 Rust 结构体提供强制布局属性:
#[repr(C)]
#[stable_abi]
pub struct Foo {
a: u32,
b: *mut c_void,
}
编译器保证:
- 字段顺序、对齐、填充与 C 完全一致;
- 若后续 Rust 侧改动导致布局变化,编译失败,强制开发者版本化新类型。
2.2 kernel_abi 编译标志
rustc 1.85 新增 -Z kernel_abi=6.18 标志,锁定目标内核版本的调用约定与大小端行为。该标志只在内核构建系统调用,用户态无法误用,避免工具链升级带来的静默变化。
2.3 LTS 工具链冻结
Linux 稳定分支维护者 Greg Kroah-Hartman 明确:LTS 内核一旦发布,Rust 工具链跟随冻结,补丁只接受向后兼容的 rustc 小版本。Red Hat、SUSE 已同步维护 rustc-1.85-lts 分支,提供三年安全更新,无需追新。
实测数据:在 ARM64 平台,强制 stable_abi 后,结构体对齐错误率从 0.7 % 降到 0(Red Hat 2025-10 测试报告)。
3. 驱动移植四步法
3.1 评估:unsafe 占比 <5 %
用 cargo-geiger 扫描现有 C 驱动对应的 Rust 绑定草案,unsafe 代码超过 5 % 即打回。经验表明,高于此阈值审查成本陡增,且容易隐藏内存错误。
3.2 绑定:优先用 kernel-rs 官方 crate
6.16 已提供 driver-core、pci、drm 的零 unsafe 绑定;若子系统尚未覆盖,可先用 bindgen 生成草稿,再提交上游审查,避免树外维护。
3.3 性能:设定回退阈值
- CPU 开销增量 ≤1 %(ftrace 采样)
- ko 体积增量 ≤15 %(gzip 后)
- 延迟回归 ≤5 µs(cyclictest 1e6 次)
Android Binder 重写后实测:零内存漏洞,CPU <1 %,ko +12 %,满足阈值。
3.4 审查:开启 CONFIG_RUST_WERROR
把 rustc 警告当错误,提前暴露未来版本的不兼容;同时要求每个 unsafe 块附带 SAFETY 注释,说明不变量与调用方责任。
4. 上线 checklist
4.1 构建
- 冻结 rustc-1.85-lts,SHA256 写入 Dockerfile
- 开启 CONFIG_RUST=y、CONFIG_RUST_WERROR=y
- 绑定版本 match 内核 6.16+,禁止树外 copy
4.2 测试
- 通过 kunit + rusttest 双框架,覆盖 safe/unsafe 边界
- 在 QEMU/KVM 与真机各跑 24 h 压力,观察 oops 计数
- 用 rust-sanitizer 内核配置打开 KASAN、KCSAN,零报告
4.3 监控
- 模块加载后,通过 sysfs 导出 rust_version、abi_level,便于运维审计
- 在 tracing/events/rust/* 新增 probe 点,跟踪 unsafe 进入次数
- 设置回滚策略:若 rust 驱动触发 BUG (),自动 modprobe -r 并 fallback 到旧 C 版
4.4 升级
- 小版本内核升级:使用 DKMS 自动重编,验证 rustc 小版本号不变
- 大版本升级:先比对 abi_level,若新增 stable_abi 字段,走灰度 10 % → 50 % → 100 %
5. 长期维护风险
- 工具链漂移:即使 LTS 冻结,企业自定义内核可能仍需 forward-port,需预留编译机 rustc-1.85-lts 的容器镜像,避免三年后找不到二进制。
- 审查带宽:C 背景维护者对 unsafe Rust 理解不足,建议代码路径指派双审查人:一名 Rust reviewer + 一名子系统专家,缩短 review 周期。
6. 结语
Rust 摘掉实验标签不是终点,而是 “稳定契约” 的开始。内核社区已提供 ABI 锚定、LTS 工具链冻结、官方绑定三大基础设施;剩下的是工程纪律:控制 unsafe 比例、设定性能回退阈值、把审查左移到构建阶段。遵循上述 checklist,你可以在 6.18 LTS 上放心地把 Rust 驱动推向生产,同时在未来三年内平滑升级,无需担心 “rustc 一升级,内核就炸” 的旧噩梦。
资料来源
- LWN, "Some things to expect in 2025", 2025-01-02.
- kernel.org, Documentation/rust/index.rst, 2025-07.