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

x86_64

The primary target, and the one the release is built around.

Building

nix build .#kernel        # or .#kernel-debug
nix build .#kexts
nix build .#kc
nix build .#image-minimal # or .#image for the full desktop image
nix run .#vm              # or .#kvm

What works

Boot and core system. Boots to a zsh prompt from an ext4 root, on QEMU and on real hardware. launchd, XPC and notifyd run; ioreg, sw_vers and the rest of the userland work.

Filesystems. ext4 as root, with a journal, UBC coherence and a recursive filesystem lock. HFS+ works too; image-hfs uses it both to bisect against ext4 and to give macOS users an image they can actually mount. msdosfs and apfs are present.

Networking. DHCP end to end through IPConfiguration, unicast DNS through mDNSResponder, and curl in the guest. Drivers for e1000 (PDE1000), Realtek 8111 and virtio-net.

Graphics. Real Xorg from the xfree86 tree, on IOGOPFramebuffer through the project’s own xf86-video-puredarwingop driver. Mesa provides llvmpipe for OpenGL and lavapipe for Vulkan, both software rasterisers, with virgl as the default renderer when the host offers it. There is a working OpenGL.framework over OSMesa, GLX reports GL 4.6 on llvmpipe, and vkcube renders on lavapipe.

Desktops. Xfce on X11, and sway on wlroots for Wayland, with Xwayland for X clients. image-wayland is a Wayland-only build with the X client stack removed.

Applications. Wine runs GUI applications (notepad, winecfg on X11, explorer under sway through winewayland.drv). GTK3, WebKitGTK in progress, dillo, netsurf, xterm and the usual X utilities.

Toolchains in the guest. cmake, ninja, meson, clang, tcc and rustc all run on PureDarwin itself, which is what makes in-guest development possible at all.

Audio. RavynHDAudio against Intel HDA.

Known rough edges

  • Some hardware needs the workarounds listed in Running on real hardware, notably the AMD PCI window and bridge aperture issues.
  • libm’s pow() is inaccurate for fractional exponents. Avoid it in ports until pd_libm_pow.c is fixed.

Hardware support

Storage over AHCI, ATA, NVMe and USB mass storage; USB through EHCI, OHCI, UHCI and xHCI; PS/2 and USB input; Intel gen9 (Skylake, Kaby Lake, Gemini Lake) framebuffer modesetting through lil; virtio block, net and GPU.