XCB was designed as a smaller, modernized replacement for Xlib, previously the primary C library for communicating with the X window system, coinciding with a more complete overhaul of the X implementation that took place during the early 2000s. The main goals of XCB are to:
The required size reduction is achieved primarily by restricting XCB's scope to handling the X protocol and omitting Xlib functionality such as its extensive utility library, much of which saw little use by applications. This results in a factor thirty reduction of the compiled library size. Secondary goals include making the C interface asynchronous, facilitating better multithreading and making it easier to implement extensions. The core and extension protocol descriptions are in XML, with a program written in Python creating the C bindings. A further goal is to be able to use these protocol descriptions to create protocol documentation, more language bindings, and server-side stubs. Massey and others have worked to prove key portions of XCB formally correct using Z notation.
Xlib compatibility
Xlib/XCB provides application binary interface compatibility with both Xlib and XCB, providing an incremental porting path. Xlib/XCB uses the protocol layer of Xlib, but replaces the Xlib transport layer with XCB, and provides access to the underlying XCB connection for direct use of XCB. Xlib/XCB allows an application to open a single connection to the X display server and use both XCB and Xlib, possibly through a mixture of libraries designed for one or the other.
Example
// Simple XCB application for opening a window and drawing a box in it // To compile it using GNU, use: // gcc x.c -lxcb
include
include
include
int main
XCB has a comparable, but slightly lower-level API than Xlib, as can be seen with this example.
Protocol description
Creators of XCB have invented a specialized interface description language to model X11 protocol in language-neutral way and facilitate generation of bindings to other programming languages. libxcb itself is implemented as a code generator and a tiny C stub of utility functions. An example: extension-name="BigRequests" extension-multiword="true" major-version="0" minor-version="0">
Logo
The XCB logo was produced by Gearóid Molloy, author of the web comic Neko the Kitty, and donated to the project.