使用Apple Virtualization Framework运行Linux

苹果macOS内建的 Virtualization Framework 可以运行原生硬件加速虚拟机,支持Apple Silicon和Intel架构,Guest操作系统可以是Linux或macOS。简单来说,通过苹果官方提供的样例代码,可以在 Xcode 中运行起Linux或macOS虚拟机,如果要更为方便的运行方式,则可以使用基于Virtualization Framework的 Tart - 虚拟化工具集 虚拟机软件。

备注

安装的Linux ISO镜像必须选择匹配自己主机CPU架构,对于Apple silicon,需要使用ARM架构Linux ISO镜像;对于Intel Mac,则下载amd64的Linux ISO镜像。

如果在Apple silicon架构主机上的ARM Linux中运行Intel Linux二进制程序,Virtualization framework可以通过Rosetta translation环境来支持这个功能 - Running Intel Binaries in Linux VMs with Rosetta

准备工作

  • 操作系统必须是 macOS 13.0+ ,并安装好 Xcode 14.0+

  • 按照 Running GUI Linux in a virtual machine on a Mac 下载 RunningGUILinuxInAVirtualMachineOnAMac.zip ,解压缩

  • 按照Host主机macOS的架构,下载一个Linux安装ISO镜像,我在 MacBook Pro 2018 (Intel架构)上实践,下载的是 Debian 最新发行的 debian-12.9.0-amd64-DVD-1.iso

配置案例代码项目

备注

Running GUI Linux in a virtual machine on a Mac 苹果官方提供的样例代码是默认部署在 macOS 14上的,如果要在其他macOS版本上部署,需要调整对应的 deployment target

我的实践是在 macOS 15.2 上完成, Xcode 16.2

  • 使用Xcode打开下载的源代码 GUILinuxVirtualMachineSampleApp.xcodeproj 项目

  • 点击左方 Project Navigator 中项目名称 GUILinuxVirtualMachineSampleApp ,然后在 Signing & Capabilities 面板中,将 Team 修改为你的账号 Team ,例如我的设置是 Huatai Huang(Personal Team)

../../_images/run_linux_in_apple_virtualization-1.png

修订 Signing & Capabilities

  • 点击 Build Setting 面板,将 Deployment Target 修订成你实际需要运行的Host主机操作系统,例如我这里修订为 macOS 15

../../_images/run_linux_in_apple_virtualization-2.png
  • 另外,Xcode提示做修订 Enable hardened runtime

../../_images/run_linux_in_apple_virtualization-3.png
../../_images/run_linux_in_apple_virtualization-4.png
  • 点击 Build and run ,完成编译后运行,此时会在用户目录下创建一个 GUI Linux VM.bundle 目录存储虚拟机,并弹出一个对话框让你选择安装Linux的ISO镜像。选择已经下载好的 debian-cd_current_amd64_iso-dvd_debian-12.9.0-amd64-DVD-1.iso ,此时虚拟机就进入了Linux图形安装界面

../../_images/run_linux_in_apple_virtualization-5.png

和常规debian安装相同,最后完成安装后点击安装界面最后的完成按钮,重启debian,就能在虚拟机环境中看到一个运行的debian。安装过程非常丝滑。

安装以后可以执行 Debian精简系统初始化 构建一个可用开发工作环境

在debian guest虚拟机中 shutdown 之后,就可以将我们前面步骤编译好的 GUILinuxVirtualMachineSampleApp.app 复制到 /Applications 目录下进行安装:

  • Xcode项目导航栏中的 Products >> GUILinuxVirtualMachineSampleApp.app 图标,选择 Show in Finder ,这样打开Finder文件管理器,可以看到目录下有一个非常小巧的文件 GUILinuxVirtualMachineSampleApp.app ,复制到 /Applications 目录下就完成了安装。这样后续就像启动一个应用程序一样,点击一下鼠标启动 debian 虚拟机

../../_images/run_linux_in_apple_virtualization-6.png

备注

这是一个非常简单的部署过程,借此机会能够一窥 macOS 内置的Virtualization能力。

如果需要更为方便完美的部署运行方式,建议使用 Lima: Linux Machines ,同样支持 Apple Virtualization Framework ,所以能够得到相同的性能,但是更为便捷。

参考