DiskImageKit can put a copy-on-write layer on an image and remembers what each layer sits on. Use that to freeze the contents of a drive: the layer holding what the guest has written so far is closed off under the name of a snapshot and a fresh one is opened above it for further writes. Layers are kept beside the image as `<image>.<name>.asif`. A layer whose snapshot is deleted cannot be merged away while other layers are stacked on it, so it is only marked as unlinked and is swept once nothing needs it. Attachments are built through the same path so that a drive with layers is opened as the whole stack, and a disposable run adds its throwaway layer on top of it. A stack is only ever opened whole. When one of its layers cannot be read the drive is not attached at all: opening the rest without it would hide what it holds, and falling back to the bare image would write underneath every layer stacked on it. For the same reason a layer to write to is always put in place before the one it replaces goes, and the image under a stack cannot be resized. Nor can a drive with layers be attached read only, which a stack cannot be, or before macOS 27, which cannot read the layers: the image alone is the drive as it was before the first snapshot. Removable media never has layers. Assisted-by: Claude:claude-fable-5-1 Assisted-by: Claude:claude-opus-5
UTM
It is possible to invent a single machine which can be used to compute any computable sequence.
-- Alan Turing, 1936
UTM is a full featured system emulator and virtual machine host for iOS and macOS. It is based off of QEMU. In short, it allows you to run Windows, Linux, and more on your Mac, iPhone, and iPad. More information at https://getutm.app/ and https://mac.getutm.app/
Features
- Full system emulation (MMU, devices, etc) using QEMU
- 30+ processors supported including x86_64, ARM64, and RISC-V
- VGA graphics mode using SPICE and QXL
- Text terminal mode
- USB devices
- JIT based acceleration using QEMU TCG
- Frontend designed from scratch for macOS 11 and iOS 11+ using the latest and greatest APIs
- Create, manage, run VMs directly from your device
Additional macOS Features
- Hardware accelerated virtualization using Hypervisor.framework and QEMU
- Boot macOS guests with Virtualization.framework on macOS 12+
UTM SE
UTM/QEMU requires dynamic code generation (JIT) for maximum performance. JIT on iOS devices require either a jailbroken device, or one of the various workarounds found for specific versions of iOS (see "Install" for more details).
UTM SE ("slow edition") uses a threaded interpreter which performs better than a traditional interpreter but still slower than JIT. This technique is similar to what iSH does for dynamic execution. As a result, UTM SE does not require jailbreaking or any JIT workarounds and can be sideloaded as a regular app.
To optimize for size and build times, only the following architectures are included in UTM SE: ARM, PPC, RISC-V, and x86 (all with both 32-bit and 64-bit variants).
Install
UTM (SE) for iOS: https://getutm.app/install/
UTM is also available for macOS: https://mac.getutm.app/
Development
macOS Development
iOS Development
Related
- iSH: emulates a usermode Linux terminal interface for running x86 Linux applications on iOS
- a-shell: packages common Unix commands and utilities built natively for iOS and accessible through a terminal interface
License
UTM is distributed under the permissive Apache 2.0 license. However, it uses several (L)GPL components. Most are dynamically linked but the gstreamer plugins are statically linked and parts of the code are taken from qemu. Please be aware of this if you intend on redistributing this application.
Some icons made by Freepik from www.flaticon.com.
Additionally, UTM frontend depends on the following MIT/BSD License components:
Continuous integration hosting is provided by MacStadium


