As many of you may well be aware, the Android operating system is powered by the Linux kernel underneath. Despite this, Android and Linux apps are not readily exchangeable because of different runtime systems and libraries. You can, however, get a terminal emulator app like Termux up and running on any Android device. For years, crafty Android users have been using Termux as a handy terminal emulation software as well as a powerful GNU/Linux environment, thanks to its substantially large Linux Package Collection. Unfortunately, the app is now at a pivotal junction of its life, as its developers have decided to stop updating the Play Store version altogether and migrate to F-Droid due to recently introduced Google Play policy and Android SDK behavior changes.

Since November 2, 2020, all updates to existing apps in Google Play were required to target Android 10 (API level 29) or higher. While the precondition might sound like good news sprinkled with a lot of optimism, things haven’t exactly gone that way for Termux. In a post on the project's GitHub Wiki, Leonid Pliushch AKA xeffyr, a major contributor to the software, explained the app's compatibility issue with the aforementioned API level. Google has been enforcing the W xor X security feature since Android 10, which is why an untrusted app that sets targetSdkVersion to "29" or higher can't invoke exec() on files within the app's home directory. Such a design effectively breaks Termux when compiled against API level 29, as all its packages contain executables.

You can still find the app on the Play Store but the build is severely outdated. Since the Play Store version doesn't officially support Android 10 (or higher), it will not start a shell on certain devices unless SELinux is set to permissive mode, which admittedly has serious security implications. Moreover, non-rooted users can't access /proc/net, which means netstat and other utilities using data from this interface do not work anymore.

Why are all these changes not affecting the F-Droid build of Termux? That is because there is no strict Android SDK version requirement while submitting a package for inclusion in the F-Droid repository. Unlike the Play Store variant, a build targeting an older version of Android than 10 is unaffected here, so the team can continue to push updates without worrying about losing core functionality.

[appbox fdroid "com.termux"]

The Termux development team now wants users on the Play Store release to migrate to the F-Droid variant to continue getting updates. The migration process isn't exactly straightforward because the builds are signed with a different set of keys, hence a seamless update can't be performed. As expected, these changes do effectively create a barrier for regular users who prefer to stick with the Play Store update channel for convenience.


If you already have a Termux instance on your Android device, let us know what you are using it for below!