The HARM mobile architecture
The ARM architecture is the future, they say. It’s mostly that CISC is inefficient, and RISC lives a new life, especially since Apple’s M1 CPU. Back in the day, at CPU Architectures, I was taught the Intel 80386 one, so I’m obsolete by formation. And I love the x86 architecture, with all its flaws. But here’s how the ARM architecture is catastrophic, at least in one domain: Android smartphones.
One of the best readings these days is that of the comments to technical articles. The Reg, Ars Technica, Phoronix, this kind of sites. Most of the time, the real juice is in the comments, not in the actual articles. Today’s example, this completely useless article: HMD Skyline: The repairable Android that lets you go dumb in a smart way. OK, but people commented on it.
It all started with a complaint: only 3 years of updates! Say this one:
I like the idea of being able to swap out the battery every couple of years, or replace the cracked screen easily when I drop it, but with only 3 years of updates, what’s the point? I’ll need to scrap it anyway if I want it to stay patched.
This is like “Sell me a phone that I can keep for 7 to 10 years, without selling me a phone that I can keep for 7 to 10 years”.
Someone offered to pay for such updates. The author of the article, Liam Proven, disagreed:
Would it be unreasonable for the phone to come with say 3 years of free upgrade, and the option to pay for up to a further 7 years at a nominal fee, say £20 per year?
I think it would, yes.
Who would pay? Why would you pay?
Would your phone still work if you didn’t? Yes. So why pay? There’s no incentive.
But there’s a dis-incentive.
If you did pay, you’d get newer Android. These days, newer = bigger. Bigger = slower.
Newer OS versions are aimed at faster hardware. But you’re on the same hardware. So you’d be paying for a slower and slower phone. Why would you want that?
There must be smarter ways.
Apple got this right in a way.
Smartphones have always had free OS updates until they go end of life. This wasn’t such a terrible cost: phones live harder lives than PCs, and so wear out and get replaced. So vendors don’t need to support them forever.
But computers, PCs (including Macs) especially desktops, last longer. And you can upgrade them. So PC OS updates cost. So PC owners don’t update.
Result: an ever-growing pool of older kit and older OSes.
Result of that: vendors target the lowest common denominator to maximise potential sales.
Result of that: less incentive to upgrade.
Result of that: reduced sales of new devices.
Apple started making macOS version upgrades free with OS X 10.9 “Mavericks” — before that, they cost money. They were not copy-protected and you could share them with your mates, or buy 1 copy for all your Macs, but you needed to buy it.
Result: more people updated their Macs.
Result: more software could assume a newer macOS and so vendors required newer versions of the OS.
Combine this with Apple’s quite ruthless policies of removing older software components and modules and functionality and so forcing vendors to move to newer replacement APIs etc. and you have a OS development process that can be faster-moving because it doesn’t have to carry so much bulk.
Mac OS X never supported any pre-G3 Macs.
Mac OS X 10.4 dropped PowerPC G3 support: G4 or above only.
OS X 10.5 dropped the Classic VM for MacOS 9.
10.6 dropped PowerPC support: it was Intel-only but ran PowerPC OS X apps in Rosetta 1. It also dropped AppleTalk file sharing and creating/writing HFS disks.
10.7 dropped Rosetta.
10.15 dropped 32-bit app support and HFS filesystem reading.
macOS 11 dropped AppleTalk even for printing.
14 drops pre-Metal GPUs and .kext support for Wifi.
And so on: continuous removal of old code.
But, free upgrades, so people keep on upgrading. So apps keep needing newer versions. And gradually older Macs are removed, so people must keep buying newer Macs.
The PC market is very different. Microsoft bends over backwards to retain legacy support and rarely removes stuff. 64-bit Windows (Vista onwards) dropped 16-bit app support, and some people are still complaining. Win11 drops support for pre-TPM2 PCs and is facing great resistance. (It doesn’t help that it is poor: it doesn’t give you anything in return. You lose vertical taskbars, for instance.)
Apple planned this well. Upgrades are free, and both customers and developers get new stuff in return for upgrading, so people do upgrade, and people replace their Macs regularly.
(I am weird like this: my Mac is nearly a decade old, has been substantially upgraded, and I don’t use Apple apps or paid software. My Macs are pretty Unix boxes.)
Charging for upgrades is a bad plan.
Graham somebody makes a good point:
I’m ok with charging for major version updates. You get something for that. But security updates are a must on any networked device. I’ve never paid for security updates on any OS.
The key difference with the Android market, versus desktop and iOS, is the vendors needing to supply the update. Imagine what Windows would be like if every time MS puts out a security fix it had to be repackaged by Dell, Lenovo, HP, Asus, Acer, etc.
Why can’t Google patch Android so that every single device on Earth gets the updates, regardless of what crap is added by the OEM? Joe Burmeister:
They should have a standardized hardware platform. With autodiscoverability. Like PCs. It’s doesn’t have to be an ARM like mess to use ARM.
We could have Android distros builds that work on any Android phone, not a build per damn phone. Google made a right old mess of a platform.
They made a platform of throw away devices.
Someone else adds:
Hell, even Windows has a HAL = hardware abstraction layer. This allowed the original design to run on Intel x86, DEC Alpha, RISC and MIPS CPU’s.
Android is just a steaming mess to get built. Plus big companies like Samsung bypass the open source Android API to implement their own steaming blob of mess, like VoLTE drivers.
Alex Stuart asks the question explicitly:
Can someone savvy in this area explain why newer versions of Android couldn’t basically just work on older ARM-based phones the same way Windows does? I have a 13-year-old rig that runs modern Windows fine, it just uses older drivers for some of the hardware.
What is special about Android that an OS image with a bunch of older drivers couldn’t just install on an older phone? The install detects the IDs of the various modules – screen size, radio/wifi module, sound processor etc, and just uses the appropriate driver. It seems like that would be minimal work for either Google or the individual handset manufacturers, but I’m probably missing something.
Apparently, firmware is a weak point. Apparently:
To my understanding, much of the update duration has to do with agreements with firmware providers. Google can’t do much if Qualcomm or otherwise decline to continue providing patches (unless google negotiates that with Qualcomm or other).
Lots of blobs, lots of things needing continual work etc. (I say this as the owner of a PinePhone, you don’t realize the benefit of having a large corp dedicating resources to a project until you don’t, that said I love FOSS projects, just for a phone I have reliability requirements which are absurd for a FOSS device).
The vastly experienced Liam Proven to the rescue:
why newer versions of Android couldn’t basically *just work* on older ARM-based phones
I did this when I covered Armbian in 2022:
https://www.theregister.com/2022/03/03/armbian_project_releases_version_2202
Windows boots on a standardised platform (what used to be called an “IBM PC compatible”) with all the I/O ports and things in standardised places, using standardised firmware (BIOS in olden times, now UEFI) so a generic kernel can access hardware in known ways via known addresses and things. All it needs is a few drivers to wake stuff up.
Arm is not like that. There’s no standardised anything. Every Arm device is the Wild West with anything the makers fancied stuck anywhere the makers could fit initialised by their own one-off slapped-together code.
In the early days of PCs there were MS-DOS computers that weren’t PC compatible: Apricot, Victor, Sirius, even exotica like Jarogate which ran Concurrent CP/M instead of DOS and didn’t have a screen or a keyboard. Every one needed its own port of DOS and while “legal” software ran, which used documented API calls and didn’t access hardware directly, almost nothing was “legal”.
(I got tens of megs of data off a Jarogate Sprite by copying PKARC onto it, and compressing the data files. It was one of the very few things that would run. No 1-2-3, no wordprocessor: moving the cursor means accessing hardware and didn’t port. But a file compressor just reads data, shrinks it, writes it out again, and outputs some text to the console.)
Every single Arm device, every model of phone, tablet, whatever, is a new port of the OS customised for that hardware. And all the hardware is undocumented and there are thousands of the things.
That’s why projects like postmarketOS only support a tiny handful of phones: they’d need thousands of developers to support all the random junk out there, and in fact, the teams could go for dinner together without booking a table in advance.
So yes, Android-powered hardware is PURE CRAP! It doesn’t matter what ARMv8-A chip your smartphone is using, it’s crap!
Ironically, Apple’s M1 chip uses Firestorm and Icestorm (A14) cores that are also ARMv8-A devices. The AArch64 architecture is not bad per se, nor is ARM the only reason M1 is “so much better than the current x86 CPUs.”
But the way all those shitheads from the major manufacturers of CPUs with ARM-based architectures (mostly with Cortex and Kryo cores) are making them is a complete mess, despite being destined to run (oh, the irony) an open-source kernel and a partially open-source OS!
Beyond the CPU, everything else on that motherboard that requires firmware is shitty. We have seen the impact of blobs on Linux too. But the Android-based hardware platforms are more proprietary than almost everything else because, not being standardized (à la “IBM PC compatible”), you can not just boot off an external device and install whatever the fuck you want, as you do with any PC or laptop!
I wish Android phones were based on something else. They are LITERALLY a nightmare and NOT OPEN IN THE LEAST.
And they use the “HARM” architecture.
The locked bootloader on Android devices is another miserable decision that should have been illegal under the EU legislation. But the powers that be in Brussels are merely a bunch of morons. Oh, it provides you with security, somewhat akin to Secure Boot on PCs, only more restrictive! Yeah, sure.
Hum, thank you for this post. I had read a little about this, but it’s all very informative.
Vreau sa instalez Android 13 sau 14 pe un Mi MIx 2S, cu hardware potent dar care oficial e limitat la Android 10. Complicat. Mai bine pun un Win 95 pe un comp vechi. :))