# Waydroid: Running a Full Android System as a Linux Container

> Waydroid boots a LineageOS-based Android 13 image inside Linux namespaces rather than a virtual machine. Here is how the container works, what the install actually puts on disk, and where it breaks down.

**waydroid/waydroid** — Waydroid uses a container-based approach to boot a full Android system on a regular GNU/Linux system like Ubuntu.

- Repository: https://github.com/waydroid/waydroid
- Website: https://waydro.id
- Stars: 12,295 · Forks: 539
- Language: Python
- License: GPL-3.0
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/waydroid-waydroid

## What Waydroid Is Actually Solving

Running Android apps on a Linux desktop has traditionally meant a virtual machine. That costs you a second kernel, a disk image, and a hardware abstraction layer that has to pretend to be a phone. Waydroid takes the opposite route. The README describes it as using Linux namespaces (user, pid, uts, net, mount, ipc) to run a full Android system in a container, and states that the Android system inside the container has direct access to any needed hardware.

The audience is narrow and specific: people already on GNU/Linux who want Android applications available alongside their normal desktop, without rebooting and without a hypervisor. The README names Ubuntu as the example platform but describes the target as any GNU/Linux-based platform. The container shares the host kernel, so there is no second kernel to boot and no emulated GPU. That is the entire pitch, and it is also the source of every limitation that follows.

## Namespaces Instead of a Hypervisor

The mechanism is namespace isolation plus a bundled Android image. Each of the six namespace types listed in the README handles a different slice of the system: mount for the filesystem view, pid for process trees, net for networking, user for UID mapping, uts for hostname, and ipc for shared memory. Because the Android userspace sees the host kernel directly, hardware access is not proxied through a virtual device. The README states this plainly: the Android system has direct access to any needed hardware.

The Android runtime environment itself is not stock AOSP. The README says it ships with a minimal customized Android system image based on LineageOS, currently based on Android 13. That choice matters more than the container mechanism for day-to-day use. LineageOS is a community distribution, so the image does not carry Google's mobile services or Play certification unless the user adds them separately. The documentation at docs.waydro.id is where the project points for anything beyond this summary, and the README itself does not describe how the image is fetched, updated, or replaced.

Repository layout supports the description. The top level contains data/, dbus/, systemd/, tools/, debian/, and a single waydroid.py entry point, with a Makefile that installs into /usr/lib/waydroid and symlinks /usr/bin/waydroid to it. There is no compiled binary to build: the Makefile's build target prints that there is nothing to build and that make install copies the files.

## Installing Waydroid and Launching a First Session

The README does not contain install commands. It points to the desktop install page at docs.waydro.id/usage/install-on-desktops, and that is where distribution-specific steps live. What the repository does show is the packaging contract, which tells you what an install places on the system and what the build switches control.

The Makefile exposes three toggles, USE_SYSTEMD, USE_DBUS_ACTIVATION, and USE_NFTABLES, all defaulting to on except nftables. These decide whether systemd units, D-Bus activation files, and nftables rules are installed. A source install therefore looks like this:

```bash
make install
```

That target creates the install directories, copies data, tools, and waydroid.py into /usr/lib/waydroid, and symlinks /usr/bin/waydroid to the copied script. It also moves AppIcon.png to /usr/share/icons/hicolor/512x512/apps/waydroid.png and installs the .desktop files into /usr/share/applications. If you are packaging rather than installing, DESTDIR is respected throughout, and PREFIX defaults to /usr.

After installation the command surface is the symlinked script. The README gives no subcommands, so treat the CLI as something to check with its own help output rather than something documented here. The project's own guidance for everything past this point is the documentation site, not the README. If you are on a distribution where the docs give a package route, prefer it: the Makefile assumes you can write to /usr and that your init system matches the toggles you passed.

## Where the Container Approach Falls Short

The same direct hardware access that makes Waydroid fast makes it dependent on your host configuration. Namespace-based isolation is not a security boundary in the way a hypervisor is. The Android system shares the kernel, so a kernel-level issue affects both sides, and the isolation guarantees come from namespace correctness rather than from a virtual machine monitor. Anyone treating Waydroid as a sandbox for untrusted Android applications should understand that distinction before installing anything.

The image base is the second constraint. Android 13, LineageOS-based, without Google certification. Apps that check for Play Integrity or require Google Play Services will not behave as they do on a certified device, and the README does not claim otherwise. The README also does not document rollback, image downgrade, or what happens to installed Android applications when the image is replaced, so plan for that gap rather than assuming an upgrade path exists.

Finally, the README's platform claim is broader than its examples. It says any GNU/Linux-based platform and names Ubuntu as the illustration, while deferring real per-distribution steps to docs.waydro.id. If your distribution is not covered there, the repository gives you a Makefile and nothing else. And the Makefile's install target is not a build: there is no compilation step, so a broken install is a packaging or permissions problem, not a build failure you can diagnose from compiler output.

## Waydroid Against a Full Android Emulator

The obvious alternative is an Android emulator built on QEMU or a similar virtual machine monitor, the approach used by Android Studio's emulator and by Genymotion. The difference is architectural, not cosmetic. An emulator boots its own kernel inside a virtual machine and emulates or passes through hardware through a virtual device layer. Waydroid runs the Android userspace directly on your kernel through namespaces.

That changes three practical things. Startup is a container start rather than a kernel boot. Hardware access is direct rather than proxied, which the README calls out as a feature. And isolation is weaker: an emulator gives you a hypervisor boundary that namespaces do not. If your reason for running Android on Linux is to test untrusted APKs, the emulator is the better fit. If your reason is to run a messaging app or a mobile-only tool next to your desktop applications, the container approach removes a layer that the emulator keeps.

A second alternative worth naming is simply not running Android on the desktop at all and using a physical device with scrcpy or a similar screen mirror. That sidesteps the image-base problem entirely, because the device is certified and has whatever services the app expects. It costs you a second screen and a cable, and it does not give you an Android application in your launcher.

## Licence, Packaging and Upgrade Cost

Waydroid is GPL-3.0. The pyproject.toml carries an SPDX identifier of GPL-3.0-or-later for the tooling configuration, and the repository ships a LICENSE file at the top level. For anyone redistributing Waydroid, whether as a distribution package or inside a product, the GPL-3.0 obligations attach to the distributed work. This is a description of the licence, not legal advice; the LICENSE file and the project's own statements are authoritative.

The upgrade cost is where the packaging choices show. Because there is nothing to compile, an upgrade is a file replacement plus whatever the Makefile toggles install: systemd units under /usr/lib/systemd/system, D-Bus configuration under /usr/share/dbus-1, polkit actions under /usr/share/polkit-1/actions, and AppArmor profiles under /etc/apparmor.d. Those last two are the ones to watch. A polkit action or AppArmor profile that changes between versions can alter what the container is permitted to do, and the README does not document a migration procedure for either.

The release cadence visible in the repository is roughly one release every two to three months across 1.6.1, 1.6.2 and 1.6.3, with the most recent push to main on 2026-09-06. That is frequent enough that a pinned package version will drift from the documentation site, which tracks the current release. If you pin, pin the documentation revision too.

## Who Should Install It, and What to Check First

Waydroid fits a desktop Linux user who wants a specific Android application available in the same session as their normal work, on a machine where the kernel exposes the namespace set the README lists and where the graphics stack is not fighting the container. It does not fit someone who needs a Play-certified device, someone whose threat model requires hypervisor-level isolation, or someone on a platform the documentation does not cover and who is not prepared to read the Makefile.

Before running make install, check four things. Confirm your kernel has user, pid, uts, net, mount and ipc namespaces available. Confirm whether you want the systemd, D-Bus activation and nftables toggles on or off, since the defaults differ for nftables. Confirm your distribution appears on the install page at docs.waydro.id, because the README gives no per-distribution steps. And confirm that the LineageOS-based Android 13 image is acceptable for the applications you intend to run, because the README makes no promise about compatibility with any specific app or with Google services.

## Conclusion

Adopt Waydroid if you want Android apps on a GNU/Linux desktop and your kernel supports the required namespaces, your session is Wayland, and you accept a LineageOS image that is not Play-certified. Do not adopt it if you need a sanctioned Play Store device profile, GPU-heavy gaming, or a distribution the docs do not cover. Before installing, verify three things: that your kernel exposes user, pid, uts, net, mount and ipc namespaces, that you are running Wayland rather than X11, and that the Android 13 image satisfies the apps you actually need, since the README does not promise that any given app will run.

## FAQ

### What is Waydroid used for?

Waydroid runs a full Android system in a container on a GNU/Linux host so that Android applications are available on the desktop. The README describes it as providing Android applications on any GNU/Linux-based platform using Linux namespaces.

### Is Waydroid legal?

The repository states its licence as GPL-3.0 and ships a LICENSE file, but it makes no statement about the legality of running Android applications on a Linux host. Anything beyond the licence terms is outside what the project documents.

### Can I run all Android apps on Waydroid?

The README makes no such claim. It states only that the runtime ships a minimal customized Android system image based on LineageOS, currently Android 13, and does not document per-app compatibility or Google services support.

### How safe is Waydroid?

Waydroid isolates Android using Linux namespaces rather than a hypervisor, and the README states the Android system inside the container has direct access to needed hardware. That is a different isolation model from a virtual machine, and the README does not describe a security boundary beyond the namespaces.

### How do I install Waydroid?

The README does not include install commands and instead links to docs.waydro.id/usage/install-on-desktops for desktop install instructions. The repository's Makefile provides a make install target that copies files into /usr/lib/waydroid and symlinks /usr/bin/waydroid.

## Sources

- [License: GPL-3.0](https://github.com/waydroid/waydroid/blob/main/LICENSE)
- [Project website](https://waydro.id)
- [README](https://github.com/waydroid/waydroid/blob/main/README.md)
- [Releases](https://github.com/waydroid/waydroid/releases)
- [waydroid/waydroid on GitHub](https://github.com/waydroid/waydroid)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/waydroid-waydroid
