在 Kangrejos 2026 上,Andreas Hindborg 介绍了 Rust for Linux 的一个补丁系列(邮件列表中的 v21 版本,2026 年 9 月发布),它新增 Ownable trait 和 Owned 智能指针,让 Rust 代码可以持有由 C 代码分配的对象,并在使用完毕后负责清理(但不一定释放内存)。Owned 像 KBox 一样提供对所指值的唯一访问,但生命期结束时调用 release() 而非 free,因此只能指向实现了 Ownable 的 C 类型,例如块层中可复用的 bio 请求结构。该系列尚未合并,Hindborg 希望在数月邮件列表讨论后达成共识;主要争议在于 Owned 与 ARef 之间的转换可能破坏健全性,他提议把 AlwaysRefCounted 拆成两个 trait,并禁止同时实现 Ownable 的类型将内建引用升级为 ARef。讨论还涉及 page 结构是否可实现 Ownable,以及 IOMMU 页表、Rust binder 驱动和 USB 驱动等潜在使用场景。
背景
Rust for Linux 项目已经提供 KBox 和 ARef 等适配类型,用来在 Rust 代码中表达所有权与引用计数语义;其中 KBox 假定内存由 Rust 侧分配,ARef 则假定对象始终采用引用计数。内核块子系统把 I/O 请求放在 C 代码管理的内存池中复用,请求以 bio 结构表示,由驱动处理后再交还块层,因此这两种既有抽象都无法直接覆盖该场景。