Nix development environments on Android
A custom terminal can own a Nix session without depending on the Termux application or Android Terminal. The difficult boundary is the execution backend: Android app permissions, Linux namespaces, the hypervisor and guest ABI determine which environment that terminal can actually launch.
This survey answers six questions:
- What separates a terminal, a distro and a VM owner?
- How much of nix-on-droid's PRoot backend can the existing app reuse?
- Can an app independently launch NixOS through AVF, including on MediaTek?
- What changes for Qualcomm Gunyah, pvmfw and Microdroid?
- When can a native canonical Nix store replace PRoot?
- Which option fits Sparkles today, and what should be implemented next?
Last reviewed: September 30, 2026.
IMPORTANT
This is an evidence catalog, not a claim that every listed backend runs on every named SoC. Device validation distinguishes locally observed behavior, upstream demonstrations, source inspection and proposed experiments. The application keeps its existing no-DEX constraint; calling installed framework classes through JNI remains in scope.
The latest Pixel 7 Pro contributor report adds a live NNS canonical-store session under the terminal app UID and AVF declarations for both protected/non-protected VMs. The report uses a provisioned kernel/policy stack and root ADB; custom guest boot, Nix workloads and Sparkles ownership remain untested. The locally connected Pad/phone results and contributor observations are labeled separately.
Master catalog
| Subject | Category | Environment | Deployment requirement | Link |
|---|---|---|---|---|
| nix-on-droid | Shared Android kernel; translated syscalls | Linux Nix packages, module system | Ordinary sideloaded app; executable-files policy must permit bootstrap | Deep dive |
| AVF on Pixel / MediaTek | Hardware VM managed by Android | Full NixOS guest | Compatible framework/backend plus management and custom-guest permissions | Deep dive |
| Gunyah on Qualcomm | Vendor hypervisor / privileged VM launcher | Full Linux guest; NixOS adaptation needed | Documented routes need root; firmware, driver and VMM compatibility | Deep dive |
| NNS and native stores | Shared Android kernel; real namespaces | Canonical Linux store, portable services | Root provisioning; NNS app route needs kernel and SELinux integration | Deep dive |
| Other execution routes | Emulated VM / remote host / Bionic port | Varies | Different portability, latency and packaging compromises | Alternatives |
Taxonomy
By execution boundary
| Boundary | Subjects | Consequence |
|---|---|---|
| Syscall translation | PRoot | App UID and Android kernel remain authoritative |
| Independent guest kernel | AVF, Gunyah | NixOS can own systemd, namespaces and guest filesystems |
| Kernel namespace isolation | NNS | Fast Linux execution; Android kernel features still constrain packages |
| CPU emulation or remote machine | Alternatives | Avoids local EL2 requirements at a resource or connectivity cost |
By deployment privilege
| Tier | Plausible paths | Gate |
|---|---|---|
| Stock sideload only | PRoot | App executable-files restrictions and bootstrap compatibility |
| ADB / Shizuku setup | AVF where permission grants and APIs exist | Shell authority cannot manufacture a missing hypervisor or override all SELinux rules |
| Rooted device | Gunyah, root-managed native store, AVF experiments | Actual driver, firmware and policy support |
| Custom kernel / ROM | NNS app namespaces, platform AVF owner | Deliberate kernel and policy maintenance |
Milestones
| Date / release | Capability | Evidence and limitation |
|---|---|---|
| Android 10 (2019) | Apps targeting API 29 cannot execute files in writable app home | Android execution policy; crucial for downloaded Linux packages |
| Android 14 / API 34 (2023) | AVF framework Java APIs introduced | Framework README; system APIs, not a public SDK promise |
| Android 15 (2024) | Management permission available to preinstalled apps; development ADB grant retained | Framework README; custom-image permission is an additional gate |
| Android 16 source release (2025) | Custom Linux image machinery used by Android Terminal | Released source; API availability must be checked per firmware |
| June 2025 demonstration; repository reviewed September 2026 | Snapdragon 8 Elite Gunyah Linux boot | Vendor-device guide; one rooted Lenovo configuration |
| September 2026 source snapshots | Custom Sparkles app and NNS namespace integration | Baseline, source ledger; source evidence is separate from hardware validation |
| September 30, 2026 contributor report | Pixel 7 Pro live NNS session and both AVF guest-mode declarations | Physical-device report; provisioned stack, no guest or workload launched by collector |
Suggested reading paths
- Choosing a backend: Concepts → comparison → recommendations.
- Designing Sparkles: Baseline → PRoot → AVF → capability gates.
- Investigating rooted Qualcomm: Gunyah → native stores → device protocol.
- Checking reproducibility: Source ledger → device results and runnable probes.
Sources
- Android execution policy and AVF framework source.
- Source revisions and provenance; individual deep dives cite implementation files.