The Bad Parts

3 minute read

It's my preferred environment but it's not perfect.

The Low Memory Killer Daemon - Official Docs.

This feature of modern Android versions kills tasks (/apps) when it thinks they are causing memory-related performance problems. It can feel pretty heavy-handed, with apps abruptly closing at seemingly random intervals.

In practice this can irritate but I’ve never lost any work because of it. The most noticeable occurrence is when Termux:X11 closes — my Linux desktop suddenly shuts down! Sounds terrible But actually my Vim buffers are constantly auto-saved, my browser tabs are stored… I just have to restart the session, then Tmux, then maybe a couple of other items. I’m back up and running in 1-2 minutes, and this problem might occur once or twice per week at the most.

There are various ways to tweak the daemon though, search for terms like ‘disable android oom killer’, ’tweak low memory killer daemon android’ etc.

Missing Tools for ARM Architecture

As the types of CPU in Android devices (usually ARM) are not the same as those used in laptops/desktops (usually X86), the standard desktop versions of software can’t be installed and compatible versions must be available (unless you want to compile them yourself).

This isn’t as bad as it sounds as the package manager for whichever distro you use will automatically pull in the correct version for your CPU architecture. Some software might be missing though.

A couple of specific gaps in the system affect me:

  • Garmin Monkey C
    Garmin apps are written in their own language ‘Monkey C’, which has to use their own Java-based compiler and device simulator. As far as I can tell this isn’t happening on ARM. It was hard enough to get it working on Linux and Vim as they presume Windows/VSCode in their tutorials, so once I achieved that I didn’t take it any further.
  • Flutter cross-compilation
    The situation with Flutter is strange. Flutter is used to make multi-platform apps, so the same code can output apps for Linux, Android, Windows etc. I can build a Linux (ARM64) binary on my Android Ubuntu… and I can build an Android binary on my (normal, X86 desktop) Linux. But I can’t build an Android binary from Android. Apparently people were able to do this on older versions of Flutter, so it seems like Google (who control Flutter) intentionally stopped supporting it.

Fingers crossed!

Mine is a niche use-case and I understand that I can’t expect organisations to support such a tiny minority as ARM Linux. Apple’s M1/M2/M3 ARM chips are doing very well, which is great if you’re into that but I don’t enjoy their ecosystem.

So for now I need to hang on to my X86 desktop. But I hope ARM continues to gain recognition as more than a mobile phone CPU and can be used for more development tasks in future.