豫言双架构裸机原型
当前系统总览(先看这里)
豫言操作系统现在是一个可以启动、可以交互、有持久文件系统的单核系统,ARM64 与 AMD64 都在 QEMU 里通过自动验收:
| 层 | 内容 | 文档 |
|---|---|---|
| 内核 | 手写机器码(由豫言源生成):页权限隔离、定时抢占、两个任务槽的创建/等待/终止/回收/复制、单条整数消息邮箱与阻塞接收、动态内存块(线性内存可增长)、设备窗口与 IOMMU 隔离、Virtio 设备的用户态访问、控制台输入环与 Ctrl-C 标志、实时钟(墙钟服务:ARM64 读 PL031、AMD64 读 CMOS) | 本目录各专题文档 |
| 用户态执行器 | 客体二号:用底层模式的普通豫言写成的 WasmGC 解释器(栈机、保守标记清扫回收、异常、尾调用、软浮点);在用户态运行普通豫言程序 | 客体二号 |
| 文件系统 | 用户态 Virtio 块驱动 + 双区追加日志的持久文件系统(多层目录、崩溃安全的提交扇区、紧缩),离线造盘工具 yy造盘 | 客体二号、文件系统提交日志 |
| 壳 | 普通豫言写的默认命令壳(壳/壳。豫):目录、切换、列、读、写、追加、复制、移动、建、删、运行、脚本、加、回显、设、取消、环境;命令输出可用 >、>> 写入文件,运行 可用 < 文件 重定向标准输入、甲 \| 乙 \| 丙 串成顺序管道;子进程里也能读写文件(由壳代办);Ctrl-C 打断正在运行的程序(退出码 130)、放弃正在敲的一行(控台输入)| 客体二号 的验收一节 |
| 进程 | 同步子进程:复制任务,子任务把磁盘上的程序换进执行器,父任务等待退出码;标准输入重定向、环境变量随复制交给子任务 | 同上“子进程”“标准输入重定向、环境变量与顺序管道”两节 |
| 动态装载 | 多实例:运行中从盘上装载 Wasm 模块,跨模块导入导出与双向回调(含延迟链接) | 同上“多实例”一节 |
| 数值 | 小数运算走 IEEE 754 软浮点(加减乘除、转换、定点六位转串、%.17g 精确表示、串转小数);Wasm 的 f32/f64 全部指令(比较、算术、取整、开方、转换、饱和截断)同样由软浮点实现,逐位对照 V8 | 同上“软浮点”“Wasm 浮点指令”两节 |
构建并运行(在仓库根目录、已安装 QEMU 时):
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 豫言操作系统/裸机/豫言系统。豫 --编译器 ./yy4_bs.wasm --输出 yy豫言系统.wasm
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node 豫言操作系统/宿主/节点/宿主.cjs yy豫言系统.wasm 运行 --架构 兼容六十四 # 交互;缺省带上示例程序;壳里输入“退出”结束,Ctrl-C 打断运行中的程序,卡死时按 Ctrl-A 再按 X 强制结束
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node 豫言操作系统/宿主/节点/宿主.cjs yy豫言系统.wasm 构建 --预置 某目录树 # 只造镜像与盘并打印 QEMU 命令
--预置 缺省就是 豫言操作系统/裸机/示例(写 --预置 无 得空盘),它指向的目录树整棵放进盘里(盘缺省 65536 个扇区即 32 MiB,--盘容量 可改);树里以 。豫 结尾的文件先编成程序(/程序/你好。豫 成 /程序/你好.wasm),以 .底层库 结尾的标记文件构建同名底层包(/库/库甲.底层库 成 /库/库甲.wasm),壳里用 运行 /程序/你好.wasm 参数… 启动,普通豫言程序可用 豫言_加载模块/豫言_调用导出 装载并调用库。用法见 豫言操作系统/裸机/豫言系统。豫;可运行的示例程序(你好、回声、质数、斐波那契、统计、复制文件、行数、环境变量)见 示例。
验收:
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 豫言操作系统/裸机/普通豫言验证。豫 --编译器 ./yy4_bs.wasm --输出 yy普通豫言验证.wasm
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node 豫言操作系统/宿主/节点/宿主.cjs yy普通豫言验证.wasm # 42 项 × 双架构,约 12 分钟;--只验 普通-壳- 只跑一类
覆盖:普通豫言程序(打印、列表、闭包、异常、回收压力、小数、浮点指令、表指令)、壳(基本、文件命令、运行子进程、子进程的文件、输出重定向、脚本、示例程序、环境变量与管道、子程序崩溃隔离、磁盘上的大程序)、语言测试集 应用/豫言编译器/测试/网页汇编 的十二例、磁盘(跨重启读写、离线造盘)、动态装载(含回收压力)、内核服务探针。内核本身另有一套 yy裸机验证(下文,三百余项)。
普通豫言壳在拆词前去掉行模式读入所含的末尾换行,使命令参数和 退出 恢复准确解析。交互就绪与模拟器完成的旧等待上限已各放大一百倍,便于检查较长的壳测试;--只验 壳-基本、--只验 壳-运行、--只验 壳-子进程文件 在双架构 QEMU 通过。验证器仍按输出与期望逐字比较。
WASI:WASI preview1 兼容层由 客体二号/WASI名称。豫 与 WASI分派。豫 部分接入,旧实现保存在 WASI库 供参考。22 个样例各至少在一个原生目标运行过;裸机子任务的随机数熵源与底层文件代办仍待实现。
当前限制:内核只有两个任务槽,所以一次只能有一个子进程、子进程不能再起子进程,管道也只能是顺序的(各段一个接一个运行,前一段必须自己结束);子进程的文件操作由初始任务经邮箱代办(每条消息三个字节,量大很慢);实时钟只有秒的精度与 UTC;跨实例只传数值;没有 SIMD。
已实现 ARM64、AMD64 的 QEMU 裸机启动验证。标准 Wasm 整数核心模块经过自有提前编译后,在真实用户态执行;最小特权核心提供页权限、同步异常入口、定时中断和受控服务。机器字节、重定位、启动头和页表全部由豫言生成,没有汇编源文件,也不调用外部汇编器或链接器。
内核是单核微内核:两任务池的运行时创建、等待、终止、回收、复制及消息通信,见双任务调度;不指定输入模块时,生成的镜像默认启动早期的整数命令壳(用户命令壳)。以下各节描述内核的最小验证器 yy裸机验证:直接把标准 Wasm 整数模块提前编译成机器码运行,不经用户态执行器。普通豫言程序(完整 WasmGC)、持久文件系统、以普通豫言写的壳、子进程与动态装载都在用户态执行器 客体二号 上,见上文总览,各阶段实测证据见验证记录。
一条命令验证
在仓库根目录、安装 QEMU 后运行:
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 豫言操作系统/裸机/验证。豫 --编译器 ./yy4_bs.wasm --输出 yy裸机验证.wasm -j 24
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node --no-liftoff 豫言操作系统/宿主/节点/宿主.cjs yy裸机验证.wasm
验证器使用豫言异步子进程,每项约三十秒等待预算;超时按本轮独立进程号文件终止模拟器。全部镜像、输入模块和串口日志保存到新建临时目录,最后打印路径。测试用到宿主的 mktemp、dd 和 /bin/kill;dd 只用于负对照改动页表或中断标志,不参与正常镜像生成。
2026-09-28 在 Node 26.3.0 上,--no-liftoff 使体积很大的「客体整数执行」夹具直接经优化编译器编译,避开 Liftoff 对单个函数的代码空间限制;上述命令的 380 项双架构验证全部通过,运行约 80 秒。
最初的六项基础检查如下;当前验证器另包含定时器、抢占、结构控制、存储、算术及外部模块等扩展用例,具体数量由运行结果计算:
| 检查 | 客体必须发生的行为 | |---|---| | 正常 | 在用户态完成函数调用、局部更新、溢出回绕及乘法核验,然后正常退出 | | 隔离 | 完成同样核验后,读取内核私有页,产生权限异常;核心核对异常来源及地址 | | 错误结果 | 将预期四十二改为四十三,核心必须报失败 | | 放开权限 | 只改受测页表的用户访问位;探测不再陷入,验证必须报失败 | | 操作数栈越界 | 保持 Wasm 类型正确,压入超过客体栈限额的值;运行时必须报失败 | | 调用栈越界 | 有效模块进入递归,调用帧越界前必须报失败 |
检查同时匹配退出码和串口文字;负对照禁止出现成功标记。AMD64 使用模拟退出设备:通过退出码为三十三,拒绝为三十五。ARM64 使用半主机退出:通过为零,拒绝为一。串口输出都来自客体实际访问设备;退出机制仅用于结束模拟,不承担程序计算或打印。
单独生成镜像
node 豫言操作系统/宿主/节点/宿主.cjs yy3_bs.wasm 豫言操作系统/裸机/入口。豫 -o yy豫言裸机.wasm
node 豫言操作系统/宿主/节点/宿主.cjs yy中文网页汇编.wasm 编码 豫言操作系统/裸机/启动验证.网页汇编。豫 yy裸机客体.wasm
node 豫言操作系统/宿主/节点/宿主.cjs yy豫言裸机.wasm 臂六十四 yy裸机客体.wasm yy臂正常.elf 正常
node 豫言操作系统/宿主/节点/宿主.cjs yy豫言裸机.wasm 兼容六十四 yy裸机客体.wasm yy兼容正常.img 正常
末参数可改为「隔离」,生成附带用户态内核页读取探针的验证镜像。探针是平台验证桩,不是私有 Wasm 指令。正常镜像不包含该探针。生成器只编译输入,不预先运行输入程序;计算结果在模拟的 CPU 上形成。
ARM64:
qemu-system-aarch64 -machine virt,gic-version=2,virtualization=off,secure=off \
-cpu cortex-a53 -accel tcg -m 128M -smp 1 -display none -monitor none \
-serial stdio -no-reboot -semihosting-config enable=on,target=native \
-kernel yy臂正常.elf
AMD64:
qemu-system-x86_64 -machine pc -accel tcg -m 128M -smp 1 \
-display none -monitor none -serial stdio -no-reboot \
-device isa-debug-exit,iobase=0xf4,iosize=0x04 -kernel yy兼容正常.img
正常串口输出:
豫言核心启动
用户程序已运行
用户态计算验证通过
模块契约与实现边界
输入必须导出无参数、无结果的「启动」。只允许以下函数导入,名字和签名均检查:
| 模块与名称 | 参数、结果 | 实现 | |---|---|---| | 平台/写字节 | 一个三十二位整数,无结果 | 经系统调用访问串口,检查字节范围 | | 平台/核验 | 两个三十二位整数,无结果 | 比较实值与期值,失败立即停止验证 | | 平台/用户态 | 无参数,一个三十二位结果 | 核心先检查保存的硬件用户态状态,才返回一 | | 平台/读字节 | 无参数,一个三十二位结果 | 非阻塞读取串口,无数据返回负一 | | 平台/时钟滴答 | 无参数,一个三十二位结果 | 返回已处理的定时中断计数 | | 平台/任务编号 | 无参数,一个三十二位结果 | 返回当前静态任务编号 | | 平台/任务状态 | 一个三十二位参数、一个三十二位结果 | 查询运行状态位,无效编号返回负一 |
当前启动验证协议要求正常结束前恰好完成四次核验;这属于测试协议,不是通用系统调用标准。不能将这些宿主接口误称为 WAT 规定的操作系统接口:模块导入及类型是标准的,平台服务语义由本项目定义。
函数参数、结果置于独立的非 GC 操作数栈,局部变量置于真实调用帧。两套后端均支持整数核心的所有现有指令。操作数栈限一百二十八千字节,调用栈约一百二十八千字节,二者有间隔;压值和分配调用帧时检查边界,超限进入失败路径。函数参数与附加局部合计至多一百二十八项;用户代码至多一兆字节。尚未做寄存器分配或跨函数栈检查消除。
ARM64 以自有 ELF64 头装载,在一级异常层安装页表和异常向量,通过异常返回进入零级用户态。AMD64 以多重引导首版地址头装载,从三十二位保护模式切换到六十四位长模式,安装页表、全局描述符、任务状态段及中断门,再进入第三特权环。QEMU 提供镜像装载入口;尚无磁盘启动扇区或实机固件移植。
两端采用静态两兆字节页映射。AMD64 核心位于低两兆,用户域位于二至四兆;ARM64 核心位于 0x40000000 区域,用户域位于 0x40200000,另有 0x40400000 私有受测页。串口只由特权核心访问。用户代码与用户栈尚在同一可读写用户映射中,未实现页级写入/执行互斥;这些限制不影响当前内核页隔离检查,但还不足以成为不可信程序的生产沙箱。
镜像生成阶段可以在无工具搜索路径时运行。生成器自身目前仍由既有豫言编译器构建;通过 Wasm 执行生成器也仍借助现有宿主。不能把客体无外部编译器与库依赖等同于整个自举工具链已经独立。
代码与规范
豫言操作系统/裸机/库/裸机后端/机器编码。豫:字节序、两遍标号解析和重定位。整数降级。豫:标准整数模块验证、函数提前编译和平台导入桩。臂核心。豫、兼容核心。豫:平台启动、保护状态、异常和镜像装配。任务上下文。豫、任务调度。豫:统一整数帧和静态任务切换。验证。豫:双架构正常及负对照回归。
规范依据:QEMU 臂虚拟平台、多重引导地址头、Intel 系统与指令手册、Arm 异常层切换说明。本次环境版本及验证记录见同目录验证稿。
已新增用户态结构化分支、循环、跳转和返回,双架构二十项裸机检查通过,详结构控制。后续定时中断和抢占进展见定时中断与双任务调度。
新增非阻塞控制台读字节,双架构二十四项验证通过,详控制台输入。
最新已接入双任务的用户故障退出与退出码查询,见故障隔离。当前双架构验收为 138 项(包含可选外部 C 模块);该报告亦记录了避免旧宿主编译缓存误验的冷构建方法。
阻塞等待和退出唤醒已接入,最新双架构 148 项通过,见阻塞等待。
新增受所有权约束的任务终止,双架构 154 项通过,详主动终止;动态创建和资源回收仍待实现。
已接入运行时任务复制,双架构 160 项通过,详运行时创建。当前是单槽静态内存池,尚无动态模块加载和资源复用。
当前已完成固定任务池中的创建、等待、终止、回收与安全复用,双架构 172 项通过,详任务回收。通用多任务分配、IPC、动态程序加载、Shell 和持久化文件系统继续按总目标推进。
已加入受所有权和代际句柄约束的双向整数消息邮箱,双架构 180 项通过,详任务通信。接收暂为非阻塞,后续继续扩展用户态服务所需能力。
阻塞消息接收、唤醒与对端退出处理已通过验收,双架构共 192 项,详阻塞通信。通用调度、字节传输和用户态服务仍继续推进。
默认镜像生成入口现为常规运行。 省略第四参数或使用“运行”即可运行不含测试核验的程序;“正常”“隔离”仍保留旧验收含义。常规退出与完整退出码传递详常规运行,双架构 210 项通过。这不是完整高级豫言或 WasmGC 的运行支持。 当前 IOMMU 工作已扩展到用户线性内存的连续页映射:首部、末部、上界、只读保护和用户态可见性均通过两架构验收,完整回归共 262 项。详用户设备内存。默认用户态 Shell 已具备任务交互;生产 Virtio 块驱动、文件持久化、动态执行器和 WasmGC 仍未完成。 用户态 Virtio 寄存器访问和“设备驱动”构建方式已接入,两架构完整回归共 268 项通过,详用户设备寄存器。设备初始化与内存授权由内核控制,用户程序已能协商特性并配置队列;磁盘队列传输、退出清理和文件持久化尚未完成。 用户态 Virtio 块读写、显式刷新与跨 QEMU 启动的数据保留已通过两架构验收,完整回归共 280 项,详用户磁盘读写。文件目录、Shell 文件命令和设备服务进程化仍待实现。 文件系统的用户态提交日志已通过两架构恢复、未完成尾部、损坏拒绝和容量边界验证,完整回归共 294 项,详文件系统提交日志。目录、文件名、删除、空间回收和 Shell 文件命令尚未完成。 用户态文件目录已支持创建、嵌套目录、查找枚举、内容替换、分段读取和删除,跨启动保持句柄代际,完整回归共 308 项。详用户文件目录。Shell 文件命令、独立文件服务与日志磁盘空间回收仍待实现。 默认用户态 Shell 现已接入文件、目录、路径与显式格式化命令,同时保留任务及输入处理,完整回归共 314 项。详命令壳文件操作。日志空间回收、独立文件服务、动态程序加载和 WasmGC 仍待完成。 设备持有者的自然、显式、陷阱和硬件缺页退出现已执行内核授权撤销、复位与 IOMMU 清理;子任务结束不误撤父设备。完整回归共 326 项,详设备退出清理。随机在途压力、一般资源池、磁盘空间回收、动态加载和 WasmGC 仍待完成。
客体用户态的有界字节读取与三十二位变长整数解码已通过两架构验证,完整回归共 328 项;另以独立标准 Wasm 引擎验证并执行新增用例。详客体字节读取。这只是动态加载的读取基础,尚未接入默认 Shell,不代表模块验证、动态执行或 WasmGC 已完成。
客体模块头、区段顺序与边界、UTF-8 名字和选段隔离已通过两架构测试,完整回归共 330 项。详客体模块区段。索引仅描述区段位置,段内容、指令和实例化仍待验证与实现,尚不能加载执行外部程序。
客体整数函数索引已支持类型、函数导入、定义、局部声明、导出和启动签名检查,完整回归共 332 项。详客体函数索引。代码仍待指令验证,非函数资源也尚未解析完整;索引成功不会授予执行许可。
客体内存、全局与数据段读取及独立工作区初置已通过两架构验收,完整回归共 334 项。详客体资源初置。初置检查全部主动段后才复制数据;尚不执行函数,完整指令验证、实例化与动态执行仍待实现。
客体 i32 函数体已可解码为指令记录,检查结构与立即数并回填条件出口,完整回归共 336 项。详客体指令解码。操作数栈验证与执行循环尚未实现,解码完成不授予执行许可。
客体 i32 函数体的操作数与控制栈验证已通过两架构验收,完整回归共 338 项。详客体操作数栈。四十四个模块预期与标准验证器一致;执行循环、运行时陷阱、模块全验和动态运行仍待完成。
用户态整数解释器已真正运行标准模块的控制、算术和直接调用,循环求和与递归阶乘均由客体算出,完整回归共 340 项。详客体整数执行。内存执行、导入连接、默认 Shell 动态加载、跨模块互调与 WasmGC 仍待完成。
用户态解释器现可执行内存读写、增长、复制、填充、数据初始化与丢弃,完整回归共 342 项。详客体内存执行。越界检查覆盖回绕、空操作和无部分写入;导入、默认 Shell 动态加载、链接与 WasmGC 仍待完成。
客体解释器已支持固定平台函数导入、按导出名查找、启动一次及默认空函数引用表;独立 C Wasm 原始字节实际运行并完成四次回调核验,完整回归共 348 项。详客体导入与启动。默认 Shell 文件加载、通用跨模块链接、WASI、间接调用和 WasmGC 仍待完成。
默认用户态 Shell 现支持从磁盘运行 Wasm 子任务、等待、运行中终止和退出码报告;重启后可再次加载,包括独立 C 模块。父 Shell 在子程序运行时仍可读写文件。完整回归共 352 项,四个默认镜像已更新,详命令壳程序运行。通用任务与内存池、模块链接、WASI、间接调用、磁盘空间回收和 WasmGC 仍待完成。
2026-09-25:独立宽除函数使 ARM64 命令壳代码超出一 MiB 代码预算,凡以文件命令壳为基础的用例都将失败。ARM64 常量装载现在只在高十六位非零时才发 MOVK,文件命令壳缩小约七万字节,余量转正;新的代码量诊断。豫可随时核对两架构余量。两架构不带外部模块共 360 项通过;带外部模块的 368 项运行时观察到父子任务同写串口的间歇交错失败,详臂常量装载。
控制台输出现由内核按行缓冲:每个任务在内核私有页蓄一行,遇换行、缓冲写满、读输入、任务退出或被终止时才一次写串口,一行输出不再被另一个任务的字节截断。两任务各写 3000 行的 控制台行原子 场景及 --只验 名称 选项已加入验证器,两架构共 362 项通过,带外部模块的 370 项连续通过,详控制台按行原子输出。
2026-09-25:降级后端改为寄存器式:虚拟操作数栈映射到寄存器,常量与比较同后继指令融合,函数入口一次性检查调用栈。ARM64 命令壳代码从 978 KB 缩到 162,900 字节,AMD64 从 798,873 缩到 184,000 字节,为继续扩展执行器留出预算;两架构共 362 项(带外部模块 370 项)QEMU 验收全部通过。详寄存器降级。
2026-09-25:内核新增内存块管理:ARM64/AMD64 各有 32 块×2 MiB 的物理池,服务二二 内存块(n) 为任务按需增加块,服务二三返回块数;memory.grow 超过八页时把线性内存迁入动态块并继续增长,任务退出、故障、被终止时归还,复制任务复制全部块,池尽时干净地失败。新增四个场景,两架构共 378 项(带外部模块)QEMU 验收全部通过。详内存块管理。
2026-09-28:寄存器降级抽出目标描述(库/裸机后端/降级目标。豫:操作系统 × 指令集)。入口、导入桩、内存增长助手和代码起址随目标而变,函数本身的降级只取决于指令集;裸机目标生成的镜像与改动前逐字节相同。新增 Linux 目标(路二):与裸机同一套固定地址布局,入口把栈移到用户区栈顶、按需 mmap 动态区、最后 exit_group;导入模块名为 Linux,按入口表(read、write、exit_group)生成系统调用桩,地址类参数加线性内存基址。命令行工具 yy原生生成 臂六十四|兼容六十四 输入.wasm 输出(本包的 原生生成 入口)直接写出静态 ELF64;样例 原生你好 在 Linux arm64 与 x86-64 上输出“你好”、回显标准输入并以退出码 7 结束。
2026-09-28:新增 macOS 目标(路二)。arm64 macOS 只执行位置无关的程序,因此降级增加“地址模式”:裸机与 Linux 用绝对地址;macOS 把名义地址一律写成“全局基址寄存器 x25 + 偏移”,入口用 adr 取得代码起址再加固定的锚距求出 x25(数据段固定在映像起址后 64 MiB,代码长短不影响距离)。苹果与 Windows 的 ARM64 都保留 x18,所以 ARM64 的线性内存字节数寄存器统一改为 x15(ARM64 裸机镜像因此改变;AMD64 镜像逐字节不变;普通豫言验证的打印、底层搬运、回收压力三项在两架构 QEMU 上通过)。macOS 导入经 dyld 绑定的导入槽调用 libSystem,导入桩保存 x15 与 x30,返回 -1 时经 ___error 转成 -errno。yy原生生成 苹果 臂六十四 输入.wasm 输出 写出带特设签名的 Mach-O;样例 原生你好 的 苹果入口 在本机输出“你好”、回显标准输入并以退出码 7 结束。
2026-09-28:执行器 客体二号 在 Linux 上原生运行(路二,解释执行)。降级新增目标内建导入 导入:目标:平台号(绑定为常量:裸机 1、Linux 2、macOS 3),其他目标的导入降级为陷阱桩(Linux 上用 brk #0、ud2);Linux 入口表增至 40 个系统调用(文件、时钟、随机、管道、套接字、进程等),x86-64 的系统调用桩支持第五、六个参数(从传参暂存取入 r8、r9,r9 先保存),参数类别新增“有符号整数”(如 lseek 的偏移)。执行器按平台号选择实现:林启动 从 /proc/self 写入程序名、参数与环境,林底层 是底层接口 45 个函数的 Linux 后端,林文件原语 让 GC 程序的文件原语经底层接口访问宿主文件系统。yy原生生成 Linux 架构 执行器.wasm 输出 客体.wasm 把客体嵌进执行器生成独立可执行文件;yy原生一致性 [--经 docker](本包的 原生一致性 入口)在两种架构的 Linux 上运行 7 个普通探针与 2 个文件探针,与裸机验证所用的期望输出逐字比较:18 项全部一致。详见客体二号。
2026-09-28:同一份执行器也在 macOS arm64 上原生运行:macOS 入口表扩充为 30 个 libSystem 函数,导入桩支持有符号参数与可变参数(按 Apple ARM64 约定放在栈上,如 openat 的权限、fcntl 的第三参、ioctl 的地址),导入槽只为“苹果”模块的导入绑定符号;执行器新增 苹系统、苹启动(sysctl 取参数与环境)、苹底层(45 个函数的 macOS 后端)与 原生系统、原生底层 两个分派模块。yy原生一致性 --系统 苹果 在本机运行 9 个探针,全部与裸机期望输出逐字一致。
2026-09-29:yy原生一致性 支持 --只验 名,在构建前仅选择名称包含该文字的探针;没有匹配项时报错退出。文件二依赖文件一写下的文件,可用 --只验 盘-文件 同时选择两项;macOS ARM64 上这两项通过。