关注了就能看到更多这么棒的文章哦~
Asterinas: a new Linux-compatible kernel project
June 19, 2025
This article was contributed by Ronja Koistinen
Gemini flash translation
https://lwn.net/Articles/1022920/
Asterinas 是一个用 Rust 语言编写的全新 Linux-应用程序二进制接口(Linux-ABI)兼容的内核项目,其设计基于作者所称的“帧内核架构”(framekernel architecture)。该项目在目标上与 Rust for Linux 项目有一定重叠,但它从不同方向处理问题,力求兼得单体内核(monolithic)和微内核(microkernel)设计的优点。
什么是帧内核?
帧内核(framekernel)概念在 Yuke Peng 等人于 2024 年 9 月发布的论文《帧内核:通过基于 Rust 的内核内特权分离实现安全高效的内核架构》中有所阐述。该论文的完整版本已于 6 月初发布。
传统上,单体内核(monolithic kernels)将所有内容集中到一个内核模式地址空间中,而微内核(microkernels)则只在内核空间中实现一个最小化的可信计算基(TCB),并依赖用户模式服务来提供大部分操作系统功能。这种分离意味着微内核与这些服务之间需要使用进程间通信(IPC)。这种 IPC 通常会带来性能影响,这也是微内核相对不受欢迎的一个重要原因。
Asterinas“帧内核”设计的核心在于将所有需要 Rust `unsafe` 功能的代码封装在一个库中,从而使内核的其余部分(即服务)能够使用安全抽象(safe abstractions)进行开发。这些服务保留在内核的地址空间内,但只能访问核心库提供给它们的资源。这种设计旨在提高系统安全性,同时保留单体内核简单高效的共享内存架构。项目网站上的Asterinas 手册提供了清晰的架构使命声明和概览。
“帧内核”这个命名的恰当性或许有待商榷。“帧”(frame)部分指的是将不安全部分封装在内存安全 API 之后的开发框架。可信计算基(TCB)的概念当然并非微内核架构所独有,但是由于存在严格审查,甚至在某些情况下形式化验证系统 TCB 的强烈动机,因此尽可能缩小 TCB 是微内核设计的核心方面。
Asterinas 博客在 6 月 4 日发布的题为《内核内存安全:使命达成》的帖子中提供了项目最新进展。该帖子解释了团队的动机以及行业应对内存安全问题的必要性;它提供了一些插图,解释了帧内核与单体内核和微内核的不同之处。帖子还着重强调,Rust 的优势不仅限于内存安全,还在健全性方面有所改进。或许最重要的是,该帖子强调了 Asterinas 即将在2025 年 USENIX 年度技术大会上进行演示。
相关工作
在他们的论文中,作者将 Asterinas 与之前一些基于 Rust 的操作系统工作进行了比较,探讨了该语言内存安全特性带来的好处,并解释了 Asterinas 与这些先前工作的不同之处。具体来说,论文将 Asterinas 与 RedLeaf 进行了对比。RedLeaf 是一个用 Rust 编写的操作系统,于 2020 年在第 14 届 USENIX 操作系统设计与实现研讨会(OSDI 20)上发表。Asterinas 使用硬件隔离来允许运行任何编程语言编写的用户空间程序,旨在通用化,并提供 Linux 兼容的 ABI,而 RedLeaf 则是一个微内核,其设计目的/不/是使用硬件的隔离特性,并且该项目关注点不同。
另一个值得关注的项目是 Tock,这是一个针对硬件保护功能有限的片上系统(SoC)的嵌入式系统。与 Asterinas 类似,Tock 也将内核划分为一个允许使用 `unsafe` 的可信核心(trusted core)和一些不可信的“胶囊”(capsules),后者不允许使用 `unsafe`。如前所述,Asterinas 确实依赖硬件保护,并非严格用于嵌入式用途,这使其与 Tock 不同。
值得一提的是,Rust for Linux 项目(将 Rust 代码引入上游 Linux 内核)与 Asterinas 也有相似的目标。它也旨在通过安全抽象封装内核接口,以便可以使用 Rust 编写驱动程序,而无需使用任何 `unsafe` 代码。
形式化验证工作
缩小操作系统 TCB 的一个目标是使其能够进行形式化验证。2025 年 2 月,Asterinas 博客发布了一篇详细阐述这一计划的帖子。最著名的形式化验证内核是 seL4,一个 L4 系列微内核。
Asterinas 旨在利用帧内核方法,实现一个既拥有类似于精简微内核的小型、经过形式化验证的 TCB,又同时具备简单共享内存架构和 Linux ABI 兼容性的系统。这与任何以前经过形式化验证的内核都有着根本性的不同;该博客文章将那些内核描述为与“全功能 UNIX 风格操作系统”相比,刻意设计得更小、更有限。
Asterinas 项目正在与一家名为 CertiK 的安全审计公司合作,使用 Verus 对内核进行形式化验证。CertiK 发布了一份详尽的报告,详细说明了 Asterinas 是如何被审计以及发现了哪些问题。
库和工具
Asterinas 内核只是该项目的一个成果。另外两个是 OSTD(被描述为“一个 Rust OS 框架,旨在促进用 Rust 编写的操作系统内核的开发和创新”)和 OSDK(一个 Cargo 插件,用于辅助基于 OSTD 的内核的开发、构建和测试)。
OSTD 作为独立 Rust 包(crate)有四个既定目标。一是降低操作系统创新的门槛,为操作系统开发新手奠定基础。二是增强用 Rust 编写的操作系统内存安全性;其他项目可以从其封装和对低级操作的抽象中受益。三是促进基于 Rust 的操作系统项目之间的代码复用。四是通过在用户模式下测试新代码来提高生产力,让开发人员无需重启即可进行迭代。
值得强调的是,使用 OSTD 编写的内核不必是 Linux 兼容的,或以任何方式类 Unix 的。它提供的 API 更具通用性;它们是用于诸如 x86 硬件管理、引导、虚拟内存、对称多处理(SMP)、任务、用户和定时器等功能的内存安全抽象。与大多数 Rust 包一样,OSTD 在 docs.rs 上有文档记录。
Asterinas 报告称,Intel 等是该项目的赞助商。Intel 的兴趣可能与其可信域扩展(TDX)功能有关,该功能提供硬件模式和特性,以促进虚拟机的隔离和内存加密。Asterinas 手册中有一小节介绍了 TDX,并且 OSDK 支持它。
OSTD,或者至少是 Asterinas 最终使用的部分,本质上似乎是允许 `unsafe` 的受限 TCB。举例来说,我们可以查看 `network` 内核组件的源代码,可以看到其缓冲区代码通过内存安全 API 使用了 OSTD 的直接内存访问(DMA)、锁、内存分配和虚拟内存代码。
当前状态
Asterinas 于 2024 年初首次以 Mozilla 公共许可证发布;过去一年里,它经历了快速发展。GitHub 列出了 45 名独立提交者,但大部分提交来自南方科技大学、北京大学和复旦大学的几名博士生,以及赞助 Asterinas 的中国公司蚂蚁集团。
截至撰写本文时,Asterinas 支持两种架构:x86 和 RISC-V。在上面链接的 1 月份博客文章中,据报道 Asterinas 支持 180 个 Linux 系统调用,但此后该数字已增长到 x86 上的206 个。截至 6.7 版本,Linux 总共有 368 个系统调用,因此还有很长的路要走。
总的来说,Asterinas 仍处于早期开发阶段。除了 Git 标签和文档中简短的安装指南外,还没有版本发布、发布公告、更新日志等信息。OSTD 包在 crates.io 上的依赖项标签页显示,目前还没有其他无关的、已发布的包使用 OSTD。
Asterinas 似乎还不能运行任何应用程序。Asterinas 仓库中的Issue #1868 概述了其初步的第一个发行版计划。最初的重点是自定义 initramfs 和一些基本的用户空间应用程序,然后是能够运行 Docker。目前有初步计划基于 Nix 引导一个发行版。值得注意的是(但不足为奇),该 Issue 提到 Asterinas 不支持加载 Linux 内核模块,也从不打算支持。
近期目标
Asterinas 手册的路线图部分指出,近期目标是扩展对 CPU 架构和硬件的支持,并专注于通过为虚拟机提供主机操作系统(host OS)来提高在云中的实际可用性。显然,对 Linux virtio 设备的支持已经存在,因此一个主要的障碍已经清除。特别是,以阿里云(亦称 Alibaba Cloud)形式存在的中国云市场是一个重点。主要计划包括创建一个具有紧凑、经过形式化验证的 TCB,并支持 Intel 硬件中某些可信计算功能容器主机操作系统,以服务于中国云服务。
虽然 Rust for Linux 和 Asterinas 都拥有相似的目标(通过依赖 Rust 的内存安全性提供更安全的内核),但它们的范围和方法有所不同。Rust for Linux 严格专注于为用安全 Rust 编写的新设备驱动程序提供安全抽象,但这使得内核的其余部分保持不变。另一方面,Asterinas 旨在从头开始构建一个全新的内核,将允许 `unsafe` 的核心限制在绝对最小值,然后可以对其进行形式化验证。Asterinas 目前至少专注于容器和云计算,而 Rust for Linux 则旨在造福整个 Linux 生态系统。
尽管明确了云端重点,但还有更多工作正在进行,例如构建对 X11 和 Xfce 的支持。此外,OSTD 当然也可能引起操作系统开发爱好者的兴趣,无论是否与 Asterinas 项目相关,但到目前为止,它仍然不为更广泛的受众所知和测试。
Asterinas 无疑是操作系统开发原则上一个令人耳目一新的创新性方法,它依赖于 Rust 语言和编译器提供的安全和健全性基础。到目前为止,它仍处于早期探索阶段,由热情的中国研究人员推动,尚未看到任何实际应用,但值得我们密切关注。它将如何被 Rust for Linux 团队和更广泛的 Linux 社区所接纳,这将是一件有趣的事情。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~