Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Targets

PureDarwin builds for five machine targets. x86_64 is the primary one; the rest are at varying stages of bringup, and all but the Pi Zero reach a shell.

TargetPrefixBoots to a shellDisplayPage
x86_64noneYesXorg and Wayland, llvmpipe and virglx86_64
arm64 QEMU virt-arm64, -arm64-virtYesramfb console; Xorg starts, GL currently brokenarm64 virt
arm64 Raspberry Pi 3-arm64-bcm2837YesFramebuffer consolePi 3
arm64 T8010 (iPad 6)-arm64-t8010YesOn-screen console, framebuffer inherited from iBootT8010
armv6 Pi Zero-arm32-bcm2835Not yet, reaches dyld-Pi Zero

All of them use ext4 as the root filesystem, boot through a kernel collection (except armv6, which uses a prelinked kernel), and run the same launchd and userland. The differences are the platform expert, the kext list, and how the kernel gets loaded.

Most of the kernel and kext tree is architecture-independent, which means ARM work regularly breaks x86 without anybody noticing until an image fails to boot. Run an x86_64 regression build after touching shared XNU or kext code. This is the single most common way a working tree stops working.