Skip to content
Dev Tools Article

Linux on Android Without Root, a VM, or ptrace

tawc traps syscalls with seccomp and borrows Android's own GPU drivers — and it's largely agent-built.

Lenn Voss
Lenn Voss
Cloud & Infrastructure Writer · Aug 18, 2026 · 4 min read
Linux on Android Without Root, a VM, or ptrace

Every serious attempt to run desktop Linux on an Android phone has picked one of two doors. Door one: emulate a Linux filesystem in userspace with PRoot, eat the ptrace overhead, and fake your way to graphics through an X server app. That's the Termux ecosystem's path. Door two: give up on sharing the OS at all and boot a real Debian in a virtual machine, which is what Google's Linux Terminal app does on Pixels via the Android Virtualization Framework.

tawc — Tess's Android Wayland Compositor, which hit the Hacker News front page this week — refuses both doors. It rebuilds all three hard layers of the problem from scratch: syscall-level chroot emulation without ptrace, a native Wayland compositor, and GPU access through Android's own drivers. It runs on stock, unrooted Android 10+, and graphical Linux apps get hardware acceleration from the phone's actual graphics stack. It's the most technically credible rootless approach I've seen, and it comes from someone with the résumé to attempt it: wmww, the developer behind gtk-layer-shell and a contributor to Canonical's Mir project.

Ditching ptrace for seccomp traps

The unglamorous core of tawc is tawcroot, a freestanding, no-libc C program that replaces PRoot. PRoot's fundamental problem is architectural: it's a separate tracer process that intercepts every syscall via ptrace, and every interception costs context switches. Anyone who's run npm install inside proot-distro knows the tax firsthand — path-heavy workloads crawl.

tawcroot instead installs a seccomp-bpf filter that traps path-bearing syscalls with RET_TRAP, then emulates them against the guest rootfs inside an in-process SIGSYS handler. No tracer process, no ptrace round-trips — translation happens synchronously in the same thread that issued the syscall. If that technique sounds familiar, it should: it's the same family of trick gVisor adopted when Google replaced its ptrace platform with Systrap for exactly the same performance reasons. The design notes state the goal plainly: PRoot's compatibility envelope "at meaningfully lower syscall overhead." No published benchmarks yet, though, and the README is honest that performance is "better than alternatives, but not native" — treat that as an author's claim until someone measures it.

On top of tawcroot sits a real distro — Arch Linux ARM or Debian, unpacked from stock images — and a Wayland compositor built on Smithay, the Rust framework that also underpins System76's COSMIC compositor. XWayland covers X11 apps, a Termux terminal widget is embedded for the CLI side, and Linux apps get Android home-screen shortcuts and show up in the app switcher.

The libhybris inversion

The graphics layer is the cleverest part. libhybris has spent over a decade letting glibc-based systems load Android's bionic-built drivers — it's the load-bearing hack under SailfishOS and Ubuntu Touch, where you replace Android with Linux but keep the vendor's GPU blobs. tawc inverts the arrangement: Android stays in charge, and a forked libhybris (upstream "doesn't work on stock Android," per the README) lets the Linux guest borrow the phone's GLES and Vulkan drivers from inside an app sandbox. That's how you get accelerated graphics without root, without a VM, and without the virgl/Zink contortions that Termux:X11 setups lean on.

The trade-offs are real. There's no desktop OpenGL, only GLES and Vulkan, so some ports will need Zink or won't run. Official builds are arm64-only, and the single-process design means essentially no sandboxing of Linux apps beyond what Android already imposes on the host app. And the whole edifice rests on Android internals Google has never promised to keep stable — a vendor driver quirk or a hardening change in Android 17 could break the libhybris path overnight. This is the Halium community's perennial pain, imported.

Who actually needs this, with Google in the game

Google's answer to this problem space is the Terminal app: Debian in a KVM virtual machine, with GUI app support and GPU acceleration landing in Android 16 builds. If you own a Pixel, that's the supported path and it will win the mainstream — it's sandboxed properly and maintained by a platform team. But it's also a sealed box on a short list of devices (Samsung notably hasn't shipped AVF support), and VM isolation is precisely what you don't want when the point is working on your actual files with your actual phone.

tawc's bet is that tighter integration on a wider range of hardware beats a cleaner architecture on a narrow one. Its ando command bridges the Linux and Android worlds, and everything shares one filesystem view. For the Termux power user currently duct-taping proot-distro to Termux:X11, this replaces a three-app pile of workarounds with one coherent stack — that's the audience, and it's a real one: developers on foldables and Android tablets who want VS Code or a real browser next to their Android apps.

One more thing worth sitting with: the README says the project is "agent-built, primarily using Claude Code and latest Anthropic models." A veteran Wayland developer shipping a freestanding C syscall emulator plus a Rust compositor largely through coding agents is a data point about what agent-assisted systems programming looks like when the human directing it deeply knows the domain — this is not vibe-coded shovelware, and the seccomp design notes read like someone who's built display servers for a living, because she has.

My read: tawc is the right architecture for rootless Linux-on-Android, and roughly a decade of PRoot-based hacks were the wrong one. Whether it survives is a different question — it's one person, ~200 GitHub stars, no packaging story yet, standing on unstable ground Google controls. Don't build your workflow on it this quarter. Do watch it, because if the tawcroot approach proves out, it's useful far beyond this project: every rootless-container tool that still leans on ptrace has the same overhead problem waiting to be solved.

Sources & further reading

  1. Tess's Android Wayland Compositor — github.com
  2. Tess's Android Wayland Compositor — news.ycombinator.com
  3. Android 16's Linux Terminal will soon let you run graphical apps — androidauthority.com
  4. libhybris — github.com
Lenn Voss
Written by
Lenn Voss · Cloud & Infrastructure Writer

Lenn writes about cloud platforms, Kubernetes internals, and the infrastructure decisions that quietly make or break engineering organizations. Based in Berlin's vibrant tech scene, they have a talent for turning dense platform-engineering topics into prose that people actually finish reading.

Discussion 0

Join the discussion

Sign in or create an account to comment and vote.

No comments yet

Be the first to weigh in.

Related Reading