Skip to content
 
 

Repository files navigation

PEGPU

PEGPU carousel preview

Installation Manual

Important

PEGPU Installation and Documentation

To install and use PEGPU, refer directly to the official website:

https://pegpu.com

The PEGPU website is the primary resource for:

  • application descriptions
  • latest release downloads
  • installation manuals
  • setup warnings and compatibility notes
  • illustrative screenshots
  • practical usage instructions

Warning

Important upfront warning

PEGPU requires installing an experimental kernel driver extension that has not yet been notarized by Apple. As a result, System Integrity Protection (SIP) must be disabled before PEGPU can be installed.

To disable SIP:

  1. Shut down your Mac.

  2. Press and hold the power button until startup options appear.

  3. Select Options to enter Recovery Mode.

  4. Open Terminal from the menu bar.

  5. Run the following command:

    csrutil disable
  6. Restart your Mac normally.

Important: Understand and consider the security risks of disabling SIP before proceeding.

About PEGPU

PEGPU is an experimental macOS application for running NVIDIA Thunderbolt eGPUs through a Linux VM on Apple Silicon Macs. It is built as two related applications with an explicit license and architecture boundary.

Applications

  • PEGPU.app is the Swift/AppKit launcher, UTM-derived embedded SPICE GUI display side, ANGLE/CocoaSpice integration, AI/runtime router, file/port/terminal UI, sidecar metrics, and host-side orchestration layer.
  • PEGPU Machine.app is the separate QEMU/VFIO/DriverKit runtime application. It owns the patched QEMU launcher, macOS DriverKit host extension, firmware/runtime payloads, Linux guest-driver packages, and its own notices/source bundles.

The combined installer may install both apps into /Applications, but the repositories, notices, source archives, and runtime responsibilities stay separate.

License And Source Boundary

PEGPU.app's own application source code is distributed under the permissive Apache License, Version 2.0. PEGPU uses a split related to UTM's app/runtime separation, but goes a step further: the frontend, AI runtime control surface, display client, routing, and orchestration live in PEGPU.app, while the GPL-covered Machine/QEMU runtime lives in the separate PEGPU Machine.app. The app-side display runtime includes SPICE, GLib, GStreamer, ANGLE, CocoaSpice, UTM-derived GUI display work, and related support libraries. Release packages carry the installed PEGPU.app distribution legal bundle, including scoped license blocks and corresponding source/provenance archives, inside:

/Applications/PEGPU.app/Contents/Resources/PEGPURoot/legal/generated

PEGPU Machine.app is distributed from openresearchtools/PEGPU-machine. It contains the QEMU/VFIO/DriverKit side and carries its own notices and source bundles inside:

/Applications/PEGPU Machine.app/Contents/Resources

PEGPU Machine builds on Scott J. Goldman's scottjg/qemu-vfio-apple, and also uses/adapts upstream QEMU and UTM/QEMU-side work from qemu-project/qemu, utmapp/qemu and utmapp/virglrenderer. The app-side embedded GUI display integration is partially based on the main utmapp/UTM app work and is generated from a pinned UTM base plus the PEGPU patch stack in third_party/utm/patches.

GPL-covered QEMU-derived code stays on the Machine side. Apache-side launcher/display/AI code stays in this repository. The generated PEGPU.app LICENSES file is the app-visible distribution license bundle for installed PEGPU.app runtime payloads, helper programs, framework dependencies, and app-managed runtime archives. Source archives installed under legal/generated/source/ have adjacent generated .NOTICES, .LICENSES, and .manifest.json sidecars that cover the files inside those archives, including source-only build tools, tests, examples, backend source trees, and provenance inputs used to reproduce app-side artifacts. File-level and component license notices remain authoritative.

Runtime And Routing Provenance

PEGPU is not a single upstream project with a new skin. It combines several separate pieces, with notices and source/provenance kept in the app bundles:

  • UTM app display work: utmapp/UTM is the main GUI foundation for the embedded SPICE display side. PEGPU carries its UTM/CocoaSpice app-side changes as patches, then CI applies them to the pinned UTM base and builds the SPICE/GLib/GStreamer/ANGLE frameworks from source. PEGPU does not bundle UTM.app as an app.
  • QEMU/VFIO Machine runtime: scottjg/qemu-vfio-apple, qemu-project/qemu, utmapp/qemu, and utmapp/virglrenderer are part of the separate PEGPU Machine side, along with QEMU-derived GPL-covered source bundles and guest-driver packages.
  • llama.cpp chat/runtime surface: ggml-org/llama.cpp provides the server conventions, OpenAI/llama.cpp-compatible APIs, web UI surface, and runtime shape that PEGPU adapts for app-managed model discovery, downloads, runtime launches, macOS/VM runtime pairs, and external GPU offload choices. PEGPU release packages bundle the latest llama.cpp ARM64 build available at PEGPU release time from openresearchtools/llama-cpp-arm64-builds; additional llama.cpp versions remain user-managed through /core.
  • llama-swap-style model routing: mostlygeek/llama-swap is the basis for the routing idea. PEGPU modifies that model so multiple aliases and sessions can route through configured macOS and VM runtimes rather than a single fixed llama-server process.
  • GOST-style local networking: ginuerzh/gost is the provenance for the localhost TCP/UDP forwarding model. PEGPU keeps a trimmed local proxy for Mac-to-VM and VM-to-Mac routing; it is limited to the forwarding behavior the app needs.
  • TurboQuant runtime option: TheTom/llama-cpp-turboquant is supported as an optional llama.cpp-family runtime source for Turbo KV cache quantization builds.

Installer

The release package installs PEGPU.app and, when needed, PEGPU Machine.app. The Installation Type screen shows Machine.app files and DriverKit refresh as separate choices. Machine.app is selected by default when it is missing or older than the payload, or when the installer can confirm that the DriverKit extension is missing. DriverKit detection uses both systemextensionsctl and the registered /Library/SystemExtensions DriverKit bundle so the screen does not report an installed extension as missing when Installer.app cannot scrape one probe path. If DriverKit state cannot be read on that screen, the installer says the status is unavailable and leaves the Machine/DriverKit choice available for a manual refresh. If the installed Machine app is the same/newer and the driver is already installed, both choices stay visible but are not selected by default.

When DriverKit refresh is selected, the installer first asks the existing Machine app to deactivate the old macOS DriverKit extension when that app is present. If graceful deactivation fails or the old app is missing while the extension is still listed, it falls back to systemextensionsctl uninstall. After package files are installed and permissions/quarantine are cleaned, it calls the installed Machine app to submit a fresh activation request, logs direct systemextensionsctl list status, and shows a final summary telling the user to restart macOS before using eGPU passthrough. The installer can be closed so the restart can happen later.

System Integrity Protection must be disabled before installation. PEGPU uses an ad-hoc DriverKit host extension for PCIe/eGPU passthrough, which is a serious security tradeoff.

Build

GitHub Actions is the release build path. The workflow can build artifact-only packages, pre-releases, or releases while reusing cached display runtime, scaling helper, and Machine artifacts when their inputs have not changed.

The source repository stays clean: it does not store generated frameworks, Machine app binaries, runtime download caches, model files, or VM disk images. GitHub Actions builds or reuses the required display runtime, scaling helper, Machine app, DriverKit host extension, guest tools, bundled default llama.cpp runtime archives, notices, and source archives, then bundles the complete installable payload into the release .pkg.

Links

PEGPU is not endorsed by, sponsored by, or affiliated with Apple, NVIDIA, QEMU, UTM, llama.cpp, llama-swap, GOST, TurboQuant, Scott J. Goldman, or their maintainers.

About

VM runtime for eGPU passthrough for M series Macs

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages