Apple的Virtualization framework思考
虚拟化技术对比
在macOS(iOS)上,有以下几个技术流派:
VirtualBox : 非常古老但仍然在持续开发的跨平台虚拟化技术,我记得是Sun公司收购的一家开源虚拟化公司,后来随Sun一起被Oracle收购,不过始终保持开源。我使用不多,因为主要 KVM 更适合云计算。
Studio环境中的VMware Fusion 和 Parallels : 商业虚拟化软件,都非常著名,使用非常简便,缺点是需要不断升级才能适配(允许)在新版本macOS上运行。VMware Fusion现在已经免费,但Parallels依然收费(且昂贵)。
基于 QEMU 技术的开源虚拟机 macOS平台QEMU实现:UTM : 由于采用了全能的QEMU,utm可以说能够在 macOS / iOS 系统上运行任何操作系统。但是带来的缺点是虚拟化开销很大,我尝试在第一代iPad Pro上使用UTM安装Linux缓慢到让我崩溃,所以我还是放弃了。
基于从 bhyve(BSD hypervisor) 移植过来的 xhyve - macOS平台的KVM : 早期的macOS开源项目,类似于 KVM ,但是现在看起来随着 Apple Virtualization 发展,
xhybe
已经停止开发了,我感觉在闭源的 macOS/iOS 上,这块开源极难推进,无法得到苹果生态的支持最后就是现在Apple公司持续在开发演进的 Apple Virtualization ,实际上甚至不需要安装任何虚拟机软件,在XCode中通过简单的代码调用就能够运行虚拟机,并且是原生虚拟化性能是最佳的。目前可以看到能够发挥 Apple Virtualization 性能的开源虚拟机软件是 Lima: Linux Machines 和 Tart - 虚拟化工具集 :
Tart - 虚拟化工具集 是纯使用 Apple Virtualization 的开源软件,并且只支持 Apple Silicon 架构,也就是说理论上它是最轻量级(代码量少)最快速的(专注单一架构)。缺点是必须有最新的ARM架构的Apple设备
Lima: Linux Machines 是全能型虚拟化软件,也就是既支持 Apple Virtualization 又支持 QEMU :
优点:
所有的Apple设备都能运行,不管是Intel架构还是ARM架构,都能够运行各种操作系统,能支持VZ( Apple Virtualization )就用VZ,不能支持VZ就还是用传统的 QEMU
如果你只运行 Linux 并且专注于容器,那么 Lima: Linux Machines 几乎就是最好的选择
缺点:
选择
选择哪个虚拟化技术取决于你的物理设备和需要运行的虚拟机操作系统:
如果你使用最新的
Apple Silicon
硬件,并且只想运行 Linux 或 macOS ,那么恭喜你,你可以基于Apple最新最受支持的 Apple Virtualization 框架的多种虚拟化软件: Tart - 虚拟化工具集 / macOS平台QEMU实现:UTM / Lima: Linux Machines如果需要同时使用 Linux 和 macOS 虚拟机,那么选择 Tart - 虚拟化工具集
如果只运行 Linux 虚拟机,那么选择 Lima: Linux Machines > Tart - 虚拟化工具集 > macOS平台QEMU实现:UTM
底层技术都是使用 Apple Virtualization 所以性能和稳定性没有太大区别
Lima: Linux Machines 优势在于其项目目标是就是 Linux ,专注于便捷使用并且容器化运行(CNCF孵化项目),所以和Host主机结合完美,可以非常容易融合本地目录共享,后续使用 Colima 或者运行 Kubernetes 有社区很好的扩展支持
Tart - 虚拟化工具集 优势在于其目标只有 Apple Virtualization ,抛弃了旧版本Intel架构支持,所以轻装上阵,几乎就是最新Mac硬件和软件的结合体,对单纯运行Linux/macOS虚拟机十分便捷友好
macOS平台QEMU实现:UTM 最初核心是 QEMU ,逐步扩展支持了 Apple Virtualization 所以官方目前说明对 Apple Virtualization 支持有限测试不充分
如果你依然在使用古早的 Intel 硬件 Mac设备,那么选择就比较有限或者说得非常仔细地平衡选择:
如果需要运行 macOS 虚拟机,那么很不幸没得选: Tart - 虚拟化工具集 / macOS平台QEMU实现:UTM 都不支持Intel硬件的macOS虚拟机, Lima: Linux Machines 更是只能运行linux。不过, 天无绝人之路 你还是可以选择:
使用商业但免费的 在macOS中使用VMware运行macOS虚拟机 (我验证使用Apple开发者网站提供的Xcode示例项目手工 使用Apple Virtualization Framework运行macOS 无法在Intel架构硬件上运行,卒!)
如果只运行 Linux 虚拟机,那么选择 Lima: Linux Machines > macOS平台QEMU实现:UTM
在符合条件的硬件和软件环境下, Lima: Linux Machines 默认启用VZ虚拟化,专注于Linux虚拟化使得Lima社区发展专注而迅速,并且得到CNCF支持后,后续作为容器化运行底座,会有较好的发展前景,也适合后端技术磨练。
macOS平台QEMU实现:UTM 在交互界面上非常友好, QEMU 极大拓展了各种操作系统支持,并且有精心开发的GUI管理界面使得UTM更接近传统的虚拟化桌面软件。
两者底层技术几乎一致,区别主要在于社区发展方向
如果想要运行不同操作系统,特别是倾向于 Windows 虚拟化,那么 macOS平台QEMU实现:UTM 可能是唯一选择(另一个 VirtualBox 发展停滞所以并不推荐)
核心基于 QEMU 能够完美运行各种Windows版本,并且集成提供了开源驱动来加速Windows运行
备注
目前实践以及社区开源实现都验证了, Apple Virtualization 正在逐步抛弃Intel架构支持,无法实现原生虚拟化运行 macOS ,现在仅仅能够原生运行 Linux 虚拟机。总之,硬件不升级的话选择会越来越狭窄。
我的选择
没有完美的唯一,所以我还是根据自己的需要进行组合选择:
使用 Lima: Linux Machines 作为主力虚拟化:
由于目前我没有Apple Silicon硬件,所以要采用 Apple Virtualization
VZ
虚拟化引擎,采用 Lima: Linux Machines 不仅能够充分发挥我现有硬件的性能,而且也方便进一步实践和学习 Kubernetes / Docker (采用 Colima )少量场景,例如需要使用外接USB设备和运行 FreeBSD ,则在 Lima: Linux Machines 中指定 QEMU 引擎来完成,性能损失大一些,但是还能接受
Studio环境中的VMware Fusion 作为辅助虚拟化
采用 在macOS中使用VMware运行macOS虚拟机 完成一些实践学习
macOS平台QEMU实现:UTM 作为辅助虚拟化:
由于我很少使用 Windows ,所以 macOS平台QEMU实现:UTM 支持多种Windows系统的优势对我而言不重要
后续如果入手了 Mac Mini 2024 ,则采用 Tart - 虚拟化工具集 替代 Studio环境中的VMware Fusion 来运行 macOS ,实现性能最优化