maharmstone/moxnox
效率与系统工具一个系统调用仿 NT、能跑 POSIX 软件、以 btrfs 为根文件系统的业余操作系统,适合做 OS 实验和自举演示。
Moxnox 首先是个值得好奇者把玩的系统:如果你想知道一个业余内核能把“NT 底层 + Unix 用户态”做到什么程度,它很合适;如果你需要日常桌面或稳定服务器,请绕开。
解决什么问题
操作系统爱好者通常想做的,是启动一个陌生系统、跑起 bash、git、ssh、Python 或编译器这类熟悉的 Unix 工具,然后观察哪里会出问题。以往这往往意味着先自己编译内核和用户态,才能看到有意义的运行结果。Moxnox 把这一步变成了启动现成的发布镜像:QEMU 镜像加上 GNU 基础系统和一长串移植软件,第一次实验可以直接从探索一个 NT 式底层开始,而不是先搭工具链。最终得到的系统可以登录、在里面编译软件,也能直接暴露缺口在哪里。
有什么不同
它的机制是刻意分层:系统调用和底层接口模仿 Windows NT,但路径风格是 POSIX 的,并实现了 POSIX 2024 中相当大的一部分,fork 也在其中。二进制是 PE 而不是 ELF,C++ 异常走 SEH,POSIX 信号通过 Asynchronous Procedure Calls 投递。这并不是复刻 Windows——作者明确说没有 token、注册表、I/O 完成端口,也没有 NT 那套隐藏的对象管理器路径——所以真正的好处是看 NT 的设计思路被一个 Unix 形态的用户态使用。代价是两边都不完整:约 1,200 个 POSIX 函数中实现了 642 个,AF_UNIX 只完成一部分,信号只在线程从系统调用返回时投递,因此一个死循环程序目前无法被杀掉。
文件系统是另一个鲜明选择。btrfs 是根文件系统,也能在 Linux 上挂载,因此可以直接从宿主机检查磁盘镜像。README 明确说 btrfs 代码只够基本用途、未经充分考验,只应挂载可丢弃的文件系统。这不是脚注,而是决定了实验期间对数据的信任程度。
在发布讨论中,一位评论者(2026-10-28)把吸引力归结为 NT 是“被设计出来的”而非重写现成系统 关于 NT 设计的讨论,另一位则指出 NT 的 I/O 与驱动栈有长期存在的问题 批评性回复。这些只是对 NT 的看法,不是对 Moxnox 质量的判断,但能说明这个项目吸引的是哪类读者。
谁值得试
适合:对操作系统设计、跨平台兼容层或 Windows NT 内核模型感兴趣的人,愿意在受控的 QEMU 环境中实验,并且不介意把数据当作一次性。自带 GNU 基础系统和自举声明让它的价值超过演示内核,因为可以在系统内编译东西。不适合:想要桌面或稳定多用户系统的人。README 列出了没有 GUI、没有多用户和组、没有任何安全性、不支持时区和键盘布局;文档给出的范围就是单用户、单区域设置的 shell 环境。
ARM 硬件是另一类受众。aarch64 版本需要 ARMv8.1 的 LSE 原子操作,所以只覆盖 Raspberry Pi 5 及以后,而 Moxnox 只支持 ACPI 不支持 Device Tree,树莓派还需要额外的 UEFI 固件项目 Moxnox 说明。没有 Pi 5 时,文档提供的替代方案是 QEMU 的 virt 和 sbsa-ref 机型 rpi5-uefi。
使用条件与边界
在 amd64 上所有代码都按 x86-64-v3 编译,README 说这大致覆盖 2015 年以后生产的硬件,并会在检测到 AVX-512 时启用。QEMU 用户必须选择 q35 机型才有 PCI Express。从发布镜像启动是低承诺路径;安装到分区则要用 mkfs.btrfs、efibootmgr 和较新的 btrfs-progs,作者也提醒别把目标设备写错。
长期使用意味着接受文档中的缺口:没有自动启动守护进程,sshd 需要手动启动,而且因为没有密码机制,必须准备 authorized_keys;自举时用户态堆分配器是瓶颈,整机构建会慢;TCP 因为没有协商 MSS 而偏慢。移植软件很多但不是全部,POSIX 覆盖也只是部分。动手前先查 README,不要假设某个 Unix 工具能用,也不要把在意的东西放进挂载的 Moxnox 文件系统。
HotRepo 点评
在唯一记录的榜单日期上,Moxnox 只有 5 天年龄:2026-10-28 的 cpp 新项目榜上,它以 120 个总星数排第 23——这是一次快照,不是增长速度,趋势能否持续尚无法判断。Hacker News 帖子在 2026-10-27 获得 50 分、8 条评论,这只说明讨论量 HN 讨论。试之前先核对 README 的兼容性和缺失功能列表 项目说明;自举是作者的说法,这里没有独立的构建验证。
本文由 AI 根据项目 README 生成,更新于 2026年10月28日,以项目官方文档为准。