2.6 KiB
2.6 KiB
Linux 普通二进制调用
Goal
在 Port/Adapter 下直接执行现成 Linux 二进制,支持参数、标准输入输出、退出状态、超时取消及独立打包
已确认范围
用户已在上一轮审阅普通命令调用、Port/Adapter、参数数组、可选标准输入、两路输出、退出码、超时取消、二进制与动态库打包、Linux x86_64/ARM64、无 shell/env 的方案,并批准创建任务、规划和实施。本任务不再次请求相同授权。
需求
- R1:直接调用现成 Linux ELF,无需程序实现 Dever 协议或用户编写其他语言包装;Port/Adapter 保留唯一外部调用边界。
- R2:参数按数组原样传递,标准输入可省略;输出不丢失非 UTF-8 字节,正常非零退出码属于结果。
- R3:启动失败、超时、取消、输出超限明确处理;每次调用均回收自有进程及沙箱后代,不自动重试命令。
- R4:run/build 离线准备并嵌入程序和显式随附的必要动态库;检查目标架构、依赖闭包和完整性,部署不依赖源码/机器缓存/宿主语言工具。
- R5:继续使用 config/setting.json 管理部署文件授权和调用限额,不添加环境变量或 PATH/shell 查找。复用现有沙箱,不修改宿主策略。
- R6:保持现有 exec/pip/npm/go Worker 合同;普通 Dever 测试继续 Port fake,不执行真实命令。兼容 Package 资源与 Markdown 源码。
验收
- 编译检查并格式化合法 command Adapter;拒绝错误 Port 签名、额外操作、setting/lib 和非法路径;其他 wire 边界仍拒绝 Bytes。
- 真实无协议 ELF 收到空格、引号、shell 元字符和绝对沙箱路径原文;stdin EOF、二进制输入输出、两路并发大输出、正常非零退出正确。
- 超时/调用取消/根关闭/输出超限均有界完成并回收沙箱进程树;后续调用仍可执行,无自动重放。
- 打包拒绝错架构、缺库、错误 SONAME/ABI、越界路径和篡改;完整动态程序在移除原始源码后运行。
- 真实 Dever check/run/build 和独立产物覆盖完整路径;Package 资源与现有 Worker 定向回归通过。
- Linux ARM64 构建与目标校验覆盖;目标运行证据单独报告,不能由 ELF 标签推导运行通过。
ARM64本次证据为Rust交叉检查、LLVM目标对象生成及打包目标校验;实际普通命令与独立产物运行证据来自Linux x86_64。完整验证命令、失败修复及未运行项见implement.md。
非目标
Windows/macOS、FFI、shell/管道语法、后台守护进程/交互式终端、隐式下载或宿主库扫描、全量测试和长压测。