Edit: My concern was that Apple or MS would have divergent hardware and other support with firmware variations in their “custom” implementations. Kinda like the hardware driver issues Linux has had for years, but now burned into firmware.
Edit: My concern was that Apple or MS would have divergent hardware and other support with firmware variations in their “custom” implementations. Kinda like the hardware driver issues Linux has had for years, but now burned into firmware.
https://developer.arm.com/architectures/platform-design/serv...
* minus quirks/some deviations from the spec because Qualcomm
It's not necessarily sane to maintain binaries for each and every device flavour, but as long as the code is reasonably portable & each manufacturer keeps their LLVM IR/JVM bytecode backends in order, that might be enough to overcome some of the pain.
I've always found Arch distributions to be more usable on ARM systems than Debian distros simply because they user-friendly ways of building & installing from source. Building from intermediate representation might be the right mix of obfuscation, performance, friendliness, and portability for the consumer space.
The reasons most ARM devices require special "builds" for $YOUR_FAVORITE_OS almost entirely comes down to bootloader/peripheral nonsense. There wasn't (until recently) any standardized way to discover devices attached to your favorite ARM chip, nor any standard boot protocol, like we have in the x86 world. Therefore every device needed its own little description of the attached peripherals and (often) needed a little support in the bootloader -- uboot -- to accompany it. Therefore there are normally device-specific kernel/bootloader packages in your favorite distro, and specific installation instructions, but not every package needs this treatment. Once you install the distro, you can use the same ARM userspace binaries/packages as any other device, more or less.
However, ARM is now settling on ACPI/UEFI like in the x86 world to handle booting and peripheral discovery in a generic manner. You can, for example, use UEFI/TianoCore on the Raspberry Pi 4 today, and boot generic ARMv8 distro images of your choosing, just like you do with x86 systems.
Hello,
Arm is explicitly managed to prevent such a scenario to happen. Where things can and do diverge is the boot mechanism and peripherals, even if it has been getting better with time. (Arm servers and Windows on Arm machines using UEFI + ACPI)
However, for user-mode code, compatibility is mandated and checked by Arm, even for designs not made by them. As such, don't worry about it.
Microsoft instead cornered the laptop/tablet with integrated modem for Windows on Arm (64-bit), which allowed them to ship much earlier.
My dad had a Surface RT a few years ago (I cannot recall how long exactly). But you definitely did realize something was "different" with this thing.
I think Apple has a better chance at achieving this broad acceptance than MS has because they have a lot more control over their ecosystem and hardware. People actually seem to use their frameworks for building apps, for App Store as well as direct downloads. Unlike Microsoft who still has not managed to convince developers to move to UWP apps.
I actually don't hate using the Mac App store on my machine, but I haven't used the Microsoft Store ever since I first tried it. And for lots of more casual users, they probably actually won't realize that there is a difference between the architectures.
Linux has been there entire time
* The underlying code is relying on x86 features or is x86 ASM. In that case ya... this is going to be a bit rough - but is a super minority, especially for use cases where you'd want to use ARM
* The runtime or compiler hasn't been ported to ARM yet. For compilers, I don't think this is a problem - I think both clang and gcc are completely ready to go for armv7 and arm64. Go is good to go too. Runtimes is a bit more dodgy, but all the major (Java, C#, Python, Ruby, Perl, Javascript/Node) languages and runtimes are just fine. Maybe the only one out is rust, which doesn't have ARM as Tier 1 supported (but should just work) yet.
* Hardware support. There may not be good open source drivers for various ARM specific hardware blobs.
What else were you thinking of?
Plenty of things work very well and I'd think most people would rate those working as far more important than small compiler tweaks. NVMe, GPU support etc is vastly more important to me than compiler micro-optimizations, for instance, because those actually make day to day developer usage viable. No amount of compiler optimizations will make SD cards fast. And today, you can boot generic Linux images for whatever distro, using UEFI, on high-speed ARM systems, with fully working desktops -- including working FOSS GPU drivers, full web browsers (with working javascript JITs), and high speed storage. So I think it's shaping up pretty nicely.
I've been using it:
https://github.com/pftf/RPi4 https://rpi4-uefi.dev/
Actually what I've been doing is using my wireless router (openwrt) to serve pxe images. So the rpi sits without an SD card. It's powered via Power over Ethernet (PoE), is advertised a pxe server, gets the initial uefi & ipxe binaries, then I can boot from an image off Github or one served locally. ipxe just adds another layer of indirection for expanded fun.
Have you heard of Raspberry? Even before it was released there were almost all of Debian packages in ARM, so Raspberry had it easy, they just took something that already worked. And it was years ago.
Right now the only OS ready for ARM is Linux.
But from all reports from people with the dev kit, Mac OS is going to hit the ground running.
Linux has been running on ARM for at least the last 15 years.
Take your pick. Almost all the stuff listed under SBCs is ARM.