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