Programming on an Android tablet

I recently purchased a Samsung Galaxy Tab S7 FE. I wasn’t planning on making it a laptop replacement, but I had some experience with Android’s capabilities for development (from when I only had a phone) and the possibility was irresistible.

SSH into my laptop was a no-go. I have no idea how to expose my laptop to the internet in a way that works, let alone is safe. Besides, my model didn’t have mobile data support for on-the-go. I wanted to run a Linux dev environment on the tablet itself.

Termux

Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically - additional packages are available using the APT package manager.

– https://termux.dev

Termux is not a VM, container or emulator – it’s a terminal in the host system. Because the places where a Linux distro would usually install software are write-only on an Android device, Termux places software and your home directory inside its data directory (TODO) and uses the $PREFIX environment variable.

In my experience, this works until it doesn’t. Software in the Termux repositories works as expected, but anything that needs to be built locally or piped to sh from an URL will likely be confused by the odd directory structure.

In my phone-only days, this worked fine. However, I have projects now that depend on software not packaged for Termux.

Can’t I just have a container or something?

PRoot-Distro

PRoot is a user-space implementation of chroot, mount --bind, and binfmt_misc.

I’m not super clear on the details, but it seems that Android doesn’t let you do most of the things you need for a container runtime. PRoot is a solution to that.

The Termux project maintains a fork of PRoot as well as a wrapper program called PRoot-Distro. PRoot-Distro has an interface that will be familiar to anyone who has used Distrobox or toolbx:

proot-distro create fedora
proot-distro login fedora

This drops you into a fully-functional Fedora shell. After my previous failed attempts, I was surprised to see how well it works:

You can access the network (this didn’t work with another PRoot solution I tried – something to do with Android not allowing raw DNS traffic?)

You can start a server on the container and access it from the host

You can access the host Android filesystem (not the Termux home, the one that has your pictures and WhatsApp voice messages) from the container through the /storage directory

One thing to note is you are still on an ARM device. Software that is not compiled for ARM will not work. However, I only hit this once while installing Deno – and even then, ARM builds are available through a fork.

Summary

Install Termux

Install PRoot-Distro

pkg install proot-distro

Set up a container

proot-distro create fedora

Enter your container

proot-distro login fedora

Hardware

Samsung Galaxy Tab S7 FE SM-T733

Ztotop Magnetic Case

Logitech K380 Bluetooth Keyboard