StarryOS Linux syscall 兼容性准则
1. 适用范围与阅读要求
本准则用于实现、修改和评审 StarryOS 对用户态可见的 Linux syscall / ABI 语义。
只要改动或需求会影响用户态观察到的 syscall 行为,就必须完整阅读本文件。判断依 据是语义而不是路径:即使改动位于 task、VFS、namespace、signal、socket、credential、内存管理或其他 helper 中,只要它改变 syscall 的参数解释、返回值、errno、权限、共享关系或状态转换,本准则仍然适用。
以下情况通常不适用:改动只涉及内部重命名、格式化、无行为变化的重构,且能够证明用户态 ABI 和错误路径不变。评审 checklist 必须记录适用或不适用的具体理由。
2. 兼容目标
StarryOS 的 syscall 兼容目标不是“常见程序能够运行”,而是让相同前置状态和输入在 StarryOS 与目标 Linux 版本上产生一致的用户态可观察结果:
- syscall 编号、参数宽度、signedness、结构体布局和返回值 ABI 一致;
- 成功结果、失败 errno 以及多个错误同时成立时的错误优先级一致;
- credential、capability、namespace、线程和进程资源共享语义一致;
- 阻塞、唤醒、restart、状态消费和并发可见性一致;
- 支持的 architecture ABI 一致,或明确返回 Linux 对应的 unsupported 错误;
- 测试能够在错误实现上稳定失败,而不只是覆盖成功路径。
如果 Linux 版本之间存在行为差异,必须记录用于比对的 Linux 版本或 commit。不得把某个发行版、libc wrapper 或偶然实测结果无条件推广为所有 Linux 版本的契约。