🦀 Koros vs ArceOS 架构对比

两个四架构 Rust OS 的设计哲学差异 — trait-object dispatch vs feature-gated modules

📊 基本信息

维度KorosArceOS
定位教学/研究型微内核 + Type-1 Hypervisor模块化 Unikernel(实验性通用 OS)
灵感来源独立设计,参考 rCore / polyhalUnikraft(C 语言模块化 unikernel)
语言Rust #![no_std]Rust #![no_std]
架构支持riscv64, x86_64, aarch64, loongarch64riscv64, x86_64, aarch64, loongarch64, arm
Crate 数量9(workspace)15+ modules + 2 api + 2 ulib
成熟度早期(单人开发,无 CI)较成熟(多人社区,有 CI/CD)
用户态❌ 尚未实现(M4/M5 规划中)✅ 有 axstd/axlibc + POSIX API
网络栈❌ 无✅ smoltcp TCP/UDP
Hypervisor✅ korhv(AMD SVM / EL2)❌ 无
形式化验证✅ Verus 验证分配器❌ 无

🏗️ 架构抽象方式(核心差异)

Koros:Runtime Trait-Object Dispatch

kor 定义 ArchProvider trait → kor-arch 每架构一个 impl → 启动时 install() 注册到全局 → 下游通过 kor::arch::current()&dyn ArchProvider)调用。

共享 crate 中零 #[cfg(target_arch)],架构差异完全封装在 kor-arch

ArceOS:Feature-Gated Modules + cfg

axhal 是单个 HAL crate,内部用 cfg(target_arch) 选择平台实现(依赖 axplat-x86-pc / axplat-aarch64-qemu-virt 等外部 crate)。模块通过 Cargo features(smp, irq, paging 等)条件编译。

axhal 内部有大量 cfg,但通过 axplat 外部 crate 抽象平台差异。

📦 Crate 结构对比

Koros — 9 个 crate

Crate职责
kor最底层:trait + 注册表
kor-frameBuddy 物理帧分配
kor-allocSlab 堆分配器
kor-fsVFS 基础设施
kor-ext2ext2 实现
kor-ramfs内存文件系统
kor-sched抢占式调度器 + 同步原语
kor-arch所有架构代码
koros / korhv二进制组合根

ArceOS — 15+ modules

Module职责
axhal硬件抽象层 (HAL)
axruntime运行时引导 + 初始化
axalloc内存分配器
axmm内存管理
axtask任务/线程管理
axsync同步原语
axfs文件系统
axnet网络栈 (smoltcp)
axdriver设备驱动框架
axdisplay显示/GPU
axdma / axipiDMA / IPI
arceos_api统一 API 层
axstd / axlibc用户态库

🔧 关键设计决策对比

设计决策KorosArceOS
架构分发方式 运行时 trait object(&dyn ArchProvider 编译时 cfg + axplat 外部 crate
共享代码中的 cfg ❌ 完全禁止 ⚠️ axhal 内部有大量 cfg
添加新架构 kor-arch/src/ 加目录,impl trait axplat-xxx crate + axhal 内加 cfg 分支
模块化方式 Cargo workspace crate 级别隔离 Cargo features 条件编译
平台抽象 kor-arch 内部实现 外部 axplat 系列 crate
组合方式 二进制 crate(koros)手动组装 axruntime 统一引导 + features 控制
用户态支持 规划中(M4/M5) axstd / axlibc / POSIX API
调度器 单一抢占式多核调度 FIFO / RR / CFS 可选
网络 ✅ smoltcp TCP/UDP
Hypervisor ✅ korhv(SVM/EL2)
形式化验证 ✅ Verus
CI/CD ❌ 无 ✅ GitHub Actions

💡 设计哲学差异

Koros 的哲学:组合 + 运行时多态

核心信念:架构差异是运行时关注点,不是编译时关注点。通过 trait object 在启动时注册一次,之后所有代码走统一接口。代价是一次虚函数调用开销(可忽略),收益是共享代码完全干净、可独立测试。

另一个独特之处:双二进制复用 — 同一套底层 crate 同时支撑内核(koros)和 Hypervisor(korhv),证明抽象层的通用性。

ArceOS 的哲学:Feature 矩阵 + Unikernel

核心信念:OS 应该像库一样按需组合。受 Unikraft 启发,通过 Cargo features 控制哪些模块被编译进来。不需要网络?不开启 net feature,axnet 完全不参与编译。代价是 cfg 复杂度,收益是极致的可裁剪性。

独特之处:用户态支持 — 有 axstd(类 std)和 axlibc(C 兼容层),可以运行 Linux 应用(如 httpserver)。

⚖️ 优劣总结

Koros 优势

• 架构抽象更干净(零 cfg)
• 代码可读性高(每个 crate 职责单一)
• Hypervisor 复用验证了抽象通用性
• 形式化验证覆盖关键模块
• 添加新架构只需 impl trait

ArceOS 优势

• 功能更完整(用户态/网络/显示)
• 社区更成熟(多人协作/CI)
• Unikernel 可裁剪性强
• POSIX 兼容层可运行真实应用
• 调度器选择更多(FIFO/RR/CFS)

🎯 结论:不是竞争,是不同路线