星绽(Asterinas)社区高兴地宣布,全新版本 0.18.0 正式发布!

本次发布最大的看点,是星绽已经可以作为基于虚拟机的 Kata Containers 与 Confidential Containers 的客户机 OS ,为这一安全攸关场景提供一个比 Linux 更加安全可靠的内核选项。为此, 0.18.0 新版一口气交付了许多重要特性:命名空间 (新增 IPC 与 cgroup 命名空间,并在 /proc/[pid]/ns 下提供 nsfs)、cgroups (PID 子控制器与部分 CPU 子控制器)、用于与宿主机共享文件系统的 virtio-fs 、为系统引入硬件熵源的 virtio-rng (/dev/hwrng),以及一套完全重写的 vsock,用于打通宿主机与客户机之间的通信。
用户态调试也在这一版本中正式登场。我们实现了 ptrace 系统调用,并配齐了它的核心操作------ PTRACE_SETOPTIONS、PTRACE_SYSCALL 以及 PTRACE_PEEK/POKE。正是这些能力,让 GDB 、strace 等广受欢迎的调试工具得以在 Asterinas 上运行,并配套提供了经过验证的使用文档与 CI 持续保障。
本次发布还对存储栈做了一次重大升级:ext2 文件系统被全面重写 ,块设备层迎来全新的 NVMe 驱动 ,VFS 则新增了 Dentry重校验(revalidate)机制 ,并对页缓存(page cache)进行了重构。几项工作叠加,换来的是一个更可靠、也更有能力的存储栈。
最后,Asterinas NixOS 对真实世界软件的覆盖面大幅扩张------已验证可用的热门软件包超过 100 款 ,其中不乏 Codex 、QEMU 和 Firefox 这样的重量级选手。为了让这份不断增长的"软件清单"持续可用,我们还集成了一系列新的测试套件,包括 kselftest 、xfstests ,以及 Go 、Python 、JDK 各自的标准单元测试套件。
以上是本次发布的几条主线。下面,我们按模块梳理这一版本的主要变更,方便希望深入了解的读者按图索骥。
Asterinas NixOS
-
为 Asterinas NixOS 测试套件搭建框架
-
补充更多已验证应用的文档
-
为热门应用添加测试
-
在 Asterinas NixOS 上运行 Go 标准库测试
-
在 Asterinas NixOS 上运行 JDK 测试
-
在 Asterinas NixOS 上运行 Python 回归测试
-
为虚拟化应用添加 QEMU 测试
-
支持
ARCH_GET_GS/ARCH_SET_GS以运行 Firefox
Asterinas 内核
进程管理:
-
重构
PidFile并新增pidfd_getfd系统调用、新增pidfd_send_signal系统调用,以及让PidFile语义对齐 POSIX -
修复加载损坏 ELF 文件时的错误行为
Ptrace:
-
新增
ptrace系统调用 -
支持基于
ptrace的调试 -
新增
PTRACE_SETOPTIONS、PTRACE_SYSCALL与PTRACE_PEEK/POKE_TEXT/DATA -
为 GDB 与 strace 提供(内核侧)补丁、经验证的使用文档与 CI
-
支持通过
/proc/[pid]/mem强制写入 -
新增 Yama ptrace 作用域
信号与 IPC:
-
修正
sigsuspend并修复其他多项信号行为 -
修复 System V 信号量中的大量 bug
内存管理:
-
尊重
mmap的地址提示(address hint) -
修复多个 MM 系统调用中错误的返回码及其他问题行为
文件系统:
-
VFS
-
新增伪
Path -
重构
Metadata的字段并修正伪文件系统的设备 ID -
为
open/openat实现O_TMPFILE支持 -
实现
pivot_root系统调用 -
重构页缓存实现,并修复一处会将未初始化内存泄露到用户态的页缓存 bug
-
引入
Dentry重校验机制
-
-
virtio-fs
- 在 Asterinas 中支持 virtio-fs
-
Ext2
- 重写 ext2 文件系统
-
Procfs
- 新增
/proc/mounts、/proc/[pid]/auxv、/proc/[tid]、/proc/[pid]/maps的更多条目 以及mountstats
- 新增
套接字与网络:
-
重写 vsock
-
新增初步的 IPv6 支持
-
在缺少
CAP_NET_BIND_SERVICE时拒绝绑定特权端口 -
修复若干 UDP 问题
命名空间与 cgroups:
-
支持 nsfs(
/proc/[pid]/ns) -
支持 IPC 命名空间
-
支持 cgroup 命名空间
-
实现 cgroup PID 子控制器
-
新增部分 cgroup CPU 子控制器,提供
cpu.stat统计信息 与 占位的cpu.weight/cpu.max限制文件 -
绑定挂载命名空间文件
安全:
-
实现 capabilities 以及以 root 身份执行程序
-
实现 capability bounding set 支持
-
修复凭证相关的系统调用并加以清理
-
新增初步的 LSM 框架
设备:
-
块设备与 NVMe
- 新增 NVMe 驱动
-
PCI
-
-
改进 PCI 设备枚举与探测
-
从 FDT/ACPI 获取 PCI 总线范围,并在 x86 上支持 PCI ECAM
-
- TTY 与控制台
-
-
支持多 TTY
-
支持 NS16550A UART 控制台、
/dev/ttyS0以及console=ttyS0 -
键盘相关增强
-
- VirtIO
-
-
支持
virtio-rng并以/dev/hwrng暴露 -
将
virtqueue视为不可信,并在aster-virtio中使用可失败的内存分配
-
- TDX
-
- 新增 TSM-MR(测量寄存器)sysfs 支持
测试:
-
接入 Linux kselftest 测试套件
-
接入 xfstests 测试套件
其他:
-
新增通用系统调用表
-
引入内核参数框架
Asterinas OSTD 与 OSDK
OSTD:
-
用 OSTD 自有的日志 API 替换
logcrate -
基于 zerocopy 重构
Pod -
重构 DMA API
-
新增用于类型化内存拷贝的 Memcpy/Memset trait 框架
其他:
- 新增 ARM(aarch64)上的 Docker 开发环境
Asterinas Book
-
新增编码规范
-
新增 OSTD 的健全性(soundness)分析
-
新增 Kata Containers 相关文档
-
新增机密容器(CoCo)相关文档
致谢贡献者
本次发布离不开 36 位贡献者的辛勤付出。感谢你们出色的工作!
-
Ruihan Li(191 commits)
-
jiangjianfeng(92 commits)
-
Wang Siyuan(72 commits)
-
Qingsong Chen(64 commits)
-
Chen Chengjun(59 commits)
-
Tate, Hongliang Tian(52 commits)
-
Tao Su(46 commits)
-
Zhang Junyang(36 commits)
-
zjp(26 commits)
-
li041(23 commits)
-
Xinyi Yu(23 commits)
-
Marsman1996(18 commits)
-
wyt8(17 commits)
-
Aaron Chen(9 commits)
-
zzj-5341(9 commits)
-
Chaoqun Zheng(8 commits)
-
Hsy-Intel(7 commits)
-
Cautreoxit(4 commits)
-
Chao Liu(4 commits)
-
Junrui Luo(4 commits)
-
Ray Lee(4 commits)
-
rikosellic(4 commits)
-
TankTechnology(4 commits)
-
Zhenchen Wang(4 commits)
-
Yuke Peng(3 commits)
-
Zhihang Shao(3 commits)
-
yyda(3 commits)
-
Arthur Paulino(1 commit)
-
Jakob Hellermann(1 commit)
-
Linermao(1 commit)
-
lxh(1 commit)
-
Shen Bowen(1 commit)
-
Wei Zhang(1 commit)
-
wrj97(1 commit)
-
YanLien(1 commit)
-
zzjrabbit(1 commit)
Asterinas 是一个用 Rust 编写、兼容 Linux ABI 的框内核(framekernel)操作系统,致力于在保持高性能的同时,提供更强的内存安全与可靠性保障。欢迎访问我们的 GitHub 仓库,给我们点亮一颗 Star,或加入社区一起共建!
项目仓库
Gitub: