Machine language is the fundamental standard for software compatibility, because it is the language the CPU understands. All programs presented to the computer for execution must be in the machine language of that particular CPU family.
Different machine languages not only exist among different vendors but are created by the same vendor. For example, IBM's System z mainframe family differs from its Power Systems midrange family. When Digital Equipment introduced its new Alpha line in the early 1990s, the Alpha CPUs did not understand the machine language of their VAX predecessors. For all the major hardware platforms, see hardware platform
After a program is written, it must be translated (assembled, compiled or interpreted) into the machine language the computer understands. In order to run in a different machine, the program must be reassembled or recompiled into a different machine language.
Starting in the late 1960s, companies seeking a chunk of the IBM mainframe market designed computers that ran the same IBM machine language. RCA's Spectra 70 was the first IBM-compatible mainframe, and companies, such as Amdahl, Itel, National Advanced Systems, Hitachi and Fujitsu introduced IBM-compatible mainframes at one time or another.
PC machine language compatibility is achieved by using a processor from Intel's x86 family of microprocessors or a clone chip from AMD and others. The x86 machine language dates back to 1981.
Machine language compatibility can also be achieved by emulation. An emulator is software (or hardware or both) that executes the machine language of another computer directly. For example, with Windows emulation in a Unix workstation or a Power Mac, users can run non-native programs in their computer.
Emulation goes back to the mid-1960s when IBM built a 1401 emulator in its System/360 to ease migration from the very popular 1401 to the new 360 family. The terms emulator and simulator are used interchangeably. See standards