rchekalov/silo

GitHub: rchekalov/silo

Silo 是一个基于 Apple Containerization 的隔离式开发工具运行器,通过在短暂微型虚拟机中执行包管理器和 AI 编程智能体,防止供应链攻击和 AI 幻觉命令导致的主机敏感数据泄露。

Stars: 4 | Forks: 0

# Silo **基于 Apple Containers 的隔离式开发工具运行器。**

silo init then silo python app.py — kernel reports Linux on a macOS host

Silo 封装了 [Apple Containers](https://github.com/apple/containerization),以在短暂的轻量级虚拟机中运行开发工具。包管理器、解释器和编译器均可按预期工作——但每次调用都在隔离环境中运行,无法访问您的 SSH 密钥、云凭证或其他敏感数据。 ## 为什么需要隔离 有两类工具通常会在完整的用户权限下执行不受信任的代码: **包管理器** 在安装期间(`postinstall` 钩子、`setup.py`、构建脚本)运行任意代码。近期的供应链攻击表明这一点正被积极利用: - **Axios npm 泄露事件(2026 年 3 月):** 这个周下载量达 1 亿次的包的植入后门版本,通过 `postinstall` 钩子部署了一个跨平台 RAT。 - **Shai-Hulud 蠕虫(2025 年 9 月):** 自我复制的蠕虫感染了 500 多个 npm 包,窃取 GitHub PAT 和云凭证。 **AI 编程智能体**(Claude Code、Cursor、Copilot)会读取您的代码库、编辑文件并运行 Shell 命令。当出现问题时——例如来自仓库中恶意文件的提示注入,或者产生幻觉的破坏性命令——该智能体将拥有与您相同的访问权限:`~/.ssh`、`~/.aws`、API 密钥以及不受限制的网络。 Silo 通过在微型虚拟机中运行工具来解决这两个问题,该虚拟机只能看到项目目录和明确允许的环境变量。 ## 保护范围 | 不使用 Silo | 使用 Silo | |---|---| | `~/.ssh/`, `~/.aws/`, `~/.gnupg/` — 完全访问 | 已阻止 | | 所有环境变量均可见 | 仅显式传递的变量 | | RAT(远程访问木马)驻留在用户空间中 | 随短暂的虚拟机一同消亡 | | 横向移动到其他项目 | 仅挂载当前项目 | | macOS 钥匙串、浏览器数据可访问 | 已阻止(独立的 Linux 内核) | ## 系统要求 - Apple Silicon Mac (M1+) - macOS 26 (Tahoe) 或更高版本 ## 安装 ``` brew install rchekalov/apps/silo # 将 silo shims 添加到您的 PATH(为当前 shell 运行一次 + 追加到 profile) eval "$(silo shellenv)" echo 'eval "$(silo shellenv)"' >> ~/.zshrc ``` 必须使用三段式的 `rchekalov/apps/silo`,因为 homebrew-cask 已经有一个不相关的 `silo` cask —— 使用完全限定的名称可以选择我们的 formula。 Homebrew 会在您的机器上从源代码编译 silo(约 1-2 分钟),并使用启动虚拟机所需的虚拟化权限对二进制文件进行临时代码签名。无需公证,也没有 Gatekeeper 隔离提示。 ## 从源代码安装 跳过 Homebrew 并手动构建: ``` git clone https://github.com/rchekalov/silo.git cd silo # 构建、签名并安装到 /usr/local/bin make install # 将 silo shims 添加到您的 PATH eval "$(silo shellenv)" echo 'eval "$(silo shellenv)"' >> ~/.zshrc ``` ### 构建前置条件 - Xcode Command Line Tools (`xcode-select --install`) - Go 1.25+ (`brew install go`) - Swift 6.2+(通常由 Xcode CLT 提供) ### 必须进行代码签名 二进制文件**必须**使用虚拟化权限进行代码签名,否则 macOS 会将其终止 (SIGKILL)。请始终使用 `make install`(发布版)或 `make sign-debug`(开发版)——切勿直接运行原始的 `go build` 输出。 | 命令 | 用途 | |---|---| | `make install` | 生产环境 — 发布构建 + 签名 + 安装到 `/usr/local/bin`(提示输入 sudo 密码) | | `make sign-debug` | 开发环境 — 调试构建 + 签名(迭代更快) | | `go build` | 仅编译 — **未签名,在任何虚拟机操作时都会崩溃** | ## 快速开始 ``` # 安装沙盒工具(首次运行会引导 runtime — 需要几分钟) silo install python # 正常使用 — shims 使其透明 python --version python script.py # 或者显式运行(silo 标志在工具前,命令在工具后) silo run python script.py # 沙盒内的交互式 shell silo shell python # 查看已安装的内容 silo list # 查看所有可用工具及其版本 silo list --available # 移除工具 silo uninstall python ``` Silo 还支持简写语法——`silo python script.py` 会展开为 `silo run python script.py`,而 `silo npm test` 会解析 shim 并展开为 `silo run node --shim npm test`。旧的 `--` 分隔符(`silo run python -- script.py`)仍然受支持。 ## 在隔离环境中运行 Claude Code Claude Code 是一个 AI 智能体,可以读取您的代码库、编辑文件并运行任意 Shell 命令。当它正常工作时,非常出色。但当出现问题时——例如来自恶意文件的提示注入,或者产生幻觉的破坏性命令——它拥有与您相同的访问权限:`~/.ssh`、`~/.aws`、`~/.gnupg`、API 密钥以及不受限制的网络。 Silo 通过在主机文件系统根本不存在的虚拟机中运行 Claude Code 来消除这一问题。没有什么可以阻止,因为根本没有东西可供访问。 ### 设置 ``` # 安装隔离的 Claude Code 工具 silo install claude-code # 配置您的项目 cat > silo.toml << 'EOF' passEnv = ["ANTHROPIC_API_KEY", "GITHUB_TOKEN"] EOF # 运行 Claude Code — 完全隔离 silo claude ``` ### Claude Code 在 Silo 内部能看到什么 - `/workspace/` — 您的项目目录(读写挂载) - `/root/.claude/` — Claude Code 配置(在运行之间持久化) - 网络访问:`api.anthropic.com`、`github.com`、`registry.npmjs.org`、`pypi.org`(以及其他白名单域名) ### 它无法访问什么 - `~/.ssh/`、`~/.aws/`、`~/.gnupg/` — 不存在 - `~/.config/`、`~/Library/` — 不存在 - 其他项目 — 不存在 - 任意网络目标 — 被代理阻止 ### 哪些功能保持不变 - 读取和编辑项目文件 - 运行测试(`npm test`、`pytest`、`cargo test`) - 安装项目依赖 - Git 操作(`git add`、`git commit`、`git log`、`git diff`) - 构建项目 ### 哪些功能发生变化 | 操作 | 不使用 Silo | 在 Silo 内部 | |---|---|---| | 读取 `~/.ssh/id_rsa` | 可访问 | 不存在 | | 读取 `~/.aws/credentials` | 可访问 | 不存在 | | 读取其他项目 | 可访问 | 不存在 | | 网络:`api.anthropic.com` | 不受限制 | 经代理允许 | | 网络:任意域名 | 不受限制 | 被阻止 | | 权限提示 | 频繁 | 无需(以虚拟机为边界) | ### 扩展网络白名单 如果 Claude Code 需要访问您项目的 API 或自定义 registry: ``` # silo.toml [overrides.claude-code.network] hostAccess = true [overrides.claude-code.network.proxy] allow = [ "api.anthropic.com", "*.github.com", "registry.npmjs.org", "api.mycompany.com", "internal-registry.mycompany.com", ] deny = ["*"] ``` ## 可用工具 | 工具 | 镜像 | Shims | 版本 | |---|---|---|---| | `python` | `python:3.12-slim` | `python`, `python3`, `pip`, `pip3` | 3.12, 3.11, 3.10, 3.9 | | `node` | `node:22-slim` | `node`, `npm`, `npx` | 23, 22 (LTS), 20, 18 | | `rust` | `rust:1.83-slim` | `cargo`, `rustc`, `rustup` | 1.83, 1.82, 1.81 | | `go` | `golang:1.23-alpine` | `go` | 1.23, 1.22, 1.21 | | `deno` | `denoland/deno:alpine` | `deno` | latest, 2.1.4, 2.0.6 | | `playwright` | `node:22-slim` | `playwright` | — (需要 `node`) | | `cypress` | `cypress/included:14.0.0` | `cypress` | — (需要 `node`) | | `psql` | `postgres:16-alpine` | `psql`, `pg_dump`, `pg_restore`, `createdb`, `dropdb` | 16, 15, 14 | | `jupyter` | `jupyter/scipy-notebook:latest` | `jupyter` | — (需要 `python`) | | `aws-cli` | `amazon/aws-cli:latest` | `aws` | — | | `claude-code` | `silotools/claude-code:latest` | `claude` | — | 安装特定版本: ``` silo install python@3.11-slim silo install node@20-slim ``` 如果您未指定版本,silo 会显示一个交互式选择器: ``` $ silo install python Available versions for python: 1) 3.12-slim [default] 2) 3.11-slim 3) 3.10-slim 4) 3.9-slim Select version [1]: ``` ### 每个项目的版本固定 不同的项目可以通过 `silo.toml` 覆盖来使用不同的工具版本: ``` # 项目 A — 使用默认的 Python 3.12 cd ~/projects/web-app python --version # Python 3.12.x (from silo) # 项目 B — 在其 silo.toml 中固定 Python 3.11 cd ~/projects/legacy-api python --version # Python 3.11.x (from silo, using project override) ``` `legacy-api/` 中的 `silo.toml` 将包含: ``` [overrides.python] image = "docker.io/library/python:3.11-slim" ``` 这也适用于 Node.js、Go、Rust 以及任何其他工具——只需使用所需的版本标签覆盖 `image` 字段即可。 ### 自定义工具安装 将任何 OCI 镜像安装为 silo 工具: ``` # 基础自定义镜像 silo install mydb --image postgres:15 --shim psql,pg_dump --network # 包含 setup 脚本和资源调整 silo install webdriver --image selenium/node:4.0 \ --setup ./install.sh --cpus 4 --memory 2048 # 自定义 shim 映射(宿主机命令:容器命令) silo install mytool --image myimage:latest --shim npm2:npm ``` ## 项目配置 ### 使用 `silo init` 初始化 设置项目的最简单方法是使用 `silo init`。它通过扫描标记文件(`package.json`、`requirements.txt`、`Cargo.toml`、`go.mod`、`deno.json`)来自动检测工具,并引导您完成配置: ``` $ cd ~/projects/my-web-app $ silo init Detected: node (package.json), python (requirements.txt) Configure node: Network access (host DB, APIs)? [y/N] y Forward ports? (comma-separated, e.g., 3000) 3000,5173 Configure python: Network access? [y/N] n Forward ports? Pass env vars from host? (comma-separated) GITHUB_TOKEN,DATABASE_URL Pass host files? (e.g., .npmrc) .npmrc Exclude from mount? [node_modules,.venv] Created silo.toml Added .silo/ to .gitignore Not installed: python Run: silo install python ``` 这将生成一个 `silo.toml` 并建议安装任何缺失的工具。之后,只需正常使用工具——shim 会透明地处理一切: ``` silo install python # install the missing tool npm install # runs inside sandbox (node already installed) python manage.py runserver # runs inside sandbox ``` 用于 CI/脚本的非交互模式: ``` silo init --tool node --tool python --port 3000 --pass-env GITHUB_TOKEN --no-interactive ``` ### 手动配置 `silo.toml` 在您的项目根目录中创建一个 `silo.toml` 来控制沙箱可以访问的内容: ``` # 传递到沙盒中的环境变量 passEnv = ["GITHUB_TOKEN", "DATABASE_URL"] # 以只读方式挂载的宿主机文件 passFiles = [".npmrc", ".pypirc"] # 从项目挂载中排除的目录 [mount] exclude = ["node_modules", ".venv"] # 此项目的按工具覆盖配置 [overrides.node.network] hostAccess = true [[overrides.node.ports]] host = 3000 guest = 3000 [overrides.python] env = { PYTHONPATH = "/workspace/src" } ``` ### 配置示例 **Web 应用(Node + Python 后端):** ``` # silo.toml passEnv = ["GITHUB_TOKEN", "DATABASE_URL"] passFiles = [".npmrc"] [mount] exclude = ["node_modules", ".venv", "__pycache__"] [overrides.node.network] hostAccess = true # access host DB, APIs via host.silo.internal [[overrides.node.ports]] host = 3000 # dev server guest = 3000 [[overrides.node.ports]] host = 5173 # Vite HMR guest = 5173 [overrides.python] env = { PYTHONPATH = "/workspace/src" } ``` **数据科学项目:** ``` # silo.toml [overrides.python] image = "docker.io/library/python:3.11-slim" # pin version memoryMB = 2048 # more RAM for pandas/numpy rootfsSizeMB = 4096 # space for large packages [overrides.python.network] hostAccess = true [[overrides.python.ports]] host = 8888 # Jupyter notebook guest = 8888 ``` **全栈 monorepo:** ``` # silo.toml passEnv = ["AWS_PROFILE", "GITHUB_TOKEN"] [overrides.node] image = "docker.io/library/node:20-slim" # LTS for production [overrides.node.network] hostAccess = true [[overrides.node.ports]] host = 3000 guest = 3000 [overrides.python] env = { PYTHONDONTWRITEBYTECODE = "1" } [overrides.go.network] hostAccess = true ``` ## 使用 `silo setup` 安装项目依赖 每次 `silo run` 都会创建一个全新的短暂虚拟机——在运行期间安装的任何包都会在退出时丢失。要持久化安装的依赖项,请使用 `silo setup`。它在虚拟机内部运行命令并保存生成的文件系统,因此未来的运行将以所有已安装的内容开始。 ### 示例:Node.js Web 应用 ``` cd ~/projects/my-web-app # 1. 创建 silo.toml 以配置网络和端口转发 cat > silo.toml << 'EOF' [mount] exclude = ["node_modules"] [overrides.node.network] hostAccess = true [overrides.node.network.proxy] allow = ["registry.npmjs.org", "*.github.com"] [[overrides.node.ports]] host = 5173 guest = 5173 EOF # 2. 安装依赖并持久化它们 silo build node npm install # 3. 运行开发服务器 — 可通过 http://localhost:5173 访问 npm run dev ``` 如果没有 `silo.toml`,虚拟机将没有网络访问权限(因此 `npm install` 无法访问 registry),也没有端口转发(因此无法从主机访问开发服务器)。 ### 示例:Python 项目 ``` cd ~/projects/my-api # 1. 为 pip 配置网络访问并为服务器配置端口转发 cat > silo.toml << 'EOF' [overrides.python.network] hostAccess = true [overrides.python.network.proxy] allow = ["pypi.org", "*.pythonhosted.org"] [[overrides.python.ports]] host = 8000 guest = 8000 EOF # 2. 从 requirements.txt 安装并持久化 silo build python pip install -r requirements.txt # 3. 未来的运行将拥有所有可用的包 python manage.py runserver ``` 或者使用 `silo init` 自动检测您的项目并交互式生成 `silo.toml`。 ### 项目本地与全局 默认情况下,`silo build` 将镜像保存在项目目录的 `.silo//rootfs.ext4` 中(需要项目根目录中有 `silo.toml`)。对于您想在所有项目中使用的包,请使用 `--global`: ``` # 项目本地(默认) — 只有此项目获取这些 deps silo build node npm install # 全局 — 在所有项目中可用 silo build --global python pip install poetry # 项目本地构建在全局之上 # (全局包含 poetry,项目添加特定于项目的 deps) silo build python poetry install ``` ### 其他用途 ``` # 安装系统包或浏览器二进制文件 silo build node npx playwright install --with-deps # 重置自定义环境 silo build node --remove silo build --global python --remove ``` 旧的 `--` 分隔符(`silo build node -- npm install`)仍然受支持。 稍后从存储的脚本重新构建: ``` silo rebuild node # Re-run stored setup silo rebuild --all # Rebuild all customized tools silo rebuild python --setup "pip install -U pip" # Override the script ``` ## Shim 管理 在运行时为已安装的工具添加或移除 shim,无需重新安装: ``` # 添加 shim(创建指向 python 工具的 ~/.silo/bin/ipython) silo shim python add ipython # 自定义映射 — 宿主机命令运行不同的容器命令 silo shim python add ipython:python -m IPython # 一次添加多个 shim silo shim python add ipython black mypy # 移除 shim silo shim python remove ipython # 列出工具的所有 shim silo shim python list ``` 如果某个 shim 名称已被其他工具占用,Silo 会检测到冲突。 ## IDE 集成(实验性) Silo 可以在沙箱内运行语言服务器(LSP),这样您的编辑器就能获得自动补全、转到定义和错误检查功能——同时代码分析保持隔离。LSP 服务器在与其工具相同的沙箱环境中运行,因此它能看到完全相同的包和依赖项。 支持的语言服务器: | 工具 | 语言服务器 | 安装 | |---|---|---| | `python` | Pyright | `pip install pyright` (自动) | | `node` | TypeScript Language Server | `npm install -g typescript-language-server` (自动) | | `rust` | rust-analyzer | `rustup component add rust-analyzer` (自动) | | `go` | gopls | `go install golang.org/x/tools/gopls@latest` (自动) | 启动语言服务器(首次使用时会自动安装 LSP 服务器): ``` silo lsp python # starts pyright, communicates via stdio silo lsp node # starts typescript-language-server silo lsp rust # starts rust-analyzer silo lsp go # starts gopls ``` 生成 IDE 配置,将您的编辑器指向 silo 的 LSP: ``` silo ide vscode # creates .vscode/settings.json silo ide zed # creates .zed/settings.json silo ide neovim # generates LSP client config ``` Silo 透明地在主机和容器之间重写文件路径,因此您的编辑器可以使用真实的文件路径,而语言服务器在沙箱内运行。 ## 缓存管理和磁盘使用 Silo 缓存解压后的 rootfs ext4 文件,以便后续的 `silo run` 调用在约 600 毫秒内而不是约 25 秒内启动。在 APFS 上,缓存是稀疏的(一个“2 GB”的文件在磁盘上占用约 200 MB),但随着时间的推移它仍然会累积。磁盘相关命令如下: ### 查看磁盘使用情况 ``` silo cache report # total ~/.silo footprint by bucket silo cache list # per-entry view (raw, zstd, or both) with last-used times ``` 示例: ``` ~/.silo disk usage (on-disk / apparent): rootfs cache 37.0 MiB / 36.2 MiB (0 raw, 1 zstd, 0 both) per-tool caches 78.5 MiB containers (live) 0.0 MiB OCI image store 280.0 MiB orphan blobs: 45.0 MiB (run `silo cache gc --images` to free) builds 202.4 MiB -- total 597.9 MiB ``` ### 垃圾回收(LRU + 基于时间的策略) ``` silo cache gc # evict oldest rootfs entries until under the size cap silo cache gc --dry-run # preview silo cache gc --images # also GC unreferenced OCI layer blobs silo cache gc --tool-caches # also evict old files from pip/npm/cargo caches silo cache gc --max-size 2048 # override the policy for one run silo cache gc --max-age 30 # only evict entries untouched for >30 days ``` GC 会在每个进程的 `silo run`时自动运行一次——您只需正常使用 silo 即可被动回收磁盘。冷条目会一直存在,直到缓存超过策略上限(默认 8 GiB)或达到时间截止点(默认 60 天)。 ### 压缩冷条目 (zstd) ``` silo cache compress # compress entries last used >14 days ago (~4× smaller) silo cache compress --all # compress every entry regardless of age silo cache compress --dry-run # preview ``` 压缩后的条目在下次缓存命中时会被解压回原始状态(对于一个 500 MB 的镜像,大约需要 1-3 秒的一次性成本),然后正常克隆。我的 debian-slim 镜像在使用默认 zstd 的情况下,从 155 MB 减小到了 37 MB。 ### 配置策略 在 `silo.toml` 或 `~/.silo/silo.toml` 中放置一个 `[cache]` 块: ``` [cache.rootfs] maxSizeMB = 8192 # LRU eviction above this cap maxAgeDays = 60 # entries untouched beyond this are evicted [cache.tools] maxSizeMB = 4096 # per-mount cap for pip/npm/cargo maxAgeDays = 30 # file-level eviction by atime inside each mount [cache.tools.perMount] "rust/cargo" = 8192 # override for specific mounts ``` ### 完全清理 ``` # 移除特定的 buckets silo cache clean --safe # only orphans (not referenced by installed tools) silo cache clean --rootfs # nuke rootfs cache silo cache clean --containers # nuke stale container state silo cache clean # wipe rootfs cache + container state # 项目范围的回收(向上查找 silo.toml) silo clean # rootfs cache + per-tool caches + stale VMs for this project silo clean --rootfs-only silo clean --caches-only silo clean --force # also remove artifacts shared with other tools # 卸载工具也会回收其 rootfs cache + OCI 镜像(如果不共享) silo uninstall python # use --keep-image to opt out # 完全重置(下次安装重新引导) silo reset ``` ## 工作原理 ``` User runs: python script.py │ ▼ Shim (~/.silo/bin/python) │ calls: silo run --shim python python script.py ▼ silo run │ 1. Loads ~/.silo/config.toml (tool definition) │ 2. Finds silo.toml (walks up from cwd) │ 3. Merges config (project overrides global) ▼ Apple Container (ephemeral micro-VM) ┌─────────────────────────────────────┐ │ /workspace ← project dir (rw) │ │ /root/.cache/pip ← cache (rw) │ │ │ │ $GITHUB_TOKEN ← if silo.toml │ │ allows it │ │ │ │ No access to: ~/.ssh, ~/.aws, │ │ ~/Library, keychain, other projects│ └─────────────────────────────────────┘ │ ▼ VM destroyed after exit (ephemeral mode) ``` ## 命令参考 | 命令 | 描述 | |---|---| | `silo install ` | 从 registry 或自定义镜像安装工具 | | `silo uninstall ` | 移除已安装的工具及其 shim | | `silo run [args...]` | 在短暂的沙箱中运行命令 | | `silo shell ` | 沙箱内的交互式 Shell | | `silo list [--available]` | 显示已安装或所有可用的工具 | | `silo init` | 自动检测项目并生成 `silo.toml`(实验性) | | `silo build ` | 自定义工具的虚拟机并持久化更改 | | `silo rebuild []` | 重新运行存储的设置脚本 | | `silo shim ` | 为工具添加、移除或列出 shim | | `silo lsp ` | 启动沙箱化的语言服务器 | | `silo ide ` | 为 LSP 生成 IDE 配置 | | `silo status` | 显示正在运行的虚拟机的状态 | | `silo cache report` | 按类别汇总磁盘使用情况 | | `silo cache list` | rootfs 缓存的逐条目视图(原始 / zstd / 两者) | | `silo cache gc` | LRU + 基于时间的驱逐(也支持 `--images`、`--tool-caches`) | | `silo cache compress` | 使用 zstd 压缩冷 rootfs 条目(约缩小 4 倍) | | `silo cache clean` | 强制清理 rootfs 缓存 / 容器 / 孤立文件 | | `silo clean` | 项目范围的回收(遵循 `silo.toml`) | | `silo pull` | 使环境与 `silo.toml` 保持一致 | | `silo reset` | 移除所有 silo 数据 | ## 首次运行引导 首次 `silo install` 会引导安装容器运行时(一次性,约 5 分钟): 1. **Linux 内核** — 从 [Kata Containers](https://github.com/kata-containers/kata-containers) 发布版下载(约 280MB) 2. **Swift 工具链** — 安装 [swiftly](https://www.swift.org/swiftly/) 和 Swift 6.3 快照以进行交叉编译 3. **静态 Linux SDK** — 交叉编译 vminitd for Linux 所需(约 290MB) 4. **vminitd** — 从 [containerization](https://github.com/apple/containerization) 源代码交叉编译 5. **initfs** — 包含 vminitd 的 ext4 文件系统镜像 所有构建产物都缓存在 `~/.silo/` 中。后续的工具安装只需拉取 OCI 镜像(几秒钟,而不是几分钟)。 使用 `--timing` 查看时间花费在哪里: ``` $ silo run --timing python --version [silo] config loaded: 5ms [silo] runtime ready: 6ms [silo] ephemeral completed: 1200ms [silo] total: 1211ms ``` ## 已知限制 - **仅限 macOS 26+ 和 Apple Silicon** — 需要 Apple Containerization 框架 - **首次安装需要约 5 分钟** — 下载内核、Swift 工具链,交叉编译 vminitd(一次性) - **无热启动虚拟机持久性** — 每个 `silo run` 都是一个全新的进程;计划推出后台守护进程 - **LSP/IDE 集成是实验性的** — 可能需要手动配置编辑器 ## 架构 Silo 构建在 [Apple Containerization](https://github.com/apple/containerization) Swift 框架之上。每个容器都是一个拥有自己 Linux 内核的轻量级虚拟机——而不是像 Docker 那样的进程命名空间。这提供了更强的隔离性: - 独立的内核(macOS 主机上的 Linux 客户机) - 除了显式挂载之外没有共享文件系统 - 没有共享进程命名空间 - 亚秒级启动时间 - 接近零的空闲开销 ## 许可证 Apache License 2.0 — 详见 [LICENSE](LICENSE)。
标签:AI编程助手, Apple Containers, Apple Silicon, EVTX分析, JSONLines, Linux虚拟机, NIDS, npm安全, pip安全, RAT防护, 临时环境, 代码执行安全, 企业安全, 凭证保护, 包管理器安全, 安全渗透, 容器化, 开发安全, 开发环境隔离, 微虚拟机, 日志审计, 沙盒, 环境变量隔离, 网络资产管理, 防横向移动, 防止恶意代码, 隔离执行, 零信任