Some of the terms used throughout the guide are not of common usage, but are almost always used to refer to simple concepts. The choice of more technical, less common names is often to be found in the requirement to be as little ambiguous as possible. For this reason I'm trying to avoid using, for instance, the term linker, that can be easily refer to two quite different, but near, pieces of software. To solve doubts regarding these terms, you can thus refer to the following glossary.

Acronyms and shorthands


See Application Binary Interface.


See Application Programming Interface.


See Executable and Linkable Format.


See Link Editor.

See Runtime Loader.


See Portable Executable.


Application Binary Interface

With ABI we refer to the interface of a library, as exposed to its consumers (other libraries or executables alike), after the build step. In case of software written in languages similar to C, the ABI is comprised of at least the name of the functions, the type and order of their parameters, the type and size of the data it exports, and the content, order and size of its structures.

See Also Application Programming Interface.

Application Programming Interface

The generic term API refers to all the interfaces (or points of contact) between one application and another. When referring to libraries, the term takes the specific meaning of the set of functions, constants and variables defined in the library's public headers, to be further transformed into an ABI during the build step.

See Also Application Binary Interface.

Dynamic Linker

See Runtime Loader.

Executable and Linkable Format

The file format used in Linux, Solaris, FreeBSD and other operating systems to represent executable files (programs), shared objects as well as intermediate object files. The format is designed to be extensible, so that not all modern features are supported on each operating system.

See Also Portable Executable.

Link Editor

The application used to transform any number of translation units into a different object of different nature. Loosely referred to as linker, or by the common shorthand ld used on Unix systems to execute it. Not to be confused with the dynamic linker, which in this context is referred to as runtime loader.

See Also Runtime Loader.


See Link Editor.

Portable Executable

The file format used by Microsoft Windows to represent executable files (programs) as well as shared objects. While for a long time it was almost impossible to find PE files for architectures different from i386, the format was originally designed to be usable on a wide range of CPU architectures, at Windows NT originally supported MIPS, PowerPC and Alpha as well as i386; nowadays non-i386 PE files are commonly used on Windows CE embedded systems as well as alternative Windows-based platforms.

See Also Executable and Linkable Format.

Runtime Loader

The software component, usually invoked by the kernel, that reads, loads in memory, and sets up a dynamic executable file and its dependencies. Loosely referred to as dynamic linker, runtime linker or dynamic loader or by its shorthand as it is called on Unix systems. Not to be confused with the linker, which in this context is referred to as link editor.

Runtime Linker

See Runtime Loader.