Linker and Libraries Guide

Interface Compatibility

Many types of change can be made to an object. In their simplest terms, these changes can be categorized into one of two groups:

The following table categorizes some common object changes.

Table 5–1 Interface Compatibility Examples

Object Change 

Update Type 

The addition of a symbol 

Compatible 

The removal of a symbol 

Incompatible 

The addition of an argument to a non-varargs(3HEAD) function

Incompatible 

The removal of an argument from a function 

Incompatible 

The change of size, or content, of a data item to a function or as an external definition 

Incompatible 

A bug fix, or internal enhancement to a function, providing the semantic properties of the object remain unchanged 

Compatible 

A bug fix, or internal enhancement to a function when the semantic properties of the object change 

Incompatible 

Because of interposition, the addition of a symbol can constitute an incompatible update, such that the new symbol might conflict with an applications use of that symbol. However, this does seem rare in practice as source-level name space management is commonly used.

Compatible updates can be accommodated by maintaining version definitions internal to the object being generated. Incompatible updates can be accommodated by producing a new object with a new external versioned name. Both of these versioning techniques enable the selective binding of applications. They also enable verification of correct version binding at runtime. These two techniques are explored in more detail in the following sections.