[Xcb] Re: gtk, to xcb or not

Havoc Pennington hp at redhat.com
Thu Nov 9 19:20:53 PST 2006


Jamey Sharp wrote:
> Assuming a project is willing to require the new version of Xlib, then
> avoiding dual-maintenance hell is easy. The Xlib-specific interfaces (in
> this case, gdkx.h) can still be provided; they become simple wrappers
> that first convert Xlib types to XCB types with help from libX11-xcb,
> then call into the XCB version of the same code. [1]

If I understand what you're saying, the Xlib wrapper around XCB is 
mostly source compatible with Xlib but not fully source compatible and 
by no means ABI compatible?

If so, then for the next ~10 years or more everyone will still be 
shipping a GTK ABI that links to libX11.

A mostly-source-compatible wrapper helps quickly port apps that use 
gdkx.h extensively (mostly weird apps, like metacity or the pager 
applet). Those are the same apps that might actually benefit from XCB, 
so once the desktop is up-and-running on the Xlib-like shim, you might 
hope for a moderately quick move away from it.

The wrapper doesn't give a way to keep gtk-x11 ABI compatible, though, 
that I see... ?

As an example, to keep GTK's ABI guarantees/policy, metacity would have 
to keep working without recompilation ... and metacity uses Xlibint.h.
So keeping the ABI while cutting to XCB is tough...

The viable approaches I can think of:

1) "cut and run" or "the GTK 1.2 approach" which is basically just leave 
the old library ABI compatible and completely untouched for the next 10 
years - avoid maintenance burden by not doing any maintenance.

2) keep one codebase for gdk-xcb and gdk-x11 (which would be most easily 
done by pretty much using the xlib API perhaps, but in any case some 
kind of abstraction layer perhaps with some simple #ifdef'ing). Build 
the same codebase twice when building gdk, once linking it to X11 and 
once linking it to XCB. Apps using this gdk-xcb could just use XCB 
directly even though gdk itself would have the shim layer.


The first thing though is probably to step back and ask if it's all 
worth it - GDK/GTK already are pretty good about avoiding round trips, 
for example, and they will never be threadsafe anyhow. I'm guessing X11 
vs. XCB won't show up in profiles too much for GTK because the big X 
issue in profiles is round trips, and if there aren't any that XCB helps 
kill off, it just won't matter... the time is all going to be in things 
like Cairo and GObject, not in the X stuff.

Smaller memory footprint is one advantage worth investigating.

Also worth investigating is whether there would be noticeable wins in 
the desktop that uses gtk, e.g. metacity (well, maybe only compiz 
matters now), or the pager. The pager is suffering from libwnck being a 
crazy lot of crack though anyhow, and metacity already has asynchronous 
property fetching and there just aren't a lot of other round trips 
involved in a WM ... you could kill synchronous error traps from 
metacity probably, but I don't know how much that would matter.

Havoc



More information about the Xcb mailing list