## 突破 Apple Silicon 上的 macOS 虚拟机限制
几个月来,作者一直在研究 Apple Silicon Mac 上一个令人沮丧的限制:无法同时运行超过两个 macOS 虚拟机 (VM),使用的是 Apple 的虚拟化框架。最初认为这个限制是由 Apple 的软件许可协议强制执行,并且是在用户空间实施的。然而,深入研究表明,这个限制实际上是在封闭源代码的 XNU 内核中实现的。
关键在于一个内核变量 `hv_apple_isa_vm_quota`,以及 macOS Monterey 引入的一个隐藏启动参数 `hv_apple_isa_vm_quota=`。 尽管 Apple 后来使用系统完整性保护 (SIP) 保护了它,但作者通过启动自定义开发内核成功绕过了它。
这涉及到使用 Apple 的内核调试工具包构建自定义内核集合,并修改恢复操作系统设置以允许自定义启动参数并禁用系统完整性保护。这使得可以覆盖 VM 配额,从而使作者能够在 M2 Pro MacBook Pro 上同时运行九个 macOS 虚拟机。
虽然这个解决方法需要手动干预并使操作系统更新复杂化,但它展示了爱好者和研究人员突破 Apple 施加的 VM 限制的途径。作者计划进一步探索优化方案,可能通过内核扩展开发,以及未来研究 VM 注册和序列号覆盖。
## APL:从数学符号到开创性的编程语言
APL 最初由肯尼思·艾弗森于 1957 年在哈佛大学开发为一种数学符号,后来演变成一种革命性的编程语言。与 20 世纪 60 年代大多数专注于特定任务的语言不同,APL 侧重于数组处理,并提供了一种独特的简洁、符号化的方法。艾弗森 1962 年的著作《一种编程语言》详细介绍了这种符号,最初的目的是描述算法,而不是执行它们。
IBM 于 1960 年与艾弗森等人合作,于 1966 年创建了 APL\360——一个用于 System/360 主机机的完整、交互式编程环境。这个版本具有开创性,提供了分时能力和定制键盘,以适应其非常规符号。
计算机历史博物馆现在提供 1969-1972 年 APL\360 “XM6” 版本的源代码(37,567 行),供非商业用途使用。APL 的影响超越了其直接使用,影响了形式化系统描述等领域,并启发了 J 等语言。尽管经常因其神秘的性质而受到批评,但 APL 培养了一种独特的编程风格,并仍然是艾弗森对强大、富有表现力的计算工具的愿景的证明。