ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何在 iPhone 和 Mac 上免费运行 Windows 与 Linux:UTM 虚拟机完整指南

如何在 iPhone 和 Mac 上免费运行 Windows 与 Linux:UTM 虚拟机完整指南

如何在 iPhone 和 Mac 上免费运行 Windows 与 Linux:UTM 虚拟机完整指南

【免费下载链接】UTMVirtual machines for iOS and macOS项目地址: https://gitcode.com/gh_mirrors/ut/UTM

手上有个只支持 Windows 的老软件,或者想在手机上重温一套 x86 经典游戏,但设备本身装不了——这类事以前只能放着不管。UTM 虚拟机 解决的就是这个问题:它是一个跑在 iOS 和 macOS 上的免费开源虚拟机,基于 QEMU 完整模拟整个系统,Windows、Linux、甚至 macOS 客户机都能跑,iPhone、iPad、MacBook 都支持。

它是什么:一个基于 QEMU 的跨 Apple 平台虚拟机

UTM 的定位一句话能说清:把 QEMU 的整机模拟能力,装进原生 Apple 应用里。它用 QEMU(含一个针对 Darwin 平台定制的 fork)做模拟引擎,前端用 SwiftUI 重新实现,所以 macOS 12 以上和 iOS 15 以上都能用同一套界面管理虚拟机。

和同类工具放在一起看,差异比较直观:

对比对象UTM 的差异点
Parallels / VMware 等桌面虚拟化软件它们只覆盖 Mac 一侧;UTM 同一套界面同时覆盖 iPhone、iPad 和 Mac
Docker 等容器方案容器共享宿主内核、只跑单一架构;UTM 模拟完整系统,x86_64、ARM64、RISC-V 等 30 多种处理器架构都能开
早期手机上的模拟器 App多数只能跑单款老系统;UTM 是通用模拟器,什么 ISO 都能装

另外两点值得提:macOS 版可以调用 Hypervisor.framework 做同架构硬件加速,还能用 Virtualization.framework 启动 macOS 客户机;整个项目免费开源,没有订阅和付费解锁功能。

第一次跑起来:从克隆仓库到启动第一台虚拟机

整个流程分三步。

第一步,拿到项目源码。仓库带有 QEMU 等子模块,克隆时加--recursive一次拉全:

git clone --recursive https://gitcode.com/gh_mirrors/ut/UTM

第二步,构建出可安装的应用。仓库自带 Xcode 工程,macOS 上的依赖可以用scripts/目录下的build_dependencies.sh生成,或直接用预编译产物解压到仓库根目录;构建完成后运行scripts/package_mac.sh即可打包成 DMG 安装文件(详细说明见 Documentation/MacDevelopment.md)。

第三步,在应用里开第一台虚拟机。启动 UTM 后点"新建虚拟机",向导会按"选操作系统 → 分配 CPU/内存 → 创建磁盘 → 导入 ISO 并启动"的顺序走,每步都是下拉框和滑块,基本不需要手工改参数。创建出来的虚拟机是一个.utm文件夹,整个拷贝走就能迁移。

核心能力怎么用

跨架构模拟:想在 ARM 设备上跑 x86 系统

这是 UTM 最核心的能力。QEMU 的 CPU 模拟部分会模拟完整的 MMU 和设备,所以你在 Apple Silicon 的 iPhone 上完全可以创建一台 x86_64 的虚拟机,装 Windows XP 或老版本 Linux。做法是在新建向导里把"操作系统"和"架构"选好(比如 Windows + x86_64),再挂载对应的 ISO 即可。跨架构走的是 QEMU 的 TCG 动态编译加速,可用但不快;同架构(Apple Silicon 上跑 ARM Linux/Windows on ARM)则明显更快。

Mac 上的硬件加速:性能从"能跑"到"流畅"

在 Mac 上创建同架构虚拟机时,UTM 会自动接入 Hypervisor.framework(即 QEMU 的hvfaccelerator),把模拟开销压到接近原生;Apple Silicon Mac 上跑 macOS 客户机则直接走 Virtualization.framework,这是目前移动端/桌面端都罕见的组合。不需要额外配置,只要选对架构,创建完成后速度差距一眼可见。

网络与外设:虚拟机不只是个孤岛

网络在 Configuration/UTMQemuConfigurationNetwork.swift 里对应四种模式,界面上直接选:

  • 共享(NAT)模式:默认,虚拟机出网上网最简单,宿主通过端口转发访问虚拟机里的服务;
  • 桥接模式:虚拟机获得局域网独立 IP,适合要跑服务给别人访问的场景;
  • 主机模式:宿主与虚拟机间隔离的私网,只走虚拟网卡通信。

图形和剪贴板走的是 SPICE 协议(QXL 显卡 + SPICE agent),所以宿主机和虚拟机之间可以互相复制粘贴、文件拖放,USB 设备也能重定向进虚拟机,这些在设置页里逐项开关就行。

几类典型用法

办公与怀旧

  • 跑只有 Windows 版本的老软件:在 Mac 上开一台 x86_64 Windows 虚拟机,装上那个不再更新的行业软件,日常主力系统不动。
  • 手机上玩经典游戏:iOS 设备创建一台 x86 虚拟机装 Windows XP,装好游戏后用手指操作,性能要求高的游戏建议换到 iPad 或 Mac 上跑。
  • 临时环境:不想在主力系统里装的东西,扔进虚拟机用完销毁。

开发与学习

  • 跨架构测试:Apple Silicon Mac 上同时开 x86_64 和 ARM64 两台 Linux,对比同一套代码在两种架构下的行为。
  • 操作系统实验:学 OS 原理时,在虚拟机里自由装系统、改内核、做快照回滚,搞坏了直接恢复。
  • 多系统并行:一台 Mac 同时挂 macOS 客户机(Virtualization.framework 路径)和 Linux 虚拟机,配合共享文件夹同步代码。

常见问题与调优建议

为什么 iPhone 上比 Mac 上慢很多

原因是 iOS 系统限制应用动态生成代码(JIT),QEMU 最关键的 TCG 加速在越狱前的 iOS 上无法完整启用。应对办法有三档:能越狱就开 JIT;不行就装 UTM SE 版本(它用线程化解释器替代 JIT,速度低于 JIT 但免越狱,支持 ARM/PPC/RISC-V/x86 架构);最求性能就换 Mac 跑。

为什么虚拟机没有外网

现象是装上系统后 ping 不通、打不开网页。原因是网络模式选成了主机模式,或 NAT 模式下客户系统网络服务没起。先到设置里确认网络模式是"共享(NAT)",再回虚拟机内检查网卡是否启用。

为什么磁盘占用越用越大

用动态分配磁盘时,写过的空间不会自动缩回,且关机不等于清理。解决办法:定期在虚拟机内部清理临时文件,对不再需要的时间点删掉快照,重要虚拟机可以导出后重新导入以整理碎片。

配置上的几条建议

  1. 内存别贪多:轻量 Linux 给 1–2GB 就够,Windows 给 2–4GB,留足给宿主本身,分配过多反而互相拖累。
  2. 磁盘选 qcow2 动态分配:实际占用随写入增长,比预分配的裸镜像省空间。
  3. 同架构优先:能在 ARM 设备上跑 ARM 客户系统,就别选 x86_64,这是性能上差距最大的一项设置。
  4. 虚拟机文件夹放高速存储上:磁盘 IO 是虚拟机的常见瓶颈,外部存储要选快的。

从哪开始

别先追求"能跑 Windows",先做一件最小的事:打开 UTM 新建向导,选一个 32 位的轻量 Linux ISO(比如 Alpine),给 1 个 CPU、1GB 内存、20GB 动态磁盘,点启动,看引导过程完整走一遍。跑通之后,再按 Configuration/ 里的配置项逐项去调,你会发现这台"手机里的电脑"能做的事,比预期多得多。

【免费下载链接】UTMVirtual machines for iOS and macOS项目地址: https://gitcode.com/gh_mirrors/ut/UTM

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进