Running Intel Windows 10 on an M1 Mac

Yes, it is, in fact possible (and in fact, it’s free, too). No, you will not be playing games on it. To get it to work, you will be emulating x86-64 instructions, rather than pure virtualization, which means it will be noticeably slower than running on an Intel based Mac.

To get it working, I took an existing VM that I had running in VMware Fusion on my previous Intel based Mac. The engine I am using is UTM, which is a nice front end for the qemu open source project. The instructions on the UTM site involve you doing some weird hoop jumping to create an ISO. There is a much easier way, if you already have a running virtual machine. If you have a Hyper-V virtual machine, you can just import the VMDX hard disk image directly in to UTM (though why you would use the unmitigated disaster that Hyper-V is I’m not sure…). If you are using VMware, there is one extra step. You have to convert the VMDK file to a VHDX image. I’m not sure why UTM requires this and will not use a VMDK directly, but there you go. Locate the VMDK file from your VMware VM inside the virtual machine folder. If you see a bunch of vmdk files inside with -## number extensions, then you need to go into VMware settings and uncheck the option to split it into 2GB chunks. You will also need to delete any snapshots you have to make sure you have the most up to date VMDK.

To convert the image, you are going to need the qemu-img tool from the qemu package. Unfortunately, UTM does not include the tool; only the library. For me, the easiest way to get the tool was to use MacPorts and “sudo port install qemu“. If you are a Home Brew user, you should be able to install their version.

The command to convert the image is:

qemu-img convert -f vmdk -O vhdx Windows-10-x64.vmwarevm/Virtual\ Disk.vmdk  Windows-10-x64.vhdx

Now that you have the vhdx image file, you create a new virtual machine in UTM, and choose “Emulate” for the type. Under Pre-Configured, choose “Windows”. Check “Import VHDX Image”, Check or Un-check “UEFI Boot” to match whatever was set in VMware, then “Browse” for the VHDX file you just created. And you are mostly good to go. Keep in mind that when you commit the virtual machine, it is going to convert the image into its own native format, so you will need enough space to have yet-another-copy. Another drawback of UTM is you do not get to pick where VMs live. It will store them in /Users/<your login name>/Library/Containers/com.utmapp.UTM/Data/Documents/, so make sure you have enough space there for the VM. There is probably a way to use symbolic links to house the VMs elsewhere, but I have not experimented with that so far.

You can set the amount of RAM you want to give to the VM, and the number of CPUs. I gave my 8GB of RAM, and left the CPU count as “Default”. For the drive interface, leave it as IDE. NVMe did not boot at all for me. IDE does, so I left it at that. I will update this if I get any of the other interfaces to work. I did change the port type of the CD drive to USB, and that works well.

At this point, you should be able to boot. There are two words that apply to this whole process: Be Patient. When it boots, you will likely be confronted by a very tiny screen. You will have to fumble your way through the tiny screen to get logged in. At this point, you will want to download the SPICE tools, and attach the ISO to the CD drive of the VM. Run that installer, and then reboot.

Now you can set the screen resolution to something less stupid, and actually use the VM.

Some Caveats/Tips:

  • Emulated virtual machines are going to be slow. Patience is a virtue.
  • Sometimes the machine will not reboot or shutdown completely. If you get a black screen with just the cursor, and it stays that way for a long time, just power the VM off.
  • You might want to uninstall VMware Tools while you are booted in VMware. When I tried to uninstall after, it left vestiges.
  • Since the hardware is changing significantly, Windows will need to be re-activated. Make sure you have your license key handy before you start the process.

6 thoughts on “Running Intel Windows 10 on an M1 Mac”

  1. thanks for sharing.
    I’ve been trying to get this to work but other than the “Starting windows” logo for about 5s I just get a black screen.
    would you have any suggestions to troubleshoot this further? I tried giving it more cpu/ram resources but didn’t seem to make a difference.
    I’m basically trying to run one of the vms from https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ but so far I couldn’t get any to boot 🙁

    Reply
    • Well, the first rule is to be VERY patient. Running it in emulation mode is VERY slow. Give it time, and it should catch up to you. It could take many minutes, especially on a first run. Windows is fairly slow on native hardware during that initial set up.

      I took a VM that was already configured, which helped with the load times, but even there, it takes a few minutes after entering the password to be usable.

      Reply
  2. Hi Scott.
    I’m having some troubles getting my Intel VMWare Virtual computer (running on an iMac5K Ventura) to run within UTM on my MBPro M1.

    I 1st exported the Intel VMWare Computer to OVF (which collects all the VMDK files into a single VMDK file).
    I next used your command (in the above article) to convert the VMDK file to VHDX file using qmeu-image. The conversion ran fine resulting in a VHDX file.
    I then copied that VHDX file from my iMac5K to my MBPro M1.
    I then fired up UTM on the MBPro M1 and, following your instructions above, created a new UTM virtual and imported the VHDX file.

    Sadly the new UTM virtual won’t boot properly. It starts the load process (which shows the UTM logo on a black screen with the load commands at the top of the screen.
    After a little bit of time the following Windows error message appears in a normal Windows Blue Screen:
    YOUR DEVICE RAN INTO A PROBLEM AND NEEDS TO RESTART.
    WE’LL RESTART FOR YOU.
    STOP CODE: SYSTEM THREAD EXCEPTION NOT HANDLED
    WHAT FAILED: prl strg.sys

    Once the error occurs the virtual machine is automatically rebooted which then starts an automatic repair/diagnosis process.
    The Windows “Automatic Repair” screen eventually appears with the standard “RESTART” and “ADVANCED OPTIONS” buttons.
    Pressing the “RESTART” button simply goes thru the above all over again.
    Pressing the “ADVANCED OPTIONS” button brings up all of the Windows Repair Options:
    “CONTINUE”, “USE A DEVICE”, “TROUBLESHOOT” and “TURN OFF YOUR PC”.
    The “TROUBLESHOOT” button then brings up the “RESET THIS PC” and “ADVANCED OPTIONS” buttons.
    The “ADVANCED OPTIONS” buttons brings up all the Windows Repair buttons, including the “COMMAND PROMPT” button which, when pressed, drops me into a Windows Command screen/prompt.

    The above tells me that Windows is getting partially started but not completely.

    Any help/advice would be greatly appreciated.

    Reply
    • I believe “prl_strg.sys” is related to Parallels. Did you have the Parallels drivers installed? Before conversion, you should uninstall any virtualization drivers (VMware, Parallels, etc) to avoid conflicts. Most likely it is looking for some resource that is no longer there, and causing the boot to fail. I don’t use Parallels (I loathe subscriptions), so I cannot test my theory. If removing those drivers does not fix it, let me know and I’ll do my best to help.

      Reply
  3. Thanks for the great article! I tried to follow it and ended up in the infinite repairing loop, but I went back to the VM, deleted VMware tools and a few other MS apps I never use, converted to vhdx and it booted up! The other difference was that I unchecked RNG, but I doubt that was the difference. Really appreciate you taking time to explain how to do this.

    Reply
    • Thanks! I haven’t written it up yet, but you can also use the site https://uupdump.net to create an ARM based Windows 11 ISO, and then create a VM with VMware (and probably UTM) with that. The ARM version runs MUCH faster, and has a Rosetta like layer that lets you run many Intel apps, and they run much faster than when emulating the processor for the entire OS. I have a Windows 11 ARM VM running in VMware Fusion, and I used the same Windows 10 key I used in UTM with the Intel version to activate it.

      Reply

Leave a Reply to Jeff Rosengarden Cancel reply