Current limitations on macOS virtual machines running on Apple silicon Macs

This is a draft summary of the limitations of lightweight virtualisation of macOS on Apple silicon Macs, using the macOS API in late versions of Ventura and early Sonoma, VMs designated VirtualMac2,1. As a rule, limitations are fewest and features richest when virtualising the most recent version of macOS on a Mac also running the most recent version. Not all virtualisers give access to every available feature.

Supported VMs

  • macOS Monterey 12.0 to 12.6.1 installed from IPSW only. It’s not possible to update beyond 12.6.1, though, as the update process becomes locked and never completes.
  • macOS Ventura 13.0 to 13.5.2 (and presumably later updates) installed from IPSW, or updated from an earlier release of Ventura.
  • macOS Sonoma betas (and presumably later release) installed from IPSW.

Note that, as Apple doesn’t provide IPSW images for security-only updates, it’s not currently possible to run macOS 12.6.2 or later. This leaves all Monterey VMs vulnerable to security bugs that have been fixed in its security updates since 12.6.1.

Concurrent VMs

viableb10vm2

Virtualisation enforces Apple’s licence limit of running no more than two macOS VMs simultaneously on the same Mac, even if it has sufficient cores and memory to run more. This is set in the kernel, and isn’t easy to overcome. VMs also can’t nest VMs inside them.

Note that running two VMs concurrently requires that they have different Machine IDs, so they can’t be clones of one another, and they must have different MAC addresses, or only one of them will be able to access the network.

Intel code support

Rosetta 2 can be installed to allow them to run translated Intel code, just as on the host.

File sharing

Shared folders are only available in Ventura and later VMs. Transferring items using drag and drop is available in all VMs by using Screen Sharing or ARD.

Serial number

The virtualiser allocates each VM a unique Machine ID, which is used to determine its serial number. While Viable lets you create VMs with identical Machine IDs, thus the same serial number, it’s currently not possible to set the serial number of your choice.

Networking

All VMs can be run using either NAT or bridged networking, as determined by their configuration when run. NAT gives them a local IP address on a different subnet, not externally accessible, and is inflexible; bridging assigns them their own IP address on the network, which can be configured as if the VM was a separate Mac, and is generally preferred. The MAC address can also be set at runtime, to ensure that the address isn’t a duplicate.

Apple ID isn’t supported in VMs, and they can’t be connected to iCloud Drive or support apps using CloudKit. This means that VMs can’t run the great majority of App Store apps, apart from Apple’s free products such as Numbers, Pages and Keynote. However, apps that use licence checks independently of the App Store and iCloud should work normally, particularly with bridged networking.

Input devices

VMs currently don’t support the full ISO keyboard, with its additional key being non-functional. You can work around this by using Screen Sharing or ARD, and configuring the host with the desired ISO layout.

Trackpad support is limited, and no Trackpad settings are offered in the VM. Fuller trackpad controls and gestures can be added by using Screen Sharing or ARD.

VoiceOver controls need to be disabled on the host before trying to use VoiceOver on the VM. Trying to use VoiceOver concurrently on both the host and VM isn’t good news.

I have been unable to determine whether audio input is supported, although it doesn’t currently seem to work in my code.

Display

Support is provided for a wide range of display resolutions to accommodate most needs, although at times getting this right can be a matter of trial and error. Sonoma introduces an auto-scaling option that fits Sonoma guests into any window size in a crisp image. This is a major improvement, but is only available in macOS 14 VMs running on a macOS 14 host.

Shared clipboard

The shared clipboard to allow copy and paste between host and VM currently appears non-functional, at least when using Apple’s example code. Work around this by using Screen Sharing or ARD.

Other peripherals

Most access to peripherals and other drivers is handled through a limited range of VirtIO devices, and doesn’t give direct access to USB or Thunderbolt; Apple has added new device support in Sonoma that may provide greater flexibility in future.

Local storage

The most noticeable limit to performance is when writing to the VM. This is because it’s stored in a disk image, which imposes overhead. However, performance is close to native when accessing shared folders on the host. Those shares need to be configured before starting a VM, and currently there doesn’t appear to be support for resizing a VM after it has been created.

Recovery mode

Guest macOS can be booted into Recovery, but there’s no support for hardware Diagnostics. Recovery enables you to change the VM’s startup security settings, and to disable SIP when you wish.

I welcome any additions and corrections.