The Xorg server includes version numbers for various ABI's for interfaces used by loadable modules such as drivers and extensions.

This major number of the ABI version (x.*) is incremented when there are incompatible changes in module API/ABI's, while the minor number (*.x) is incremented for compatible additions.

Modules reporting they require a incompatible version number will not be loaded unless the -ignoreABI option is used. (Modules can also check ABI versions themselves, and choose which function variant to call or structure variant to access, based on the reported versions - this is the option used by some closed source drivers for instance.)

ABI numbers may increment multiple times during Xorg server development cycles, to track changes for those following the head of the development stream. X.Org tries to avoid changing ABI's incompatibly in stable release branches, but may add compatible changes which increment the minor number.

ABI Versions: (ABI_*_VERSION)
Xorg Version: ANSIC VIDEODRV XINPUT EXTENSION FONT
1.3 0.3 1.2 0.7 0.3 0.5
1.4 0.3 2.0 2.0 0.3 0.5
1.5 0.4 4.1 2.1 1.1 0.6
1.6 0.4 5.0 4.0 2.0 0.6
1.7 0.4 6.0 7.0 2.0 0.6
1.8 0.4 7.0 9.0 3.0 0.6
1.9 0.4 8.0 11.0 4.0 0.6
1.10 0.4 10.0 12.2 5.0 0.6
?1.11 0.4 11.0 13.0 5.0 0.6
1.12 0.4 12.0 16.0 6.0 0.6
1.13 0.4 13.0 18.0 7.0 0.6
1.14 0.4 14.1 19.1 7.0 0.6

When looking at Xserver source code, the ABI versions may be found as definitions of ABI_VIDEODRV_VERSION, ABI_XINPUT_VERSION, etc. in hw/xfree86/common/xf86Module.h.

Input ABI policy

Note: this is a guideline more so than a strict rule.

The input ABI is bumped whenever an incompatible change is introduced to the server. This may happen several times during a development cycle. The goal of the ABI management is to allow the master branch of the various input drivers to compile when bisecting the server. If multiple changes to the server's ABI are required, these changes are usually accumulated and pushed in one merge.