11 — Arg0 多路复用:单二进制多角色
动机
分发单一 codex 可执行文件,减少:
- PATH 污染与 错误二进制 风险;
- 打包体积重复;
- 沙箱内需要 可信路径重入 时的复杂度。
codex-arg0 入口行为(节选)
codex-rs/arg0/src/lib.rs:
- 读
argv0文件名;若为codex-linux-sandbox→ 进入 Linux 沙箱 helper。 - 若为
apply_patch/applypatch→ 进入codex_apply_patch::main()。 - 若
argv1 == CODEX_CORE_APPLY_PATCH_ARG1→ 以 内嵌模式 应用 patch(供 core 子进程调用)。 - (Unix)
codex-execve-wrapper路径用于 shell 提权包装等。
88:97:codex-rs/arg0/src/lib.rs
if exe_name == CODEX_LINUX_SANDBOX_ARG0 {
// Safety: [`run_main`] never returns.
codex_linux_sandbox::run_main();
} else if exe_name == APPLY_PATCH_ARG0 || exe_name == MISSPELLED_APPLY_PATCH_ARG0 {
codex_apply_patch::main();
}
let argv1 = args.next().unwrap_or_default();
if argv1 == CODEX_CORE_APPLY_PATCH_ARG1 {Arg0DispatchPaths:测试与 harness
结构体字段 codex_self_exe 注释说明:在测试 harness 中 current_exe() 可能指向 测试运行器 而非真实 Codex,因此需要 显式稳定路径 做子进程 re-exec。
一句话
Arg0 多路复用 = 用进程镜像名与 argv 约定切换子系统,配合 稳定自路径,在单二进制下实现沙箱 helper、patch 工具与主 CLI。