📌 项目地址microsoft/mxc | ⭐ 455 颗星 | 🔧 Rust | 📜 未标注

一句话说清楚它是什么

MXC(Microsoft eXecution Container)是一个跨平台的沙盒代码执行系统,专门跑不可信代码——AI 模型输出、第三方插件、用户脚本等。它不依赖 Docker 守护进程,也不要求预装容器镜像,而是直接调用各操作系统的原生沙箱接口(Windows Job Object、Linux Namespace+Seccomp、macOS Seatbelt),然后通过统一的 JSON 配置和 TypeScript SDK 暴露出来。

项目当前 455 个 star,底层用 Rust 写,但 SDK 只有 TypeScript。README 自己标注是“早期预览”,生成的策略可能过于宽松,不构成安全边界

平台与后端:每个平台实际能用的只有两三个

官方列表看上去很丰富:ProcessContainer、Windows Sandbox、LXC、Bubblewrap、Seatbelt、MicroVM、Hyperlight、IsolationSession、WSLC。但每个平台能真正跑的有限。下面按 README 的实际数据整理:

平台 默认后端 其他可选后端 系统要求
Windows 11 24H2+ processcontainer windows_sandbox, wslc, microvm, hyperlight, isolation_session processcontainer 需要 24H2 (build 26100);isolation_session 需要 Insider Preview 26300.8553
Linux x64/ARM64 bubblewrap lxc, microvm, hyperlight 需手动安装 bwrap(Bubblewrap)或 LXC
macOS ARM64/x64 seatbelt schema 版本需 0.6.0-alpha+

稳定的一次性后端(processcontainer、bubblewrap、lxc)不需要 Windows 实验模式。Linux 用户必须自己装运行时,项目不会代劳。macOS 只有 seatbelt,依赖苹果原生沙箱,且要求 schema 版本在 alpha 以上。

使用方式:两套 API,一套 JSON 配置

核心入口是 TypeScript SDK,安装命令:

npm install @microsoft/mxc-sdk

然后通过 SDK 调用。MXC 提供两套 API:

  • 一次性 API(one-shot):执行一段代码,运行完自动清理。适合跑一次就结束的脚本。
  • 状态感知 API(state-aware):完整生命周期:provision → start → exec → stop → deprovision。适合需要保留会话状态的任务,比如在编辑器里跑交互式命令。

所有执行参数和安全策略都通过一个版本化的 JSON schema 定义。具体 schema 结构和 API 签名在 sdk/README.md 里,根目录 README 只是索引。

策略与限制:文件系统、网络、UI 三部分

JSON schema 控制三类策略,每个后端按自己能力实现:

  • 文件系统:指定只读路径列表和读写路径列表。注意:Windows 不支持“拒绝路径”(denied paths)。
  • 网络:支持代理(macOS 不支持);允许/阻止出站连接;主机过滤(Windows 上未实现)。
  • UI:控制剪贴板、显示、GUI 访问开关。

每个策略在后端之间可能有差异,但 JSON 结构统一。官方自己也说了:当前生成的策略可能过于宽松,别当成安全边界。

跟 Docker、gVisor、Firecracker 有什么不同

MXC 不是容器替代品,而是另一层的工具:

  • 没有中心 daemon。直接调系统调用,不做镜像管理、网络桥接那一套。
  • 不需要容器镜像。每次执行临时创建沙盒,代码注入后跑完就销毁。
  • 可以在同一套配置里切换隔离级别。低风险用进程容器(ProcessContainer/bubblewrap),高风险用 MicroVM 或 Hyperlight。你改一行 JSON 就能换后端。
  • macOS 原生支持。seatbelt 不需要额外装东西,Windows 上 processcontainer 也内置在系统里。

实际能做什么,不能做什么

可以做

  • AI Agent 的模型输出沙箱,防止恶意代码写文件。
  • CI/CD 中跑一次性测试,用进程容器快速隔离。
  • 做原型验证,比较不同沙箱技术在统一接口下的性能与安全性。

现在别指望

  • 不能当生产安全边界。策略可能漏,隔离不完整。
  • Windows 版本要求高(24H2+),部分后端需要 Insider Preview。
  • 网络策略在 Windows 上基本没用,主机过滤没实现。
  • 只有 TypeScript SDK。如果你用 Python、Go、Java,得自己包装进程或 HTTP 调用。
  • Linux 用户不是开箱即用,必须手动装 bwrap 或 LXC。
  • macOS 只有 seatbelt 一个后端,且要求 schema 0.6.0-alpha+,ARM Mac 用户没得选。

几点个人观察

  1. Rust 写底层,但 SDK 只有 TypeScript。如果我想在 Python 里用,要么自己写 FFI 绑定,要么封装子进程调用 node 脚本。文档里也没提其他语言绑定的计划。
  2. macOS 用户选择太少。seatbelt 是苹果原生,但 schema 版本限制意味着早期开发者只能用 alpha,稳定性存疑。
  3. 文档集中在 sdk/README.md,根目录更像一个索引。第一次使用建议直接看 SDK 文档,根目录内容不够。
  4. 项目是 MIT 许可证,欢迎提 issue,但安全漏洞报告的说明很直白:“当前配置文件可能不安全,欢迎研究员参与,但不要当成安全边界。” 如果考虑生产环境,至少等 GA 版本。
  5. README 里的警告值得反复读:“当前生成的策略可能过于宽松……不构成安全边界。” 这是微软自己写的,不是我添油加醋。
这篇文章对你有帮助吗?

发表回复