系统调用闸门
这是整个设计里最关键的一处,也是“兼容是一等能力”这句话的落地方式:三套 ABI 共享同一内核服务面(POSIX 风格服务 + FujoOS 扩展),差别只在编号映射。
三条路为什么不一样
| ABI | 路径 | 为什么 |
|---|---|---|
| Linux x86_64 | 原始 syscall 号 → 服务表,第一公民 | 编号稳定且公开,glibc 直接 syscall,不需要用户态垫片,跑原生速度。 |
| Darwin x86_64 | BSD 空间(0x2000000|nr)+ Mach trap 空间 | 需要一层垫片把 mach_msg 映射到本项目的 IPC 端口——好在端口本身就是幂等的 mach port 语义,映射不别扭。 |
| Windows | ntdll 垫片,再由 kernel32 / ws2_32 等 shim DLL 转调 | Windows 的 syscall 编号不透明、随版本变化,因此不能直接映射;必须停在 ntdll 这一层做转换。 |
| FujoOS 原生 | fujo syscall 号(扩展指令集 / 栅栏 / 能力) | 三套 ABI 之外的扩展面。FUAI 的 0x81xx–0x83xx、网络的 0x8A04–06 都在这条线上。 |
诚实边界:
“Linux 二进制原生运行”指的是被这台机器接受的那部分系统调用,不是整个 Linux 平台。命名表与实现面的差额在兼容层一节逐条列出,没有藏起来。
延伸阅读:
实现面清单在 兼容 · Linux ABI,编号表在 参考 · 系统调用。