iBCS is the Intel Binary Compatibility Specification, an ABI developed by vendors of x86-based Unix vendors to allow binary compatibility between their respective implementations. With the death of most proprietary x86 Unix variants and the adoption of the Linux ABI as the de facto standard x86 ABI, it has now faded to the background. For example, the Linux kernel implementation of the iBCS standard has seen no new deveopment since 1998, and is incompatible with 2.4 and 2.6 kernels.

iBCS only standardises the kernel system call interface, not binary formats or library interfaces. iBCS binaries could be in one of a number of formats, most notably ELF, a.out, and COFF, ELF being the most common. The host kernel must support the binary format of the executable for it to run, regardless of its iBCS conformance. Also, any shared libraries used by the executable must be provided, which occasionally causes problems with licensing issues. Nevertheless, most programs that would be run using iBCS compatibility rather than recompiling for the host system are statically-linked proprietary programs, often obviating the need for foreign shared libraries.

So, since the iBCS standard predates the creation of the Linux kernel, why hasn't it become the standard ABI for x86-based Unix systems? The first reason has to do with the age-old bane of the proprietary Unix market: incompatible extensions. Sure, everyone involved sat down and hammered out a standard that they then all implemented, but then they each solved problems with or added capabilities to their ABIs without consultation with each other or changing the published standard. Thus, iBCS became a family of subtly different ABIs, each of whose quirks needed to be addressed in any implementation which offered true compatibility. The issue of shared libraries was probably also a factor, with the base Linux libraries being freely redistributable unlike some of their competitors's. But the final blow was probably that, by the end of the 1990s, most x86 Unix machines were running Linux or a BSD variant. Then, these were the systems to be compatible with, not the systems that had to be compatible. Since BSD had implemented a Linux compatibility system, this left the Linux ABI as the de facto standard for x86 Unix.


Sources include the Linux iBCS home page at http://www.purplet.demon.co.uk/linux/ibcs/.
(CC)
This writeup is copyright 2004 D.G. Roberge and is released under the Creative Commons Attribution-NonCommercial-ShareAlike licence. Details can be found at http://creativecommons.org/licenses/by-nc-sa/2.0/ .