The Solaris ABI is the set of supported run-time interfaces that are available for an application to use with the Solaris operating environment. The most important components of the ABI are in the following list:
The interfaces provided by the Solaris system libraries, which are documented in section 3 of the man pages
The interfaces provided by the Solaris kernel system calls, which are documented in section 2 of the man pages
The locations and formats of various system files and directories, which are documented in section 4 of the man pages
The input and output syntax and semantics of Solaris utilities, which are documented in section 1 of the man pages
The main component of the Solaris ABI is the set of system library interfaces. The term ABI in this chapter refers only to that component. The ABI contains exclusively C language interfaces, as C is the only language for which the Solaris operating environment provides interfaces.
C source code that is written to the Solaris API (Application Programming Interface) is transformed by the C compiler into a binary for one of three ABI versions. The three versions are 32-bit SPARC, 64-bit SPARC, or 32-bit Intel. While the ABI is very similar to the API, the source compilation process introduces several important differences:
Compiler directives such as #define can alter or replace source-level constructs. The resulting binary might lack a symbol present in the source or include a symbol not present in the source.
The compiler might generate processor-specific symbols, such as arithmetic instructions, which augment or replace source constructs.
The compiler's binary layout might be specific to that compiler and the versions of the source language which the compiler accepts. In such cases, identical code compiled with different compilers might produce incompatible binaries.
For these reasons, source-level (API) compatibility does not provide a sufficient expectation of binary compatibility across Solaris releases.
The Solaris ABI is made up of the supported interfaces provided by the operating system. Some of the interfaces that are available in the system are intended for the exclusive use of the operating system. These exclusive interfaces are not available for use by an application. Prior to the SunOS 5.6 release, all of the interfaces in Solaris libraries were available for application developers to use. With the library symbol scoping technology available in the Solaris link editor, interfaces not intended for use outside of a library have their scope reduced to be purely local to the library. See the Linker and Libraries Guide for details. Due to system requirements, not all private interfaces can have such a reduced scope. These interfaces are labeled private, and are not included in the Solaris ABI.