If are a developer who recently got a Mac with Apple Silicon, one of the unexpected pain points you might have is that your toolchain around containers and virtualization could break. As explained in a Gingko Bioworks blog post, macOS and Docker support for emulating 64-bit Intel (
x64) at the instruction level has improved since the launch of the first M1 chips in mid-2020, but you can occasionally can into low-level compatibility issues where such low-level emulation fails. In such situations, you will need a solution that provides full machine-level virtualization and emulation.
QEMU and UTM
QEMU is a mature open-source solution for machine-level emulation, but is notoriously difficult to set up.
Fortunately, there is a nicely packaged app solution wrapping QEMU for macOS, namely UTM. As far as I can tell, there are free (download only) and paid versions for macOS (the paid version through the App Store automatically updates), and paid app versions that run on iOS and iPadOS on Apple Silicon.
Step-by-step instructions for running Windows 11 in UTM
Thankfully, full machine emulation is no longer necessary for running Windows, so long as you are willing to run the preview builds of Windows 11 on ARM64.
Nevertheless, UTM is a convenient way to use Windows through a virtualized image.
If you are part of the Microsoft Insider Program, you can download Windows 11 images for ARM64 architectures to run on UTM.
I found the official UTM instructions to be rather clunky, so here are my step-by-step instructions which worked for me.
Download the latest version of UTM from the website or install it through the App Store.
The version I downloaded was 4.1.5 (74).
Download the latest Windows Insider Preview image from Microsoft.
It’s best to choose the latest build which is usually on the Dev channel.
I’ve had problems with the Beta channel where the images are so old that they expired and would not run.
The version I downloaded had build number 25276.
You should have a downloaded image in VHDX format.
From the main UTM app screen:
a. Select ‘Create a New Virtual Machine’.
b. Under ‘Start’, select ‘Virtualize’.
c. Under ‘Operating System’, select ‘Windows’.
d. Under ‘Windows’, check ‘Import VHDX image’. All the checkboxes should be selected.
e. Under ‘Boot ISO image’, select the VHDX file downloaded previously.
Continue setting up the VM. The default settings are OK but represent minimal requirements.
In my experience, increasing the RAM allocation to 8GB or more will greatly improve performance.
Start the new VM you just created but do not proceed through the usual setup.
Instead, on the first welcome screen of Windows setup:
Shift+F10 to get a command prompt.
b. Enter the command
OOBE\BYPASSNRO. This will restart Windows setup enabling the option to skip the requirement for an active network connection. The networking functions won’t work until you install the SPICE tools.
c. Windows setup should restart and you can proceed to set up Windows as desired.
d. At ‘Let’s connect you to a network’, select the option ‘I don’t have internet’ next to the ‘Next’ button.
Continue setting up Windows as desired.
When Windows setup completes, go to
D: in Explorer, which should have the SPICE guest tools ISO already mounted. If not, you can click the CD icon on the title bar and select ‘Install Windows Guest Tools…’
a. Run the
b. When asked for permission to run, select ‘Yes’.
c. Click through the rest of the setup menu as desired.
d. Select the ‘Reboot now’ option and click the ‘Finish’ button.
Windows should now restart.
a. Go to the start menu and type ‘Check for updates’.
b. Download and install any updates.
You should now be good to go.
Windows Update will break: need TPM
On the current version of UTM/QEMU, Windows Update will not update the Windows build, even when you sign into the Windows Insider Program.
You will get a warning that says “Your PC does not meet the minimum hardware requirements for Windows 11. Your channel options will be limited.”
This is because Apple Silicon machines don’t come with Trusted Platform Module (TPM) chips,
and while software emulators like swtpm exist which can work with QEMU,
the default configuration of QEMU through UTM’s defaults does not implement support for the Trusted Platform Module (TPM).
If you’re interested in trying to set up emulated TPM, have a look at the GitHub thread for details.