The basic components of the Linux family of operating systems, which are based on the Linux kernel, the GNU C Library, BusyBox or forks thereof like μClinux and uClibc, have been programmed with a certain level of abstraction in mind. Also, there are distinct code paths in the assembly language or C source code which support certain hardware. Therefore, the source code can be successfully compiled on—or cross-compiled for—a great number of computer architectures.
The portability section of the Linux kernel article contains information and references to technical details.
Note that further components like a windowing system, or programs like Blender, can be present or absent. Fundamentally any software has to be ported, i.e. specifically adapted, to any kind of hardware it is supposed to be executed on. The level of abstraction that has been kept in mind while programming that software in the first place dictates the necessary effort.
Although the support of a specific instruction set is the task of the compiler, the software must be written with a certain level of abstraction in mind to make this portability possible. Any code written in Assembly language will be specific to the instruction set.
The support of a specific microarchitecture includes optimizations for the CPU cache hierarchy, the TLB, etc.
x86-64: 64-bit processor architecture, now officially known as AMD64 (AMD) or Intel64 (Intel); supported by the Athlon 64, Opteron and Intel Core 2 processors, among others
Cyrix 5x86, 6x86 (M1), 6x86MX and MediaGX (National/AMD Geode) series