2026-08-19 整理。实验 fork(D:\git program\MSP++):主张命令面不该手写,用宽松开源运行时 + 统一 bridge broker 替代 MSP 手写的 117 个 Swift POSIX 命令。

主张

命令面不应该手写。 用现成宽松开源运行时(toybox coreutils + CPython + git)通过统一 bridge broker 支撑命令面;路径映射 + 输出 sanitize(映射层)与文件访问拦截(解释器层)负责隔离。MSP 保留的是 shell 语义层(parser/registry/WorkspaceFS/policy/audit),不是命令实现。

"解释器最后也是二进制"的澄清:重写解释器只在重运行时不可行,而重运行时本就不该重写——git/python 是几十万行状态机,借真运行时(libgit2 / 嵌入式 CPython)才对。上游 MSP 自己也是借(libgit2 绑定、CPython 嵌入)。

架构

MSP++ (命令面 = 真实运行时)
├─ 语义层(保留下游)     : shell parser / command registry / WorkspaceFS / policy / audit
└─ 统一 bridge (MSPBridge): 一个 enable(.bridge) 注册三层
     ├─ coreutils → toybox 多调用二进制 + install_flat 符号链接   (映射层)
     ├─ git       → 真实 git 二进制                               (映射层)
     └─ python    → 嵌入式 CPython + VFS broker                  (拦截层)

两层隔离(实测):ls /etc → No such file(映射层);python 读 /etc/passwd → FileNotFoundError、写 /tmp/pwn.txt → 落工作区虚拟 tmp(拦截层)。

关键坑/修复(相对上游)

  1. 上游 MSPCPythonSymbols.swift 是 Darwin-only(#if canImport(Darwin) 包住整个 dlopen),Linux 直接抛 engineUnavailable。改 #if canImport(Darwin) || canImport(Glibc) + import Glibc。这就是作者说的"移植中"那块。
  2. Windows clone 的 CRLF 污染 shebang:toybox 的 genconfig.sh 变 #!/bin/bash\r 使 make 失败,构建前批量 sed -i 's/\r$//'。
  3. toybox --list 不是合法旗标(报 Unknown command --list);枚举 applet 用裸 toybox 输出按空白分割。
  4. 危险命令黑名单:mount/reboot/su/nsenter/pivot_root 等 27 个不注册——真二进制会动宿主。
  5. swift build --target X 不链接可执行 product,要用 swift build --product <name>。

上游基础设施(105a103 "portable external command infrastructure")

MSPExternalCommandPathMapper(路径/环境/参数/sanitize 单一来源)+ MSPInProcessExternalCommandRunner(进程内执行)+ MSPPythonModuleCommandPack。这套是 bridge 的基础。注意:新 runner 用了 MSPCommandContext.standardInputOverridesFileDescriptor,而 pi-shell 的 vendored MSPCore 落后没有该成员 → 编不过。python 模块不依赖 runner,所以 pi-shell 侧回滚了 runner 同步(不动 vendored MSPCore,遵守"MSP CORE 一点都不要动")。将来接 git/node bridge 需全量同步 vendored core——用户拍板。

与 pi-shell 的关系

MSP++ 是"命令面换真运行时"的实验验证;pi-shell 把 MSP 内核嵌进 Pi。两者共用同一套 broker/拦截基础设施;pi-shell 已落地拦截层(python),映射层(git/node 真二进制)是后续主线。

相关


本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/AI apps