Demystifying CPU architecture, bitness, platform and operating system on Pi
We sometimes get questions like " Will this program run on my Pi?". We understand your confusion! We often just search for the right file link without explaining why as it is a lengthy reply and answering it properly takes time, something we have in limited quantities, unfortunately.
OK, so why won't it work?
There are many processor families ( architectures) like Intel/AMD with x86/amd64-x64/IA64 (PC type), ARM in many "flavours" like core M0+, and Mac which was Motorola architecture, then switched to Intel and now switching again to "Apple-ARM". Processors also have something called bitness that describes how many bits wide they can process data (Example: Intel x86 is 16/32 bits, Intel/AMD x64 (amd64 really) is 64-bit wide).
A bit of ARM history
ARM is now very popular with many different "core types" (a name given to a specific set of features, not to be confused with the number of processing cores). Originating in the '80s as the Acorn RISC Machine, this architecture is now available to companies as mix and match "modules" to fit specific needs. Raspberry Pi uses ARM processors (CPUs) "assembled" (designed) from modules by Broadcom, but the Pi Pico uses a processor designed by the Raspberry Pi Foundation from the same "modules" selection. One huge benefit of using ARM is performance, another is the flexibility in getting exactly the CPU you need, explaining the popularity across multiple device types from the simple Pi Pico to high-performance scientific workstations.
Of course, that was only the CPU (processor). The way other parts are connected to it form a platform (PC, Mac, Raspberry Pi, smartphone etc.), meaning that you cannot take any ARM software and run it on any other ARM processor without problems. Although ARM CPUs all speak some form of ARM "language" (instructions), if the platform is different, the software probably needs to be adapted for it. In other words, since the platform is different, you cannot load Raspberry Pi OS 32-bit (made for ARM processors) on your ARM phone.
CPU instructions, source code and operating systems
What is even worse is if the processors use a different architecture as they usually don't speak the same "language" (CPU instructions). For these reasons, x86 PC programs won't run on ARM 32-bit Raspberry Pis... Unless you have the program recipe ( source code) that you can adapt to the new CPU and platform! This is frequent in the Linux world (Linux being the base of many similar operating systems like Raspberry Pi OS, Debian, Ubuntu and hundreds of other distributions). Linux-based operating systems are only one type of operating system, others that are structured differently (making them incompatible) include DOS, Windows, MacOS, iOS, Android, OS/2, VxWorks just to name a few.
What do I need?
So, to work, you need the software to be "Cooked" (compiled) for:
- the right processor architecture (Intel, Motorola, ARM) and bitness,
- the right platform (PC, Mac, Pi, smartphone)
- the right operating system (DOS, Windows, MacOS, iOS, Android, Raspberry Pi OS).
For the Raspberry Pi (platform), you need software compiled for ARM (CPU) designed for Raspberry Pi OS (operating system) 32-bit (bitness compatible with the operating system and CPU). The software listed in Raspberry Pi OS are built to work with it, but you need to be careful and ensure the above 4 points match with the system if you try to use software from other sources!