Youssef
26710d37c7
orchard: macOS on QEMU, on a Linux host
...
Boots an arm64 macOS guest on QEMU/TCG on Linux through the genuine Apple
chain -- AVPBooter -> iBootStage1 -> iBootStage2 -> stock XNU -- and renders
its desktop on the host's Vulkan.
QEMU (1044 lines over 18 files, 8 new):
* the `apple-vm` machine: Apple-style timer-on-FIQ wiring, the paravirtual
GPU device, a PAC master key installed across CPUs, and GICv2m's
`macos-compat` bit, without which macOS will not use the MSI frame;
* `bdif` NVRAM block writes. Upstream drops them, so a guest could never
persist a boot variable and every install phase repeated forever;
* `cfg`'s guest-visible random seed at its fixed offset;
* Apple pointer authentication under TCG: the register definitions come
from ChefKissInc/Inferno, the per-core key snapshot and the PSCI CPU_ON
key inheritance (restricted to a kernel caller by testing that its pc is
in the TTBR1 half) are ours. Without them secondaries run keyless and the
first cross-core authentication recurses through its own panic path;
* portability work upstream has not needed before: CONFIG_VMAPPLE was gated
on HVF and shipped off, hw/vmapple/aes.c has a VLA that only compiled
under clang, and the architectural op1-to-minimum-EL assertion rejects
Apple's IMPDEF registers.
The GPU is steelbrain/reims-vgpu, carried as a submodule pinned to the commit
this was tested against; the two changes it needs are in patches/reims-vgpu/.
The AVPBooter patch is NyanSatan's, from Virtual-iBoot-Fun.
Nothing Apple ships is in this repository. The macOS image is fetched from a
public tart image, and Apple's VM firmware is extracted from that image, where
Virtualization.framework carries it -- so no Mac is involved in the setup.
Measured on the reference host: desktop in 75 s at 12 vCPUs and 10 GB.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Youssef <soosef.youssef@gmail.com>
2026-09-20 00:53:26 +03:00
..
export
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
monitor
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
accounting.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
aio_task.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
amend.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
backup.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
blkdebug.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
blkio.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
blklogwrites.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
blkreplay.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
blkverify.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
block-backend.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
block-copy.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
block-gen.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
block-ram-registrar.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
bochs.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
cloop.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
commit.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
copy-before-write.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
copy-before-write.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
copy-on-read.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
copy-on-read.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
coroutines.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
create.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
crypto.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
crypto.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
curl.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
dirty-bitmap.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
dmg-bz2.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
dmg-lzfse.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
dmg.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
dmg.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
file-posix.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
file-win32.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
filter-compress.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
graph-lock.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
io.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
io_uring.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
iscsi-opts.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
iscsi.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
linux-aio.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
meson.build
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
mirror.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
nbd.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
nfs.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
null.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
nvme.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
parallels-ext.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
parallels.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
parallels.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
preallocate.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
progress_meter.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qapi-system.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qapi.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2-bitmap.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2-cache.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2-cluster.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2-refcount.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2-snapshot.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2-threads.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qcow2.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qed-check.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qed-cluster.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qed-l2-cache.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qed-table.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qed.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
qed.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
quorum.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
raw-format.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
rbd.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
replication.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
reqlist.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
snapshot-access.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
snapshot.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
ssh.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
stream.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
throttle-groups.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
throttle.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
trace-events
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
trace.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vdi.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vhdx-endian.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vhdx-log.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vhdx.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vhdx.h
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vmdk.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vpc.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
vvfat.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
win32-aio.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00
write-threshold.c
orchard: macOS on QEMU, on a Linux host
2026-09-20 00:53:26 +03:00