Mac OS is a great operating system to some, the biggest headache to others. No doubt OS 11 screwing VoiceOver Notifications over is a big gripe for many in the accessibility community, and the way they sandbox or limit the OS has gotten increasingly locked down. Despite this, the framework which Mac OS well, Mac OS, has not changed. A powerful kernel built on Uni gives it an edge for power users. Braille displays work the moment you plug them in. You can do things with Homebrew and other advanced Python things since it’s so closely in the OS. And yet with each version, the possibility of running it on X86 hardware dwindles. As Apple moves over to their M-series chips, we must face the fact that Intel support will be dropped in an upcoming version. Maybe not tomorrow, or even 2 years from now. However, consider this as one of the last versions we will probably get to also virtualise on Intel machines. That’s a bit sad, but the truth as Arm performance through Intel is really slow and horrible. Not to mention that the chips are custom made anyway. So enjoy this guide and run it on your machine anyway. It might be the last and only time you get to do this before another era ends. And Mac OS just turns into iOS desktop. You know it’s coming, you read it here first.
Why use VMWare?
You might be wondering why we’re going with a closed-source solution in which USB support on Mac is flaky. It’s true. People do have their liking for virtual box, but this may be even less suitable for new users. I highly recommend VMWare for newer users, even if the hardware support is not so great.
A note about using WSL2 and VMWare
It’s important to say that WSL2 (Windows Subsystem for Linux v2) and virtualization programs just don’t work well together. This is because using WSL2 enables a hypervisor, which takes over a lot of the processor access running Mac may require. In general, you may notice much slower performance or lag when running this with hypervisors that could conflict VT-D access. Please uninstall and make sure all components of the Hypervisor are removed before proceeding. This can be a time-intensive process, as just doing it through “manage optional features” won’t work. You will need to do Some command-line magic to remove the hypervisor such as mentioned in that article.
A highlight of the process
So here’s a quick rundown on what we have to do in order to make this successful.
- Our steps
- Install VmWare Player
- Grab an ISO of Mac OS
- Unlock the VMWare product using an unlocker to accept non-server Mac versions.
- Generate unique Mac OS device values to be used by the virtual machine
- Make changes to the VMWare configuration file
- Finally, boot it up!
A note about licensing by Apple
By Apple’s EULA (end-user-license agreement,) you are forbidden from running Mac OS on non-Apple hardware. You are, however, allowed to virtualize it provided you have official Apple hardware. I myself own a Macbook Pro and air, and this guide could apply equally to someone getting Mac to run on Fusion machines. The process for getting an ISO of the installer becomes a lot more difficult if you don’t own a Mac. Some might be floating around out there on the internet, but there’s no knowing these weren’t tampered with unless you check the hash to an existing disk image ISO. Be careful when downloading files online, and if the virtual machine is already made and has a user account included, you also have less idea on if any scripts are placed within startup items to compromise that machine. Common sense. It’s better to either find a trusted ISO or build it yourself (as described here,) and in this guide I will be assuming more so that people also have a working Mac, as this does not violate licenses. So know that this guide was written in mind more for existing Apple users who want to use this OS also on a Windows laptop or machine, and not as a “hackintosh” guide meant for Windows-only users.
Grab what we need
We will need at least 3 or 4 different files to get started with.
- What we need
- Grab a copy of VMWare Player 16 at the very least. Note that those on Windows 7 will need version 15, not 16, as compatibility was dropped.
- Grab A copy of the Auto unlocker file from this page. There should be a corresponding Windows download there for the latest release. You’ll need this to unlock your install, so be sure to save it.
- Download a copy of The Mac Serial generator script which is similar to the above link. You will need to save this as well, there’s a win32 version listed there.
- You can find links to existing ISO files of Mac OS if you wish, or generate your own in the below section from a Mac (recommended.) Unfortunately I cannot provide links to existing ISO files here, mainly because it’s a responsibility and linking to a 3rd-party ISO could lead to either the file moving, getting changed, or the contents being different from the integrity I’m expecting. At this moment, there are ISO files out there of OS 11.0.1, as well as 10.15.7 or 10.15.5. You’ll need an ISO as the installer media to load into the virtual machine. It might also be possible to download a DMG and use a software like AnyBurn to convert it over to an ISO. There are many good and free utilities which can convert DMG to an ISO file, so this approach could be used.
Creating your ISO within Mac OS
As I mentioned, you can reliably create an ISO from another Mac and this will boot within VMWare. To do this, you will need to run a few terminal commands. First, grab a copy of Big Sur from the App Store. You can even grab Catalina installer even on Big sur, it will just warn you that you are downloading an older version of the OS. Regardless of the version, the commands required to convert the image are the same, just replace big\sur with the single word of the other version. (Catalina, Mojave, etc) Mountain Lion had two words, so the \ will be needed.
- What you’ll need to do within Terminal
- Open terminal from the utilities folder of your applications.
- The terminal should open to your home folder. Type the following commands (you can copy / paste from here)
hdiutil create -o /tmp/MacBigSur -size 12500m -volname MacBigSur -layout SPUD -fs HFS+J
diutil attach /tmp/MacBigSur.dmg -noverify -mountpoint /Volumes/MacBigSur
sudo /Applications/Install\ macOS\ Big\ Sur/Contents/Resources/createinstallmedia –volume /Volumes/MacBigSur –nointeraction - This will ask for your admin password. Note that the volume name can be made anything besides “MacBigSur” – this is just what we’re calling the volume, but it’s only for when we’re copying over the install files. The size can also be made smaller than 12500M for earlier OS releases. For example, Catalina is no more than 9100. Choosing a different size can change the ISO properties.
- Type these commands next:
hdiutil detach /Volumes/MacBigSur/
hdiutil convert /tmp/MacBigSur.dmg -format UDTO -o ~/Desktop/MacBigSur.cdr
This last step will convert our image to ISO, after dismounting it from being attached to the Mac. Now the only thing left to do is move the .cdr file into an ISO:
mv ~/Desktop/MacBigSur.cdr ~/Desktop/BigSur.iso
And that’s it! You now have an ISO file on your desktop, ready to be transferred over with a flash drive. From this point on, we will go forth assuming you have an ISO file either created on a MAC, or downloaded from elsewhere.
Making the magic work: Installing our Player / Workstation
Now, go over to that VMWare player you downloaded, or if you have a full license of workstation, be sure to install and activate it. When installing either product, it’s a good idea to check the “enhanced keyboard driver” check-box. This does speed up input by a little, and is a check box right before the “ready for installation” screen.
After it is installed, don’t launch workstation or player. Workstation will provide you a choice to enter your product key before the finish button, so you can do it without opening the product.
We will need that auto-unlocker file you downloaded. Inside the archive, there’s a .exe file. After extracting it, be sure to run this application in administrator mode. It will bring up a terminal window, with info on the download and patching process. Let it complete.
Now for the fun parts
You will need to now open up that VMWare player or Workstation copy. You should be greeted with some welcome steps, but eventually be in an empty list with no virtual machines. Press CTRL+N to create a new machine.
- What we need to do
- choose “custom”
- Leave “compatible with” with the highest version you have.
- Next, select “install or disk image file” and choose the ISO you have moved over to your PC from a Mac.
- Now you will be asked for the Guest operating system. Choose “apple Mac OS X”, then the correct version in the drop down in the next box. If “apple Mac OS X” is not showing up there, the unlocker didn’t work, so go back to the other step. Maybe troubleshoot by grabbing The command-line Unlocker that also requires Python before you run And try it as an alternative. The main thing is that you should have Mac OS listed there.
- Type a name for the machine on the next screen.
- Choose the CPU cores here. It’s bet to either use a slightly lower or the same number of cores as present in your physical machine.
- Next, choose your Ram capacity. At minimum, OS X can run on 4 GB, but really 8 should be the gold standard you are looking for. This is because all modern Macs have this as base ram. You may need a computer with 16 or more gigabytes, if you want to run Windows and Mac comfortably side by side.
- On the ethernet screen, leave it at NAT.
- Stick with LSI Logic for the type of the control for now.
- Next, we need to change some of the HDD settings. In the radio group, Choose “NVME” to provide the VM with an emulated SSD through PCI express.
- It is your choice to store the hard disk as a single or multiple files. Single files have the benefit of containing all data in one .vmdk file. Multiple files are useful if you wish to store parts of the machine on different drives, which can maximize performance especially if they are split well in parallel. This is your choice. I recommend at least 120-150 GB size of a disk for Mac OS, but it can run fine with 60 or 70 and give you some room to install things. You will first be asked if you want to import an existing disk or make a new one, so choose “new disk” and decide on that following screen.
- That’s it! Our machine is now created. Take note of where the virtual machine is being saved, as you’ll need to find and open that folder to edit the .vmx file.
Now we need to change a few of the options related to the CPU. If you know virtualization is not enabled in your firmware, you can skip this step and give it a go. Again, performance may get impacted. To check whether virtualization is enabled, open msinfo32 in a run dialog, and check the bottom of the screen. It should say yes to “virtualization enabled in firmware.” If it’s not, you might want to go into the BIOS of your computer and change it. Some models of computers, like HP or Lenovo, have a Windows-based BIOS configuration utility which allows you to export the BIOS configuration as a text document, and then re-import it into the application. These are a godsend if you are blind, and use them well. Not all computers support it, but with UEFI-based systems, there are more increasing options for virtualization being enabled by blind folks.
- Change things within the player before booting your VM
- Press CTRL+D to open up the virtual machine settings.
- Next, go to “processor.”
- Tab to the Intel or AMD VT-x check box. Also check some of the other choices “virtualize Iommu” check box. Performance counters, too. These last two may not be supported by all processors, and with AMD systems, it may actually be a disadvantage to check them since Mac OS is not optimized for AMD performance counters and such.
- We next need to go to the Options tab, and make sure “enhanced keyboard” is set to “required.” This will improve our keyboard performance.
That’s all we need to change in settings, so it’s safe to close the dialog with “OK” and exit the window completely.
Editing the VMX File
Now your mission is to find the VMX. Hunt it down. This is harder to do if you don’t have “show file extensions” enabled in file explorer options. You may want to do this even if temporarily, because many files have the same name in the virtual machine folder, and you won’t know which the correct one is. Typically, virtual machines are stored in your documents folder, so look there and open up the folder name of the machine you just made.
We will need the serial generator tool. Open up a command prompt by typing CMD in the run dialog. If the Macserial32.exe file is on your desktop, it’s the easiest to open. Otherwise you will need to find it by manually moving into each folder. If it’s on your desktop, we would type “CD desktop”. To go to the \ (main folder,) type cd\. Without the period or dot symbol, of course. Do this until you get to your macserial32.exe file location.
To generate a list of Mac serial numbers, you need only one command.
Macserial 32 -a >serials.txt
This may return no output, or some type of warning. Either way, when you open up the folder now in Explorer, you will see a “serials.txt” file there. It should be around 56 kilobytes in size, and contain a list of Mac models with two sets of numbers.
Think about what Mac would closest match your system. Base this off of processor, computer type, etc. After you have looked it up, be sure to find the identifier of that Mac. Like Macbookair7,1. Once you know this, you can search the .txt file for this information and the info will uniquely be generated for that machine. There are hundreds of models there.
Now go back to the .vmx file. It’s important to add product information, as otherwise your Mac won’t activate with iMessage.
Just move to the bottom of the VMX file. But before you do that, look for any lines with the word “reflect.” So do a search for reflect, and delete those lines. One of those is about reflecting host for SMBIOS, This should be deleted as we will be adding another command making it false. None of these newly added things can be in the file more than once. So be sure to double check only one version or instance of that command exists there.
What we need to add. Please also note that if you are running this on a physical mac, set all of the reflect properties to true and you won’t need to add any other info or fill out other fields. VMWare will just grab thee from your Apple device directly. This could be useful if you are wanting to run another instance of Mac (perhaps an earlier or later one) in a virtual environment, without it impacting your mac. Since you could be using Fusion in that instance, the file to edit is a bit different. You will have to go to “show package contents” on the virtual machine, for example. However, the format and information in the data is the same regardless. You could also run Mac OS under a Bootcamp environment, where you have Mac under Windows at the same time. If you’re more comfortable with WIndows, this could be a better option than running Windowson the Mac side. The flexibility is endless, even on Apple hardware.
SMBIOS.noOEMStrings = “true”
hw.model.reflectHost = “false”
serialNumber.reflectHost = “false”
board-id.reflectHost = “false”
efi.nvram.var.ROM.reflectHost = “FALSE”
serialNumber = “xxx ”
board-id = “xxx”
hw.model = “your-chosen-mac-model”
efi.nvram.var.ROM = “3c0754a2f9be”
efi.nvram.var.mlb = “XXX”
Replace the XX in the quotes, of course. It won’t work otherwise. Here’s how you get those:
- What to replace
- Serial number: The first set of numbers and letters next to the model.
- board-id: Check this link for a huge table of board IDs. The board-id starts with Mac-xxxx, and the entire phrase needs to go there (including Mac!)
- efi.nvram.var.mlb: Use the second set of numbers next to the generated list of Apple serials.
Save the file, and you can just press enter on it to open it in Workstation or Player. Cross your fingers, make sure your I’s are dotted and T’s are crossed exact to term. If it doesn’t open or complains at you to remove it from the library, check the file for missing quotes, and double entries. These are generally the two things to look for to fix errors like that.
Boot it up!
What, you made it this far? Thank you! Now it’s time to start the machine and hope things load OK. VMWare shouldn’t complain at you, but if it does, it could be things related to the CPU we just changed (disable some of them to see if it works.) Either way, in a matter of a few minutes, it should boot to “install Mac OS” and you should be able to run Command+F5 to start VoiceOver, or else just press next to bring up the utilities screen.
You will need to open disk utility, and format the now empty virtual disk as APFS, Case sensetive. Choose Disk Utility first, then press “erase” after arrowing to the internal disk. This is fairly simple, keeping at the same options for GUID partition table and APFS for the system.
To fix some USB issues
This section will be expanded as I find out more info, but sometimes changing the USB controler to a 2.0 compatible one within the virtual machine can solve this problem. Try that first, other StackOverflow articles to follow at some point below.
To fix sound studdering / being choppy
Make sure SMC Version is not set to 0 in the VM. In system information, check to see if “SMC version” says 2.8,” you should have a slightly faster system management controler which helps minimize these to some degree. I did find other sound parameters you are able to add to your VMX, some of which I will list below.
sound.bufferTotalMS = “30”
sound.bufferTime = “20”
sound.bufferIdealMS = “15”
Sound.priorityBoost = “true”
Conclusions
With the right tools, a bit of patience, and some time to tune things up, getting Mac to run virtualized on a Windows machine is not too difficult to do. Gone are the days of finding .kext files for a Hackintosh, because Apple is moving away from Kernel extensions anyway. Although, OpenCore remains a great and viable bootloader if that’s the route you want to take. Just be aware that running Mac on bearbones hardware is much more difficult than virtualizing it in the first place. a VM platform can provide you with a bit more uniform hardware, something Apple itself does with their own products.