Hacker News new | ask | show | jobs
by breadloaf 1452 days ago
In general what I see as a massive issue for ARM and big win for x86 is standardization (or in case of ARM lack of)

- Can you run ARM system on any ARM processor, or are you limited by core architecture, endianness (BE/LE), and RAM addressing, forcing you to recompile for specific SoC? I honestly don't know what are the exact limitations.

- Can you boot any ARM processor in one specific way like x86 processor? No you can't. Every ARM processor has its own booting mechanism and you basically need to bend your system to it.

This lack of standardization is the reason, why Android phones does not have universal Lineage OS, but has build for phone X, build for phone Y, build for tablet Z and on the other hand this basic standardization is what will keep x86 alive for decades to come.

3 comments

Almost nobody actually runs ARM in big-endian. I suspect although the ISA is technically capable of endian switch many SoCs wouldn't even work in BE.

I seem to recall trying to get uboot and and RPi to boot big endian at one point and it was infeasible.

That used to be true, but ARM has been standardizing these aspects now for a long time. Modern ARM systems can use ACPI for example.

Android phones have different builds because the hardware varies a lot, and because the OS is an integrated part of the product offering. It's not like the PC space where the hardware makers can't compete by better integrating the OS.

Can there be a software side compensation for this lack of standardisation? Because I too don't see any hardware standard coming very soon to ARM and I don't think it can even.

But, maybe there can be a build automation which can handle all the hassle and minimize the randomness?

I thought user-space applications should be fine? Bootloaders that kind of stuff has to deal with low-level interfaces and those do differ from SoCs to SoCs.

You can build multiple functions to handle different architectures by function multi-versioning[1], not sure if it works for embedded though.

[1] https://gcc.gnu.org/onlinedocs/gcc/Function-Multiversioning....