Asterinas 项目表示,在 2026 年 10 月 13 日发布的 0.19.0 中,它已在 Asterinas NixOS 环境内构建自身内核,并通过嵌套 QEMU 启动新内核。这表明,在操作系统内部重新构建该操作系统所需的开发工具已经能够运行。

这一过程使用 Nix 配置依赖关系与开发环境,使用 Rust 构建工具 Cargo 和编译器 rustc 构建代码,并使用 QEMU 运行虚拟机。10 月 15 日查阅的 Asterinas Book 明确指出,该流程仍处于实验阶段。验证目标只有 x86-64,在嵌套 VM 中确认的范围也仅到新内核成功启动。

占用构建内存的文件缓存

测试这条构建路径需要一定的资源余量。Asterinas Book 要求使用 x86-64 Linux 主机,并预留约 50 GiB 的可用磁盘空间。主机需要提供 KVM,这是 Linux 中用于通过硬件加速运行 VM 的功能。运行在其上的外层 Asterinas VM 将分配 40 GiB 内存和 4 个虚拟 CPU。

文档称内核构建完成时的内存使用量会达到约 31 GiB。列出的原因之一是,即使内存已经不足,文件缓存仍未得到回收。为再次读取文件时复用而保留的数据,会与构建任务争用内存。在文档给出的 32 GiB 内存和 8 个虚拟 CPU 配置下,构建接近结束时也曾出现内存不足。

这两种配置同时改变了内存和 CPU 数量,因此并不是只改变内存大小的比较。约 31 GiB 的使用量也难以仅解释为编译器本身所需的内存。尽管自身构建已经成功,在内存紧张的环境中,缺少缓存回收机制仍可能成为影响构建可行性的限制。

VMX 支持与 /dev/kvm 之间的差距

本版本对 Intel VMX 的支持,是利用 CPU 硬件虚拟化功能运行客户机的基础。项目表示,它实现了客户机 CPU 状态管理、将客户机内存地址映射到宿主实际内存的 EPT,以及把控制权从客户机交还宿主的 VM-exit 路径等功能。

处理特权指令的底层功能由 OSTD 框架负责,上层执行策略则由内核负责。不过,这套基础与供 QEMU 等工具使用的 KVM 兼容 /dev/kvm 接口仍处于不同的实现阶段。

Asterinas Book 明确指出,由于 Asterinas 尚未提供 KVM,嵌套 VM 通过 QEMU 软件仿真运行。由外层 Linux 主机使用 KVM 运行 Asterinas,与由 Asterinas 为内层 VM 提供硬件加速,是两种不同的支持。

2026 年 8 月 5 日批准的虚拟机监控器 RFC 包含 KVM 兼容接口的设计,但仅批准设计并不能说明该接口已在本版本中实现。

嵌套 VM 中验证的范围仅到启动

嵌套 QEMU 无法在 Asterinas 内打开所需的监听套接字,因此在关闭网络和屏幕输出的情况下运行。嵌套 VM 会输出启动成功消息并退出,但文档指出,执行该操作的 make run_kernel 命令仍不会返回。

Asterinas 内的 Nix 构建也以具有管理员权限的 root 身份运行。由于不支持所需的隔离功能,构建过程不使用将构建任务限制在独立环境中的沙箱。

这些结果表明相当一部分开发工具可以在 Asterinas 上运行,但并未验证常规的嵌套开发会话或隔离的多用户构建。如果资源条件得到满足,可以把自身构建路径作为进一步考察的起点。

时间也是需要考虑的条件。文档说明,安装约需 30 分钟,首次构建根据主机性能可能需要 1 个多小时。

准备开发 Shell 后检查嵌套启动

运行下面的命令前,需要完成 Asterinas Book 所述的全部安装与构建流程。流程是在分配 40 GiB 内存的外层 VM 中准备开发 Shell 并构建内核,然后用以下命令检查嵌套启动。

make run_kernel \
  ENABLE_KVM=0 \
  NETDEV=none \
  QEMU_DISPLAY=none \
  MEM=2G \
  AUTO_TEST=boot

ENABLE_KVM=0 表示不使用硬件加速,NETDEV=none 和 QEMU_DISPLAY=none 会关闭网络和屏幕输出。MEM=2G 是内层 VM 的内存设置,AUTO_TEST=boot 则选择启动测试。

文档给出的成功消息是 "Successfully booted."。即使嵌套 VM 在这条消息之后退出,外层 make 命令仍不会返回,这一限制也需要一并考虑。

接下来值得关注的变化有两个:文件缓存回收能否降低自身构建的内存负担,以及兼容 KVM 的接口能否在基于 VMX 的功能之上实现。前者会改变开发工作所受的资源限制,后者则会改变与现有虚拟化工具集成的能力范围。

Asterinas 0.19.0 已能成功完成自身内核构建和启动,开发环境因此取得进展,但内存回收和 KVM 兼容宿主支持仍是待完成事项。