This is what wikipedia says:

> 
> In computer software, an application
>  binary interface (ABI) describes the
>  low-level interface between an
>  application (or any type of) program
>  and the operating system or another
>  application.
> 
> 
> ABIs cover details such as data type,
>  size, and alignment; the calling
>  convention, which controls how
>  functions' arguments are passed and
>  return values retrieved; the system
>  call numbers and how an application
>  should make system calls to the
>  operating system; and in the case of a
>  complete operating system ABI, the
>  binary format of object files, program
>  libraries and so on. A complete ABI,
>  such as the Intel Binary Compatibility
>  Standard (iBCS), allows a program
>  from one operating system supporting
>  that ABI to run without modifications
>  on any other such system, provided
>  that necessary shared libraries are
>  present, and similar prerequisites are
>  fulfilled.
> 
> 
> 

I guess that an ABI is a convention or standard, and compilers/linkers use this convention to produce object codes. Is that right? If so who made these conventions(companies or some organization)? What was it like when there was no ABIs? Is there documents about these ABIs that we can refer to?