RustROS · 2026-10-25 · 主线 3a1b3e9

M3 报告:Linux 兼容层

M3 做完了:Debian 13 的真实程序(动态链接的 bash、coreutils、perl、dpkg)能在 RustROS 上直接运行,dpkg 能打包、安装、卸载软件包;Linux Test Project 的系统调用测试 268 个里通过 254 个,并成为回归测试的一部分。下一个里程碑 M4(网络系统调用)需要你确认后再开始。

回归测试(KVM 测试机)45 项全部通过新增 debian 测试(26 个 Debian 程序用例 + LTP)、proc 测试里的管道 / 信号 / 线程程序
LTP 系统调用测试254 / 268余下 12 个在已知清单里;清单外任何一个失败,测试就失败
转发(最近一轮)19.4 / 19.8 Gbit/sTCP 单流 / 4 流;64 B 单流 380、16 流 369 kpps
线上尚未发布见文末:发布 M3 需要你同意

M3做了什么

步骤内容
M3.1–M3.2系统调用可以阻塞(带期限,被别的进程的动作或期限唤醒后重做);nanosleep;管道(匿名和命名,放在 VFS 里,热替换时连同数据交接)
M3.3–M3.4poll、select、epoll(就绪状态和 epoll 实例在 VFS 里);信号:处理函数(栈上的帧按 Linux x86-64 的布局,含 FPU 状态)、屏蔽、默认动作、EINTR 和 SA_RESTART、SIGCHLD、SIGPIPE、备用栈;进程组和会话
M3.5映射文件、mprotect、mremap、madvise;共享映射(MAP_SHARED,匿名和文件,映射同一文件的进程共用页缓存,改过的页写回);字符设备(null、zero、urandom、console 等)
M3.6线程:进程是线程组,地址空间、文件表、信号处理方式在线程之间共享;clone(fork、vfork、线程)、futex(含跨进程的共享 futex)、exit 与 exit_group
M3.7动态链接(ld.so 和 glibc)、#! 脚本;/proc(每个挂载点一份,chroot 里可以自己挂);用户和组(setuid 一族、附加组、粘滞位和 setgid 目录);定时器(alarm、setitimer 三种);PROT_NONE;一批按 LTP 修正的语义和错误码;测试:Debian 13 最小根目录里的 26 个程序用例,LTP 的 268 个系统调用测试

发现测试中找到并修正的问题

遗留还没有的

缺口影响打算
网络系统调用(socket 一族)apt 下载、curl 还不能用M4
终端和作业控制交互式 bash、Ctrl-C、docker exec -itM5
LTP 余下 12 个文件大小的资源限制、PDEATHSIG、亚毫秒定时精度、个别 mmap / mremap / msync 细节按需在后面的里程碑补
write() 不更新同时被映射的页同一文件既 write 又 mmap 的程序可能看到旧内容需要统一的页缓存,做容器镜像(M6)前评估
/proc 只有常用的部分ps 一类工具基本够用,更多字段按需补M7a 容器的独立 PID 空间时一起完善

M4下一步:网络系统调用

按已确认的顺序,下一个是 M4:进程的 socket 调用(TCP、UDP、Unix 域套接字、getaddrinfo 需要的 DNS 解析路径),进程的套接字放在它所属的协议栈实例里(主机模式就是主机的协议栈),epoll 能等套接字。验收:在 Debian 根目录里 apt update 和 apt install curl 能完成,curl 能访问外部网站。

请你确认

1. M3 是否可以发布:发布 2026.10.25.4 并更新两台机器(和上次一样:先阿里云,再第二台生产机;模块接口有变化,所有模块重装)。

2. M4 的范围是否合适;确认后我再开始 M4。