Tart:在 macOS 上使用 Apple 原生 Virtualization.Framework 的虚拟机

开发者正在审视 Tart,这是一款封装 Apple Virtualization.framework 的 macOS 工具,可运行 macOS 和 Linux 虚拟机,并通过容器注册表分发镜像,作为在 Apple Silicon 上自动化 CI 和开发环境的一种简化方式。讨论的大部分焦点集中在性能和架构权衡上——ARM 上运行 x86 时的虚拟化与完整仿真、Rosetta 2 在 Linux VM 中运行 Intel 二进制的作用、macOS 上文件系统与 Docker 的性能,以及 8GB 机器现实中能被推到什么程度。许可也是争议点之一,Tart 采用非 OSS、按核心计费的“Fair Source”模式,使一些人更倾向于选择开源替代方案,如 UTM、Lima/Colima、VirtualBuddy,或自定义 QEMU 配置。

Tart 概览及其卖点

  • 一个 CLI 工具,封装 Apple 的 Virtualization.framework,用于在 Apple Silicon 上运行 macOS 和 Linux 虚拟机。
  • 关键区别点:为虚拟机镜像使用 OCI/容器注册表,使工作流类似容器镜像(构建、推送、拉取、复用)。
  • 用户称赞其简洁的 CLI、易于脚本化,以及集成能力(Packer 插件、GitLab/Buildkite、CI)。
  • 尤其受到重视的是可复现的 macOS 测试环境,以及从 IPSW 快速启动到 VM 的能力。

许可与商业模式

  • 采用类似 Fair Source 的许可证,组织按核心数计算“席位”;个人使用和小型服务器安装在核心数限制内免费。
  • 一些人认为该许可证限制性/令人困惑,担心组织合规问题,并不喜欢这种类似“BSL”的非 OSI 条款。
  • 也有人指出 LICENSE 和网站写得很明确,商业用户应始终检查条款。
  • 较早版本使用的是 AGPLv3;这些提交仍保留在仓库中,可复用或 fork。

虚拟化 vs. 仿真 vs. 容器

  • 长篇子讨论在争论术语:
    • 一方认为:按当前行业用法,“虚拟化”意味着在宿主机 CPU 上直接运行客户机代码(相同 ISA),与仿真不同。
    • 另一方认为:从历史上看,仿真是虚拟化中的一种技术;这些类别彼此重叠,而营销扭曲了术语。
    • 普遍认同容器是不同的(操作系统级隔离,共享内核),不过也有人指出现代容器栈底层使用了虚拟化。

Apple Silicon 上的 x86_64 与 Rosetta

  • 多个解释指出:完整的 x86 操作系统客户机需要仿真;Rosetta 风格的二进制转换只适用于用户态,不适用于内核。
  • 推荐做法:运行 aarch64 Linux VM,并在 VM 内使用 Rosetta 2(通过 Apple 文档支持的方式)或类似机制来运行 x86_64 二进制;这比完整系统 QEMU 仿真快得多。
  • 用户反馈 UTM 的 x86_64 仿真在重负载下“几乎不可用”;原生 ARM VM 则表现良好。

生态对比与替代方案

  • 提到的替代方案包括:Apple 自家的 Virtualization/Hypervisor 框架(自己动手)、virt、Lima/Colima(偏 Linux)、UTM、VirtualBuddy、Viable、VMTek、OrbStack、Multipass。
  • Tart 的独特之处主要被认为是 macOS 客户机支持,加上镜像注册表工作流与 CI 工具链。
  • 有人认为只要愿意投入时间,用 QEMU/Hypervisor.framework 也能获得大部分功能;也有人看重 Tart 打磨过的 UX。

性能、硬件与开发体验

  • 对 macOS VM 和 Docker 的文件系统性能存在担忧;VirtioFS 已有所改善,但仍落后于原生 Linux。
  • 建议:使用 Mutagen 之类的同步工具;或完全在 Linux VM 内运行 Docker。
  • 关于 8GB 内存是否足够存在争论:有人报告工作负载流畅(甚至视频编辑),也有人认为现代 IDE 和大型项目无法使用,并建议 VM 密集型/开发用途至少 16GB 起。

使用场景与法律说明

  • 广泛用于 Mac CI、测试管理/工作流、类似 macOS DEP 的注册场景,以及快速启动进入 Recovery 以调整安全设置。
  • 在 GHCR 上发布 macOS 镜像引发了疑问;一条评论引用了 macOS EULA 中关于“Permitted Developer Services”(如 CI)的例外条款,不过 Tart 目前尚不支持分层。
  • macOS 客户机的 GPU 直通仅限于准虚拟化 GPU;是否适合 LLM 工作负载尚不明确。