Skip to the content.

Linux Guest (UML)

Create a connection with the Linux Guest (UML) transport and Haven boots a whole Linux kernel — user-mode Linux — as one of its own processes. Unlike the Local Shell (PRoot), which emulates a root filesystem by intercepting syscalls, the guest runs a real kernel: real ptrace, real /proc, real block devices, and its own network stack. The connection editor asks only for a name; the kernel arguments are fixed.

What it’s good for

Getting started

  1. Connections → + → Linux Guest (UML). The editor asks for a name only. The picker only offers the guest on arm64 devices running the full flavour; if it’s missing, your build doesn’t carry the payload.
  2. Connect. The first connect unpacks a ~512 MB rootfs image into app storage (needs ~600 MB free) and then boots; later connects skip the unpack.
  3. Wait for the boot messages to settle into a uml:~# prompt — typically 10–20 s on a recent phone, most of it the network bring-up.
  4. Update the package index once: apk update.

Closing the guest’s tab (or tapping the stop button) sends poweroff into the guest. Files you created stay on the image for next time.

What to expect

How it compares

Requirements

How it works

Closing

Closing the guest’s terminal tab sends poweroff into the guest and waits up to 5 s for it to exit before killing the process. The ext4 rootfs is journaled, and this keeps unmounts clean even if Haven is killed outright.

The guest does not persist state across poweroff beyond what is written into the image; there is no snapshotting, and Haven does not ship multiple rootfs variants.

Source availability

The guest kernel and passt are GPL-2.0 (passt under its upstream GPL-2.0-or-later identifier). Their complete corresponding source, the two kernel patches, the passt patch and the build recipes are published in the uml-transport repository; the binaries Haven ships are the pinned uml-guest-4 release of that project. The pinned binaries and their sha256 checksums are in core/local/fetch-uml.sh; the fetch fails the build loudly if a pinned artifact disappears, and each artifact’s checksum is verified before it is placed in the APK.

The rootfs image ships GPL binaries too. It is Alpine 3.22.5 (aarch64) with these packages baked in, all fetched from the official Alpine 3.22 repositories with their sources: busybox 1.37.0-r20, apk-tools 2.14.10-r0, e2fsprogs 1.47.2-r2, util-linux 2.41.6-r1, ddrescue (GNU ddrescue) 1.29-r0, nbd 3.26.1-r0, mtools 4.0.47-r0, and the Alpine base packages. Each package’s source is its upstream project (via Alpine’s aports recipes). The one custom file in the image, the haven-recover init hook, is a plain shell script shipped in source form inside the image itself (/sbin/haven-recover).


← All features