Appearance
Cargo Workspace 是 Rust 的多 crate 管理机制,Codex 使用它组织 119 个 crate,实现模块化构建和依赖共享。
为什么需要 Cargo Workspace
Codex 是一个大型项目,包含核心引擎、多种界面(TUI/Exec)、协议定义、沙箱系统、SDK 等。使用 Cargo Workspace 将不同职责的代码拆分为独立 crate,实现编译隔离(修改 TUI 不需要重编核心)、依赖共享(统一管理 tokio/serde 等版本)和并行构建(cargo 利用多核并行编译多个 crate)。
核心原理
- 统一管理:
codex-rs/Cargo.toml的[workspace]段定义所有 119 个成员 crate,[workspace.dependencies]统一管理共享依赖版本 - 分层依赖:
protocol/config作为最底层类型库 →core作为业务核心 →app-server作为通信层 →tui/exec/cli作为界面层 - 编译优化:release profile 使用
lto = "fat"和codegen-units = 1进行全链接时优化 - 多二进制目标:从同一 workspace 构建出
codex(CLI)、codex-tui、codex-exec、codex-linux-sandbox四个独立二进制
在源码中的实现
codex-rs/Cargo.toml— workspace 根配置,119 个 members、共享依赖、profile 设置codex-rs/protocol/src/lib.rs— 跨 crate 共享的类型定义(EventMsg、TurnItem等)codex-rs/config/src/lib.rs— 配置类型库,被所有上层 crate 依赖codex-rs/core/src/lib.rs— 核心业务 crate,60+ 内部模块