苹果芯片 Mac 的“2 台虚拟机天花板”,被一位开发者捅破了

苹果为什么给 macOS 虚拟机设一道“2 台门槛”
如果你在 Apple Silicon Mac 上跑过 macOS 虚拟机,大概率会碰到一个很让人扫兴的场景:第三台刚想启动,系统就冷冰冰甩来一句——虚拟机数量超出限制,最多只能同时运行 2 台。对于普通用户来说,这可能只是个边缘问题;但对做测试、做自动化、做企业部署的人来说,这几乎等于在工作台上焊了一把锁。
这道限制并不神秘。从许可协议层面,苹果早就写得很明白:每台已经运行 macOS 的苹果电脑,最多再开两个 macOS 虚拟实例,用于开发、测试、服务器或个人非商业用途。法律文本一贯克制而无聊,但落到工程实践里,它的后果非常具体——你明明买了一台性能强得离谱的 M2 Pro 或 M2 Max,CPU、内存、SSD 都没喊累,虚拟化框架却先替你说“不行”。
这件事的讽刺感也在这里。Apple Silicon 时代的 Mac,恰恰是最适合跑轻量、高性能虚拟化的硬件之一。苹果自己也提供了 Virtualization.framework,UTM、Parallels 这些工具都能站在这套框架上工作。换句话说,苹果不是不会做,也不是没给路,而是在路口摆了个收费栏杆。技术上能跑,策略上不让你多跑,这比“压根不支持”更让开发者心痒。
真正的限制,不在应用层,而在内核深处
这次把事情闹明白的,是开发者 Khronokernel。他原本以为,限制应该藏在 Virtualization.framework 里,毕竟报错就是从这个框架抛出来的。结果翻了半天用户态代码,发现那里只有“通知你超限”,没有“决定你超限”。这就像商场广播告诉你停车场满了,但广播室并不负责数车位。
线索最终指向了 XNU,也就是 macOS 的内核。更准确地说,是 Apple Silicon 专属的虚拟化栈。在对比 Intel 与 Apple Silicon 内核差异后,Khronokernel 锁定了 hv_vm_* 这一组函数,并在开发版内核里找到了关键变量:hv_apple_isa_vm_quota。这个变量会在虚拟机创建和销毁时增减,相当于内核里那个真正负责数车位的计数器。
更有意思的是,作者还发现了隐藏的启动参数:hv_apple_isa_vm_quota=。从字面看,这东西简直像苹果工程师留在机房门后的备用钥匙——你只要能让系统接受这个 boot-arg,就能覆盖默认的虚拟机配额。开发版内核里,这个功能通过 hypervisor= 开关启用;而在正式版内核里,苹果又多套了一层 AppleInternal 检查,也就是只有内部设备或特定安全配置才能直接享受这条“后门”。
这很苹果。它不是把功能完全砍掉,而是把它包进一层又一层的安全和身份验证里。对外是“我们不支持”,对内是“其实能做,但请不要随便碰”。从产品管理角度看,这种做法可以理解:既遵守许可策略,也给内部测试、系统验证和工程团队留够空间。可从开发者视角看,这种半开放状态最让人五味杂陈,因为你知道门在那儿,只是门把手不在你这边。
一次“合法边缘”的极客操作:换上开发版内核
接下来这部分,就开始有点硬核了。Khronokernel 选择的路径不是去粗暴修改正式版内核,而是给机器换上开发版 Kernel Collection,再通过恢复模式关闭 SIP、允许自定义 boot-args,并设置 hv_apple_isa_vm_quota 参数,把虚拟机配额提高到 0xFF,也就是 255。
这不是普通用户会在周末下午顺手完成的操作。它要求 KDK,也就是 Kernel Debug Kit,版本必须和当前系统严格匹配;要求用户知道自己的芯片对应哪种内核变体;还得进 recoveryOS 改启动策略。中间任何一步出错,都可能导致机器无法正常启动,或者后续系统更新变得异常麻烦。说白了,这更像一场内核实验,而不是一个“下载即用”的破解脚本。
但实验成功了,而且成功得很有画面感。作者在一台 M2 Pro MacBook Pro 上同时跑起了 9 台 macOS 虚拟机,机器依然可用,只不过风扇终于肯转了——这句调侃很有生活气息,也很能说明问题:此前的 2 台限制,并不是 Apple Silicon 硬件的物理上限,而是苹果人为设置的软件闸门。
这也是这篇研究最有价值的地方。它不是为了鼓励所有人绕开官方限制,而是用一种非常工程化的方式证明:Apple Silicon Mac 的虚拟化潜力,远远高于苹果默认放出来的那一档。对自动化测试、兼容性验证、多版本系统回归测试这类工作来说,这意味着一台高配 Mac 本可以承担更多任务,而不是早早把工作分摊到多台设备上。
这件事为什么在今天格外重要
放在 2023 年以及之后的时间点看,这件事其实踩中了一个很现实的行业背景:Apple Silicon 正在成为越来越多开发者和企业 IT 团队的主力平台。过去几年,Mac 从“设计师的机器”“iOS 开发者的机器”,慢慢变成“能进 CI 流程、能跑测试集群、能当轻量基础设施节点的机器”。尤其是在 iPhone、iPad、macOS 生态越来越一体化之后,macOS 虚拟机的重要性比 Intel 时代只增不减。
问题在于,苹果对 Mac 的定义,依然偏向一台精致、稳定、面向个人体验的终端设备,而不是一台你可以随意折腾成小型实验农场的通用计算平台。这和微软、Linux 社区,甚至部分服务器厂商的思路都不太一样。苹果当然会提供框架、工具和接口,但总会在关键位置提醒你:控制权最终还是在我手里。
这也是 Apple Silicon 时代最值得讨论的矛盾之一。一方面,苹果的软硬一体让虚拟化效率很高;另一方面,它又通过许可、SIP、安全策略和封闭内核把能力圈得很紧。对普通消费者来说,这未必是坏事,系统更稳、更少踩坑;可对专业用户和研究者来说,Mac 正在变成一台“性能非常强,但主权没那么完整”的机器。
和 Parallels、VMware 所在的传统 PC 虚拟化世界相比,Apple Silicon 的 VM 生态明显更年轻,也更受苹果意志影响。Intel Mac 时代,很多事情你还能通过成熟的 x86 工具链和更开放的历史遗产来解决;到了 ARM Mac,苹果几乎重写了规矩。谁能跑、怎么跑、跑多少,越来越像由平台方说了算。这种趋势,不只发生在 Mac 上,也映射到整个消费电子行业:设备越强,平台越封。
一个让人兴奋,也让人警惕的信号
我对这件事的感受其实很复杂。一方面,看到开发者从内核里把隐藏能力一点点挖出来,最后让 9 台 macOS VM 同时启动,那种“终于把机器榨出真本事”的快乐,任何折腾过系统的人都会懂。它提醒我们,很多看似绝对的产品边界,其实只是厂商做出的商业和管理选择,并不总是技术极限。
但另一方面,这种方法的代价同样明显:你要牺牲系统更新便利性,要面对 SIP 关闭后的额外风险,还要接受这是一条不被官方支持、随时可能被堵上的路。更关键的是,它碰到了一个灰色地带——技术上可行,不代表许可上无争议。尤其对企业用户来说,“能不能做到”和“适不适合规模化采用”从来是两回事。
真正值得追问的问题或许是:苹果未来会不会把这个能力更正式地开放出来?比如针对开发者计划、企业测试集群或者 Xcode Cloud 之外的本地自动化需求,给出更高的虚拟机上限,或者提供某种授权通道。我的判断是,短期内不太乐观。苹果一向不喜欢把内部调试能力轻易产品化,尤其当这件事会触碰许可边界和安全模型时,它更可能继续维持“内部可用、外部克制”的策略。
不过,这篇研究至少做成了一件很重要的事:它让外界知道,那道“2 台限制”并非天经地义,也不是 Apple Silicon 的能力天花板。对开发者社区来说,知道真相本身就是一种力量。哪怕今天还只是极客能走的小路,明天也未必不能变成行业推动苹果改变策略的起点。