XCB
# XCB

XCB (X C Binding) ist eine Programmbibliothek, die auf einfache und direkte Weise Transaktionen des X-Window-Protokolls über Funktionsaufrufe in der Programmiersprache C zur Verfügung stellt. Damit versucht sie, die bisherige Xlib durch eine leichtgewichtigere Bibliothek zu ersetzen.

Mittlerweile ist mit Xlib/XCB eine Xlib erhältlich, deren Transportschicht durch XCB ersetzt wurde. Durch die mit der herkömmlichen Xlib binär kompatible Schnittstelle kann es von bestehenden Programmen anstelle der herkömmlichen Xlib verwendet werden.

## Übersicht

XCB wurde als kleinerer, modernisierter Ersatz für Xlib konzipiert, früher die primäre C-Bibliothek für die Kommunikation mit dem X-Window-System, zeitgleich mit einer umfassenderen Überarbeitung der X-Implementierung, die in den frühen 2000er Jahren stattfand. Die Hauptziele von XCB sind:

* eine Reduktion der Größe und Komplexität der Bibliothek erzielen
* einen direkten Zugriff auf das X11-Protokoll zu bieten

Die erforderliche Größenreduzierung wird in erster Linie dadurch erreicht, dass der Umfang von XCB auf die Handhabung des X-Protokolls beschränkt wird und Xlib-Funktionen, wie die umfangreiche Dienstprogramm-Bibliothek, weggelassen werden, die bei Anwendungen allerdings auch weniger genutzt wurde. Sekundäre Ziele sind unter anderem, die C-Schnittstelle asynchron zu machen, ein besseres Multithreading zu ermöglichen und Erweiterungen (über XML-Protokollbeschreibungen) einfacher zu implementieren. Die Beschreibungen der Kern- und Erweiterungsprotokolle sind in XML, wobei ein in Python geschriebenes Programm die C-Bindings erstellt.

Ein weiteres Ziel ist es, mit Hilfe der Protokollbeschreibungen eine Protokolldokumentation, weitere Sprachbindungen und serverseitige Stubs erstellen zu können.

### Xlib-Kompatibilität

Xlib/XCB bietet Kompatibilität mit der binären Anwendungsschnittstelle mit Xlib und XCB und bietet einen inkrementellen Portierungspfad. Xlib/XCB verwendet die Protokollschicht von Xlib, ersetzt aber die Xlib-Transportschicht durch XCB und bietet Zugriff auf die zugrundeliegende XCB-Verbindung zur direkten Verwendung von XCB. Xlib/XCB ermöglicht es einer Anwendung, eine einzige Verbindung zum X-Anzeigeserver zu öffnen und sowohl XCB als auch Xlib zu verwenden, möglicherweise durch eine Mischung von Bibliotheken, die für die eine oder andere Anwendung entwickelt wurden.

## Ziele

XCB strebt folgende Ziele an:

* kleiner und weniger komplex
* direkter Zugriff auf das X11-Protokoll
* asynchron, um nebenläufige Programme besser zu unterstützen
* leicht zu erweitern

## Beispiel

Während in Xlib bzw. in Xlib/XCB die Ereignisschleife immer noch in Xlib-Funktionsaufrufen gemacht wird, sieht man hier ein Programmstück ohne Xlib-Aufrufe. Die Aufrufe sind etwas systemnaher, als man es von Xlib gewohnt ist.

