easyIDE / Blog / How easyIDE runs Ubuntu on Android without root (PRoot explained)

How easyIDE runs Ubuntu on Android without root (PRoot explained)

easyIDE's terminal is a real Ubuntu 24.04 shell with apt, and the phone or tablet is not rooted. Here is how, and what the trade-offs are.

The pieces

  1. An Ubuntu base image is downloaded once and unpacked into the app's private storage (with a guard against archive paths escaping it).
  2. PRoot runs every guest process. It intercepts system calls with ptrace and rewrites file paths, so /usr/bin/python3 inside the guest maps to a file inside the app. No kernel changes and no root.
  3. The terminal is a real pseudo-terminal, so full-screen programs, colors and Ctrl-C behave normally.

Why it is allowed on modern Android

Android blocks executing files from an app's writable storage under SELinux. easyIDE ships PRoot as a native library in the APK, which Android does allow to run, and PRoot loads the guest's programs itself.

Details that make apt work

Projects live outside Linux

Your code is stored outside every Ubuntu tree and bound in at /projects/<name>. You can delete or reinstall an environment without losing a project, and several projects can share one environment.

Trade-offs

Rooted device? An opt-in chroot backend exists in the code but has not been run on hardware yet.

Try easyIDE

Free and open source. Android 8.0+, no root.