Initial Release — August 2026
unroot is a small, daemonless toolkit for entering, modifying, and transporting
Linux root filesystems. It brings together rootless multi-user chroots,
automatic QEMU emulation, and full-metadata archive transport in one binary.
Originally developed as the namespace engine for FFS, unroot is now a focused
Kernel Seeds project with its own release boundary and test matrix.
What's New
Three Explicit Modes
unroot keeps ownership choices explicit rather than guessing:
- Managed rich roots — Unprivileged multi-user roots using subordinate UID/GID
ranges. Perfect for build and packaging work without host root. - Native roots — Host-owned or mounted filesystems with native ownership.
Requiressudofor conventional chroot behavior. - Single mode — Run commands as namespace root with the host filesystem
visible. Trusted builds needing capabilities without subordinate IDs.
unroot never silently downgrades rich ownership to single-ID or escalates an
unprivileged request into host-root execution.
Rootfs Archives
unroot unpack ARCHIVE ROOT— Extract a tar archive into a managed rootfs
with correct ownership mapping. Rich preservation is the default.unroot pack ROOT ARCHIVE— Capture a rootfs with full metadata: permissions,
timestamps, links, sparse files, ACLs, xattrs, file capabilities, and SELinux
labels.- Automatic compression from suffix (
.gz,.xz,.zst, etc.) - Host-specific
.unrootmetadata excluded from portable archives
Foreign Architecture Execution
- Automatic architecture detection for ELF binaries and shebang interpreters
- Private QEMU emulation for rich roots — active only inside the rootfs
- Host-wide emulation for native mode (current boot only)
- Explicit refusal with
--emulation neveror manual selection with
--qemuand--qemu-cpu - Validated across x86-64 ↔ ARM64 in both directions
unroot handles execution compatibility. You remain responsible for distro
profiles, compiler flags, and CPU baselines.
Environment Control
--cwd— Set working directory inside the rootfs--env VAR=value— Set explicit environment variables--persist-env VAR— Copy selected variables from the host--map-ro HOST:CONTAINER— Read-only host path mappings- Clean environment by default; bare commands require explicit
PATH
Security Model
unroot is designed for trusted build, packaging, and rootfs-maintenance
workloads. It is not a hostile-code sandbox:
- ✓ Private mount and PID namespaces
- ✓ User namespace isolation (rich roots and single mode)
- ✓ Namespace root ≠ host root
- ✗ Shared network, IPC, hostname, cgroups, and kernel
- ✗ No syscall filters, resource limits, or MAC policies
Use unroot with root filesystems and commands you trust.
What's Included
Binaries:
unroot— Static namespace engine (x86-64 and ARM64)unroot-util— Dynamic helper for rich roots (included in packages)
Packages: Native .deb and .rpm packages for:
- Debian 13 (Bookworm)
- Ubuntu 24.04 LTS and 26.04
- Fedora 44
- Enterprise Linux 9 (Rocky Linux 9)
QEMU: Packages recommend the distribution's static QEMU user-mode emulator
for multi-architecture support, but it's not required — unroot works without it
for native roots. EL9 users should install QEMU separately if foreign execution
is needed.
All artifacts are built, tested, and validated by release CI before publication.
Known Limitations
- First release focuses on entry and transport — no OCI packaging, overlays,
or persistent sessions yet - Native mode registers host-wide
binfmt_mischandlers (current boot only) - Requires Linux 5.12+ for
--map-ro, 6.7+ for private rich-mode foreign
execution - Subordinate UID/GID allocation required for rich roots (configured by
distribution in/etc/subuidand/etc/subgid)
See Initial Public Release Scope for details
on what's deliberately outside this release.
Getting Started
# Enter a rootfs
unroot enter ~/rootfs
# Unpack an ARM64 Raspberry Pi rootfs on your x86-64 workstation
unroot unpack raspi4-rootfs.tar.xz ~/roots/raspi4
unroot enter ~/roots/raspi4
# Build as namespace root without sudo
unroot single --persist-env PATH -- make -j32For complete usage examples, see README.md.