Binary-code compatibility

Source: Wikipedia, the free encyclopedia.

Binary-code compatibility (binary compatible or

recompilation or interpretation
is necessary before the program can be run on the compatible system.

For a compiled program on a general operating system, binary compatibility often implies that not only the CPUs (

(ABIs) corresponding to those APIs, are sufficiently equal, i.e. "compatible".

A term like backward-compatible usually implies object-code compatibility. This means that newer computer hardware and/or software has (practically) every feature of the old, plus additional capabilities or performance. Older executable code will thus run unchanged on the newer product. For a compiled program running directly on a CPU under an OS, a "binary compatible operating system" primarily means application binary interface (ABI) compatibility with another system. However, it also often implies that APIs that the application depends on, directly or indirectly (such as the Windows API, for example), are sufficiently similar. Hardware (besides the CPU, such as for graphics) and peripherals that an application accesses may also be a factor for full compatibility, although many hardware differences are hidden by modern APIs (often partly supplied by the OS itself and partly by specific device drivers).

In other cases, a general porting of the software must be used to make non-binary-compatible programs work.

Binary compatibility is a major benefit when developing computer programs that are to be run on multiple OSes. Several Unix-based OSes, such as FreeBSD or NetBSD, offer binary compatibility with more popular OSes, such as Linux-derived ones, since most binary executables are not commonly distributed for such OSes.

Most OSes provide binary compatibility, in each version of the OS, for most binaries built to run on earlier versions of the OS. For example, many executables compiled for

NTVDM
was supported.

Binary compatible hardware

For a digital processor implemented in hardware, binary compatibility means that (a large subset of) machine code produced for another processor can be correctly executed and has (much) the same effect as on the other processor. This is quite common among many processor families, although it is rather uncommon among the ubiquitous small embedded systems built around such processors. Full machine code compatibility would here imply exactly the same layout of interrupt service routines, I/O-ports, hardware registers, counter/timers, external interfaces and so on. For a more complex embedded system using more abstraction layers (sometimes on the border to a general computer, such as a mobile phone), this may be different.

Binary compatible operating systems

Binary compatible operating systems are OSes that aim to implement binary compatibility with another OS, or another variant of the same brand. This means that they are ABI-compatible (for application binary interface). As the job of an OS is to run programs, the instruction set architectures running the OSes have to be the same or compatible. Otherwise, programs can be employed within a CPU emulator or a faster dynamic translation mechanism to make them compatible.

For example, the

usermode by translating Linux system calls into BSD ones. This enables the application and libraries code that run on Linux
-based OSes to be run on BSD as well.

Note that a binary compatible OS is different from running an alternative OS through

Windows Virtual PC
allow other OSes to be run on Windows, Linux, and macOS.

For another example,

Classic—but this did not make Mac OS X a binary compatible OS with Mac OS 9. Instead, the Classic environment was actually running Mac OS 9.1 in a virtual machine, running as a normal process inside of Mac OS X.[1][2]

See also

References

  1. ^ "Mac OS X System Architecture". 2002. Archived from the original on August 2, 2002.
  2. . Classic Startup is a Mach-O application that runs Mac OS 9 within its address space. It provides a hardware abstraction layer between Mac OS 9 and Mac OS X by virtualizing traps, system calls, and interrupts. It runs in a protected memory environment, with multiple Mac OS 9 processes within it layered on top of a single Mac OS X BSD process.

External links

  • KDE Techbase Policies – a compendium of C++ development rules of thumb (with some examples) for not breaking binary compatibility between releases of a library.
  • ABI Analysis Tools – a set of open-source tools for analysis of ABI and backward binary compatibility implementing KDE Techbase Policies