Portable QEMU Builds: lab-qemu-portable Is Generally Available
Portable QEMU and wimlib builds for Linux (x64/ARM), macOS (Apple Silicon), and Windows (x64/ARM), plus a virtio-win driver mirror, published with stable tags, checksums, and build provenance for bundling into your own tools.
On this page
lab-qemu-portable (opens in new tab) is generally available: portable builds of QEMU, wimlib, and a verified virtio-win driver mirror, published for Linux, macOS, and Windows as plain archives you can download, verify, and bundle. If you’re building a tool that needs a hypervisor on the user’s machine, this is the dependency layer. Source: jzombie/lab-qemu-portable (opens in new tab) .
lab-qemu-portable (opens in new tab) publishes ready-made archives of QEMU (opens in new tab) , wimlib (opens in new tab) , and the virtio-win (opens in new tab) driver ISO: extract-and-run, no installer, no admin rights, no package manager. QEMU builds publish for Linux (x64 and ARM), macOS (Apple Silicon), and Windows (x64 and ARM); wimlib covers the same platforms except Windows ARM64 today. Stable release tags and checksums on every artifact.
That makes them a drop-in dependency for software that needs a hypervisor on the end user’s machine. windows-headless (opens in new tab) ( crates.io (opens in new tab) ) uses these builds directly: on first run it downloads the archives, verifies them against SHA-256, and caches them.
What ships
Three release streams, one repo, independent workflows and tag namespaces:
| Stream | Tags | Contents |
|---|---|---|
| QEMU | qemu-vX.Y.Z |
System emulator for the host arch + qemu-img + firmware (SeaBIOS, EDK2, vgabios) |
| wimlib | wimlib-vX.Y.Z |
wimlib-imagex + libs, overlaid onto a QEMU tree |
| virtio-win | drivers-YYYYMMDD |
Verified mirror of virtio-win.iso (rsynced from Fedora stable-virtio, SHA256-checked) |
Current builds track the latest stable upstream releases; the exact versions are on the releases page (opens in new tab) .
QEMU builds on five platform legs: Windows x64 (UCRT64), Windows ARM64 (CLANGARM64), Linux x86_64, Linux aarch64, macOS Apple Silicon. wimlib has four: the same list minus Windows ARM64. Archives are qemu-portable-<os>-<arch>[-<env>]-<ver>.{zip,tar.xz,tar.gz} (the -<env> segment applies to Windows zips) with wimlib following the same pattern; the full filename table is in the
README (opens in new tab)
.
Acceleration is per-OS native (KVM, HVF, WHPX) with TCG as the universal fallback, so the same artifact works on hosts without a hypervisor.
Why it’s consumable
- Portable means folders, not single-file exes. Firmware must sit next to the binary and the accel backends are dynamically linked; upstream doesn’t support static single-file for these paths. You get a self-contained tree: binaries, libs (
bin/+lib/+share/on Unix; exes and DLLs at the archive root on Windows, matching upstream’s portable layout). - No host requirements beyond glibc. Linux builds target a conservative glibc floor (exact baseline in the
README (opens in new tab)
) with bundled
.sofiles resolved via$ORIGINRPATH. Noapt, no distro package splitting to guess at. - Checksums and provenance on every release. Each QEMU and wimlib release carries
SHA256SUMS.txtplus per-platformBUILD-INFO-*.txt(commit, runner image, compiler, container digest) for reproducibility audits. Driver-pack releases shipvirtio-win.iso.sha256and aSOURCES.txtrecording the upstream source. - Tags never move. New upstream versions publish as
qemu-vX.Y.Z; rebuilds of the same version getqemu-vX.Y.Z-<run_number>with the squash-merged commit message as notes. Pin a tag and it means one thing forever. - Smoke-tested before publishing.
smoke-qemu.shverifies version, accel backends,qemu-img, firmware presence, a headless TCG boot probe, and a real VNC/RFB handshake. None of it needs KVM, HVF, or WHPX on the runner.
Fitting it into your tool
The pattern windows-headless uses:
- Pick a release tag (or track the latest with the GitHub releases API).
- Download the archive for the user’s OS/arch.
- Verify against
SHA256SUMS.txt, extract into your cache. - Point your invocations at
bin/qemu-system-<arch>(Unix) orqemu-system-<arch>.exe(Windows).
wimlib overlays rather than standing alone: copy bin/wimlib-imagex (or wimlib-imagex.exe on Windows) next to the QEMU binaries. The virtio-win ISO attaches as a second cdrom alongside the installer ISO and your Autounattend.xml drive, which is what gives a headless Windows install its storage and network drivers.
Releases are also buildable on demand: the build-qemu-portable / build-wimlib-portable workflows take a pinned version, a native/both/all target mode, a platform subset for fast iteration, and a force flag to republish. A weekly cron watches upstream for new versions.
Caveats
- The Windows zip is CI smoke-tested but hasn’t been run manually on physical Windows. The validated path today is headless Windows guests driven from macOS/Linux over SSH. Native Windows run reports welcome.
- Windows ARM64 WHPX needs Windows 11 24H2 + the April/May 2025 updates; older builds should drop
-accel whpxand take TCG. - macOS is adhoc-signed. Quarantine only applies to browser downloads; if you fetched the archive programmatically (as a tool install would), no action is needed. After a browser download, run
xattr -cr qemu-portableto clear it.
Artifact table, quick starts, and workflow reference: lab-qemu-portable README (opens in new tab) . Issues and run reports: github.com/jzombie/lab-qemu-portable/issues (opens in new tab) .