XCB(X C Binding)とは
XCB(X C Binding)は、
X Window Systemの
C言語バインディングであり、従来のXlibを置き換えることを目指して開発されました。
2001年にBart Massey氏によってプロジェクトが開始され、Xlibの機能を引き継ぎつつ、より効率的で柔軟なアーキテクチャを提供することを目的としています。
Xlib/XCB の互換性
Xlib/XCBは、XlibとXCBの間でアプリケーションバイナリインターフェース(ABI)互換性を提供することで、段階的な移行を可能にします。具体的には、Xlibのプロトコル層を利用しつつ、トランスポート層をXCBに置き換えています。これにより、XCBを直接利用するためのコネクションにアクセスできるようになり、既存のXlibベースのアプリケーションを段階的にXCBに移行することが容易になります。
XCBの主な目的
XCBの主な目的は以下の2点です。
1.
ライブラリのサイズ縮小と単純化: 従来のXlibに比べて、より軽量でシンプルなライブラリ構造を目指しています。
2.
Xプロトコルへの直接アクセス: Xプロトコルに直接アクセスできるようにすることで、より効率的な操作と柔軟性を実現します。
この2つ目の目的には、
C言語インターフェースを非同期化することも含まれています。これにより、マルチスレッド化が容易になり、XML(xcb-proto)によるプロトコル記述を通じて拡張機能の実装が容易になります。
プロトコル記述とコード生成
XCBでは、コアプロトコルと拡張プロトコルがXML(xcb-proto)で記述されており、
C言語バインディングは
Pythonスクリプトによって生成されます。以前のバージョンではXSLTやm4が使用されていましたが、より柔軟で保守性の高い
Pythonスクリプトに移行しました。このプロトコル記述は、プロトコルに関するドキュメント生成や、
C言語以外のバインディング、サーバサイドのスタブ生成にも再利用可能です。
Massey氏らは、XCBの主要部分をZ言語を用いて形式的に検証しました。これは、Xlibにマルチスレッド同期処理に関するAPI仕様レベルでの誤りが以前から指摘されていたため、XCBの堅牢性を高めるための取り組みです。
XCBとXlibの比較
XCBは、APIの抽象化レベルがXlibよりも若干低いものの、Xlibとほぼ同等の機能を提供します。このことは、XCBがより低レベルのアクセスを可能にすることで、より効率的な制御とカスタマイズを可能にしていることを意味します。
XCBのプロトコル記述
XCBの開発者は、X11プロトコルを記述するために、プログラミング言語に依存しないXMLベースのインターフェース記述言語を作成しました。これにより、他のプログラミング言語とのバインディングが容易になっています。libxcb自体は、コードジェネレーターといくつかの
C言語ユーティリティ関数で構成されています。
参考資料
以下にXCBに関する参考文献を記載します。
XCB: An X Protocol C Binding (PDF) - Bart Massey and Jamey Sharp (2001年9月19日, XFree86 2001年技術会議)
XCL: An Xlib Compatibility Layer For XCB - Jamey Sharp and Bart Massey (
2002年4月15日, USENIX
2002年技術会議)
X Meets Z: Verifying Correctness In The Presence Of POSIX Threads - Bart Massey and Robert Bauer (2002年4月15日, USENIX 2002年技術会議)
外部リンク
公式ウェブサイト
XCB API リファレンス - チュートリアル
libxcb チュートリアル
*
論文等