Linux 内核补丁第二版,支持 Rust 语言

Rust-for-Linux 项目的作者 Miguel Ojeda 提出了用于用 Rust 语言开发设备驱动程序的组件的更新版本,供 Linux 内核开发人员考虑。 Rust 支持被认为是实验性的,但已经同意包含在 linux-next 分支中。 新版本消除了在讨论第一个版本补丁时所做的评论。 Linus Torvalds 已经加入了讨论并提议更改处理某些位操作的逻辑。

回想一下,提议的更改使得可以使用 Rust 作为开发驱动程序和内核模块的第二语言。 Rust 支持作为一个选项提供,默认情况下不启用,并且不会导致 Rust 被包含为内核所需的构建依赖项。 使用 Rust 进行驱动程序开发将允许您以最小的努力创建更安全、更好的驱动程序,并且不会出现释放后内存访问、空指针取消引用和缓冲区溢出等问题。

Rust 在编译时通过引用检查、跟踪对象所有权和对象生命周期(作用域)以及在代码执行期间评估内存访问的正确性来提供内存安全处理。 Rust 还提供防止整数溢出的保护,要求在使用前强制初始化变量值,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,提供强静态类型以最小化逻辑错误。

新版本补丁中最显着的变化:

  • 当发生内存不足等错误时,内存分配代码不会产生潜在的“恐慌”状态。 其中包含 Rust alloc 库的一个变体,它重新编写代码以处理故障,但最终目标是将内核所需的所有功能转移到 alloc 的主版本(更改已经准备好并转移到标准版本) Rust 库)。
  • 您现在可以使用 rustc 编译器的 beta 版本和稳定版本来编译支持 Rust 的内核,而不是夜间构建。 目前使用 rustc 1.54-beta1 作为参考编译器,但月底发布 1.54 版本后,将支持它作为参考编译器。
  • 添加了对使用 Rust 标准“#[test]”属性编写测试的支持,以及使用 doctest 记录测试的能力。
  • 除了之前支持的 x32_86 和 ARM64 之外,还添加了对 ARM64 和 RISCV 架构的支持。
  • 改进了 GCC Rust(Rust 的 GCC 前端)和 rustc_codegen_gcc(GCC 的 rustc 后端)的实现,现已通过所有基本测试。
  • 提出了一个新的抽象级别,用于用 C 编写的内核机制的 Rust 程序,例如红黑树、引用计数对象、文件描述符创建、任务、文件和 I/O 向量。
  • 驱动程序开发组件改进了对 file_operations 模块、module! 宏、宏注册和基本驱动程序(探测和删除)的支持。
  • Binder 现在支持传递文件描述符和 LSM 挂钩。
  • 提出了一个功能更强大的 Rust 驱动程序示例 - bcm2835-rng,用于 Raspberry Pi 板的硬件随机数生成器。

此外,还提到了一些公司与在内核中使用 Rust 相关的项目:

  • 微软表示有兴趣参与将 Rust 支持集成到 Linux 内核中的工作,并准备在未来几个月内为 Rust 上的 Hyper-V 提供驱动程序实现。
  • ARM 正在努力改进对基于 ARM 的系统的 Rust 支持。 Rust 项目已经提出了一些更改,将使 64 位 ARM 系统成为第 1 层平台。
  • Google 直接为 Rust for Linux 项目提供支持,正在开发 Rust 中 Binder 进程间通信机制的新实现,并正在考虑在 Rust 中重新设计各种驱动程序的可能性。 通过 ISRG(互联网安全研究小组),Google 为将 Rust 支持集成到 Linux 内核中的工作提供了资金。
  • IBM 已经为 PowerPC 系统实现了 Rust 的内核支持。
  • LSE(系统研​​究实验室)实验室使用 Rust 开发了 SPI 驱动程序。

来源: opennet.ru

添加评论