XCB/ XCBToDo
  1. Getting started
  2. Tasks
    1. Tests and Demos
    2. XCB
    3. Xlib on XCB
  3. Other projects
    1. xcb-wm: Window manager toolkit
    2. Alternate targets
      1. xcb-server
      2. xcb-doc
      3. xcb-pretty
      4. XCB for other languages

Tasks requiring documentation as a product should have that documentation placed in the wiki so that other contributors can learn from it.

/!\ Now that XCB is official, we should transition the to-do list to the freedesktop Bugzilla bug database (Product = XCB).

Please don't hesitate to add new items or add detail to items in Bugzilla. You would be wise to notify the mailing list if the item is significant, too.

Don't forget to ask for help on the mailing list if you get stuck.

Getting started

If you're not sure where to start in learning about XCB and XCL, you might try these steps. Documenting your progress for others coming this way would be a great contribution too.

With that experience, the easiest thing you can do to help our efforts is to implement some extension that's currently unsupported by XCB.

If you are familiar with Xlib or the X protocol, you might try porting some existing Xlib applications to XCB, or writing new applications. See the page [[XcbPorting]] for pointers.

Tasks

Tasks are ranked by priority:

Tests and Demos

{1} Now that XCB has released version 1.0 and promised API compatibility, merge all XCB ports of standard X utilities back into their upstream repositories (perhaps on a branch at first). Make sure to remove the use of xcb-util first, though.

These specific features have been proposed as targets for simple test apps.

{3} Porting the standard xapps to XCB would give us some nice, simple demos. There's a nearly feature-complete clone of xdpyinfo among the XCB test apps already; more would be cool.

{3} Porting xcompmgr would provide an excellent test of the [[XFIXES|FixesExt]], [[Composite|CompositeExt]], and [[DAMAGE|XDamage]] protocol descriptions. It could also be a useful demo for the xcb-wm bits.

{3} {3} Make DPMS demo have full xset dpms functionality.

{3} {3} For Xlib with counting mutexes, test the relative performance of UNIX98 recursive mutexes versus POSIX fast mutexes. The impact is expected to be nil, but it would be nice to be able to say so with certainty.

XCB

This list might be roughly in order of importance.

Xlib on XCB

Other projects

xcb-wm: Window manager toolkit

Encapsulate ICCCM, window reparenting and event capture, and anything else that seems appropriate, in one or more libraries. It should be able to cooperate with other libraries; Cairo comes to mind. Perhaps COMPOSITE extension helpers would be useful too, so it can support compositing managers as well.

A prototype implementation is available in the xcb-util module; more discussion is on the [[usingxcb]] page.

Alternate targets

The XCB protocol descriptions are largely target-language independent. There are some additional potential uses for the protocol descriptions that an XSLT hacker could try implementing. The process of implementing these will reveal limits in [[XmlXcb]], for which it should be extended.

xcb-server

XCB: not just for clients any more!

Just as xcb handles the details of the protocol on client side, the server side protocol implementation could be auto-generated from the same protocol descriptions, with many of the same benefits: extension implementers can focus on making real contributions to X rather than writing protocol implementations, and the server can be made smaller and more reliable.

A significant chunk of the time spent implementing extensions in the X server currently goes to typing byte-swapping code, which is often poorly tested and rarely exercised. There is sufficient information in the protocol description to infer which bytes should be swapped, and xcb-server would be able to generate that code.

Better yet, smaller code can be generated easily than can be reliably produced by hand. [[KeithPackard]] suggested a printf-style description of the bytes that should be swapped, and said that when he has tried this in the past the overall code size was smaller, but that the format strings were too difficult to maintain by hand.

xcb-doc

Most of the protocol descriptions presently in XCB were generated by reading protocol documentation and hand-translating it to our description language. Now it would be nice to be able to go the other way, instantly generating complete documentation for the core protocol and all extensions implemented for XCB, and perhaps targeting more convenient documentation formats like !LaTeX.

[[AndyHowe]] has a "pre-alpha" implementation. If you ask him a second time, he'll tell you it's "pre-pre-alpha".

Macros like [[COMMENT|XCBProtocolLanguage]] were intended to be read by this, but largely fail to be useful. We need a better set of macros that cover the natural sorts of human-readable documentation, and those macros need to clearly associate with the protocol elements that they describe.

Computing the number of bytes each field occupies in the binary protocol requires some data that doesn't currently appear in any of our protocol descriptions. Recording the size of CARD*, INT*, BOOL, BYTE, etc. should enable this, since all the other types are composed from those.

With the merge of [[XmlXcb]], this could now be accomplished by integrating part or all of some existing XML documentation format into the XML-XCB data format.

xcb-pretty

Sometimes applications want to print various parts of the X protocol in human-readable form. Error handlers and applications like the X Event Viewer (xev) and xscope come to mind. For these applications, it would be nice to auto-generate the protocol pretty-printer code.

[[JoshTriplett]] is currently working on an X protocol dissector (Xamine) based on the [[XmlXcb]] protocol descriptions.

XCB for other languages

Enabling clients written in languages other than C to take advantage of XCB's features would be great. That might mean generating simple bindings to the C code, or perhaps generating native code.

Note that while the protocol layer could be native, the transport layer should probably be that of the XCB C library, so that languages with the ability to link with C code can call XCB on the same connection from both C and the other language.

Obvious languages to target include:

[[Completed Tasks|XCBCompletedTasks]]