ABI 与系统调用¶
入口与错误¶
x86_64 使用 Linux syscall 编号和寄存器约定:rax 为编号,参数为 rdi/rsi/rdx/r10/r8/r9,返回负 errno 表示失败。未知接口返回 ENOSYS; 应用不能从一个编号存在推断其全部 Linux 行为。POSIX 用户态应优先使用 libc。 指针、容量、枚举、版本及授权由内核最终检查。
系统调用声明与编号位于内核导出的 UAPI,公开扩展位于主仓 include/reliefos。 用户态只消费 headers_install 的白名单结果,不复制内核私有布局。
版本与兼容¶
公开结构用定宽字段;扩展要处理调用方大小、版本和错误,不传内核指针。
规范扩展库为 libreliefos.so.2,旧 libleonos.so.2 是独立兼容库,
不能简单把旧库变成新库符号链接。既有 leonos 转发头、符号与冻结协议值在
明确支持处保留,不代表允许新增旧命名接口。
早期产品激活接口已退役:不再提供联网验证、离线密钥、许可证状态或对应的 旧名称别名,SDK 也不再导出这些声明。依赖旧激活接口的应用需要移除调用后 重新编译;兼容验证将这组接口列为已退役,要求当前库中不存在这些符号。 历史 ABI 基线保留原记录。独立的硬件信息接口与 标准 DMI/sysfs 查询继续提供,不涉及产品激活。
驱动服务表当前为版本 2、304 字节;测试保留 168 字节历史前缀并单独冻结 版本 2 的追加字段。旧版本驱动描述符在初始化前拒绝,不能将前缀保留视为 旧驱动二进制兼容;见 支持范围与已知限制。 调用约定一致不等于所有结构布局或行为已完整认证。
进程、时间与描述符¶
execve/execveat 的参数、环境和初始栈限制由 ReliefNT 的现行契约定义;
fd 时间戳操作按打开的 inode 身份执行。文件访问模式、O_PATH 和能力不能绕过。
vDSO 提供已实现的时间接口,失败或不支持的时钟保留 syscall 路线。
源文件与运行模型见内核 Documentation/userspace-api/。
X11 应用通过 Xorg 通信。未知或旧兼容路径不能当作新的公开接口。
兼容名称分类¶
品牌检查对旧名称按精确文件路径登记,不使用整目录豁免:
compatibility:已有符号、SONAME、磁盘/协议字节值及转发头。
history:明确的历史事实或源码迁移映射,不是当前产品显示名。
external-url:实际仍使用的外部 URL,不能未经迁移擅自改名。
attribution:第三方作者、许可和来源原文。
migration:尚待完成的过渡项,严格发布检查必须单独审阅。
文档迁移只移除已删除文件的登记;无关的既有失败不因目录改名而豁免。
旧窗口接口移除¶
旧自研窗口、鼠标区域、外观广播和 UI 工具包导出已移除,不再提供转发或空实现。
历史 ABI 快照保持不变;集成验证要求已移除的图形接口不存在,并继续检查
其他接口的布局、符号类型和 SONAME。进程/时钟与 fbdev 辅助声明分别位于
<reliefos/system.h> 和 <reliefos/fb.h>,应用必须重新构建。
独立安装实例的引导接口¶
<reliefos/bootloader.h> 保持原有 reliefos_boot_install_options 布局及旧接口,
新增 reliefos_boot_prepare_instance 创建带所有权标记的根 PARTUUID 命名目录,
reliefos_boot_validate_instance 只读核对该目录和物理 ESP 的实际 inode,
reliefos_boot_install_instance_at_root 发布实例内核、菜单及独立 EFI 文件。
新接口显式传入物理 ESP;boot_dir 可为实例目录的 bind 挂载点。
目录遍历拒绝 symlink,未知目录内容不能被认作本安装器所有。
低层内核包发布还会核对实例标记中的 PARTUUID 与实际根设备,防止跨实例更新。
原有直接挂载 ESP 到 /boot 的系统继续使用旧接口,不改变其现有文件布局。
第三方库拆分¶
zlib、libpng、mbedTLS 3 已从扩展库的对象集合移到各自官方共享库;公开的 ReliefOS
接口与旧 leonos 别名继续保留,链接器应显式链接使用的第三方库。旧扩展库偶然
导出的厂商内部符号、旧私有 mbedTLS 配置及 sqlite.so.3 VFS 不属于稳定兼容
接口。使用这些实现细节的程序须用 SDK 里的匹配头文件重编译;SQLite 使用标准
libsqlite3.so.0 POSIX VFS。历史 ABI 快照保持原样,兼容检查继续覆盖第一方接口。