Explainer: Virtualisation and Rosetta 2

Until recently, virtualising a machine and its guest operating system on a Mac has been complex, and something we’ve turned to Parallels, VMware, or other software to do all the work to run an older version of macOS, Windows or Linux. This started to change in Big Sur, and is very different when you’re running Ventura on an Apple silicon Mac. Here I explain what you can and can’t do.

Computers consist of common types of hardware: CPU cores, storage, displays, and input devices such as a keyboard, mouse and trackpad. Operating systems like macOS, Windows and Linux provide layers of access to that hardware to the apps running on them. What virtualisation does is provide a host environment which lets you run a different operating system with access to your Mac’s hardware, by running as a layer between the guest operating system and hardware drivers.

What it doesn’t do is convert the instructions in an app, or guest operating system, to run on a different processor architecture: that’s a quite different problem that I’ll return to below.

Since Big Sur, on both Intel and M1 Macs, macOS itself has provided excellent support for virtualisation. This makes it much simpler to create an app which can, for example, run Mojave on an Intel Mac running Monterey. Parallels and VMware have still had their advantages, though, in providing support for important features like Metal-accelerated graphics and giving full access to host facilities.

Because so many operating systems run on Intel processors, virtualisation on Intel Macs has had many advantages. It can run macOS and OS X from many years ago, all regular editions of Windows, and almost any Linux distro you might care for. In contrast, virtualisation on M1 Macs has been limited to operating systems which run native on ARM processors, and has only been able to run software within them that has been built to run native on ARM processors, not Intel.

Apple silicon Macs do have a tool for translating Intel binary code into instructions for ARM processors: Rosetta 2. But it can’t convert whole operating systems, so you can’t virtualise an Intel machine on Apple silicon hardware. Not only that, but all the executable code you want to run in that virtual machine also had to run native on ARM processors, until Ventura. One of the most significant new features in macOS 13 is that it can use Rosetta 2 to translate Intel binaries to run inside an ARM-native virtualised Linux.

That’s potentially very important to some users, but confusing to many others. To help make this more clear, the following summary spells this out explicitly:

  • Intel Macs running Ventura can run virtual machines with an Intel guest operating system, including macOS and OS X, regular versions of Windows, and Linux distros. Within them, they can run Intel binaries, but not ARM code.
  • Apple silicon Macs (M1 and M2 series) can run virtual machines with an ARM-native guest operating system, including macOS 11 and later, Windows for ARM (although that may be a breach of its licence), and ARM-native Linux distros. Windows for ARM has its own method for running Intel binaries, and Rosetta 2 can be used to run Intel binaries in ARM Linux.

When Ventura ships, I expect there’ll be dozens of virtualisation apps to do this, as the code required is so simple. It will be interesting to see how Parallels and VMware respond to this. If you’d like to see for yourself how easy it is to create and run virtual machines in Ventura, there’s an excellent WWDC presentation, and its comprehensive documentation is already available here.

Congratulations to Apple’s engineers, not only for making this so straightforward, but above all in their thorough documentation.