In the recent past I (unfortunately) found myself in need of a Windows 11 system. I needed to test if something I was working on in PowerShell 7 on macOS would run natively under Windows PowerShell 5 on Windows 11. I really wish that Microsoft would just fully deprecated Windows PowerShell and only support PowerShell Core, but that’s not very Microsoft-y. I initially thought I would throw a VM on an admittedly older ESXi development environment that I have access to, but the new security requirements for Windows 11 weren’t at all being met by this particular ESXi environment. Instead, I looked to running the VM on my Mac.
I really only need this VM to periodically test running some PowerShell things, so my goal was to keep things as simple as possible. While doing a bit of research before just jumping right in to some of the hypervisors I’ve worked with before like VirtualBox, I found several articles highly recommending UTM, which I had never heard of before. As described on their website:
UTM employs Apple’s Hypervisor virtualization framework to run ARM64 operating systems on Apple Silicon at near native speeds. On Intel Macs, x86/x64 operating system can be virtualized. In addition, lower performance emulation is available to run x86/x64 on Apple Silicon as well as ARM64 on Intel. For developers and enthusiasts, there are dozens of other emulated processors as well including: ARM32, MIPS, PPC, and RISC-V. Your Mac can now truly run anything.
I later discovered that there’s actually a version for iOS, though it must be sideloaded for full functionality. Obviously that wasn’t relevant for me since I just wanted to use it on my M2 Pro MacBook Pro. Under the hood, UTM is based around the venerable QEMU and seems to just add a lot of quality of life features into the UI running on top of it. That sounded a lot like exactly what I was looking for, so I decided to give it a shot.
After downloading the ARM-based .iso file for Windows 11, setting up the basic VM through UTM was simple just following on the on-screen guide for anyone who has experience building VMs. After first booting my brand new VM from the mounted .iso file, the installation initially kicked off as expected with the normal Windows prompts on what edition of the OS to use, what partition it should be installed on, etc. The installation also kicked off fine, but I ran into my first of two snags after the first reboot during the installation. Immediately after rebooting, my VM was hung on a black screen with the UTM logo that simply said: Start boot option
Nothing I did seemed to make a difference at this point within the VM; no combination of hitting keys that I could think of would cause it to proceed, give me a boot menu, etc. After a little bit of digging around the web, it seemed that my VM was failing to realize that it had reached a point where it should have been booting from the virtual hard disk rather than the virtual USB drive with the Windows installation media. To work around this, I shut down the VM and then cleared the virtual USB from having anything mounted to it:

After this, the installation proceeded as expected when I booted the VM back up. The next snag came shortly after the installation finished, however. One of the quality of life things that UTM does is automatically mount on a virtual drive some installation media for their helper drivers that allow VMs to work better within the UTM environment. When I logged into my account right after the installation of Windows 11 was complete, the installer for these helper tools kicked off. I clicked to confirm the installation and waited a few moments. Right after the installation of those drivers completed, my VM’s display went dark with a message: Guest has not initialized the display
This seemed pretty strange since the display had just been working right up until the installation of UTM-specific drivers. Rebooting the machine from UTM’s controls made no difference; on a fresh boot I would actually be able to hear Windows 11 reach the login screen, but I couldn’t see anything. After some more online research, I saw some mention of issues with the virtual graphics card that UTM had chosen by default. I admittedly hadn’t paid any attention to what the options were and what had been selected prior to the installation of the UTM drivers, but the selection that didn’t seem to be working for me was: virtio-ramfb-gl

I shut down the VM and tried swapping it to one that someone else had mentioned having better luck with: virtio-gpu-go-pci. After another boot, I once again had a functioning display.
Other than these two hiccups with my installation, everything has been fine since. I admittedly won’t need this VM for a ton and will have a fairly simple use case, but it seems to do a great job of streamlining the installation process, especially for an OS with as many requirements as Windows 11.