In the last few months, there has been a lot of talk about Xgl, compiz, AIGLX et cetera. It seems that “Xgl” has become a synonym for fancy desktop on Linux – but nobody seems to talk about the alternatives or how it all works. I have had a little look into this and am going to summarize it for y’all. I will explain where the following come from and how they work:
But first, I’ll start with a proper introduction: UNIX graphical user interfaces (GUI) have traditionally used something called the X window system, which originated at MIT in 1984 and has been using the same protocol (X11) since 1987. X11 gives us what we have come to expect from a GUI system, which is essentially drawing rectangular windows onto a screen. Over the years many extensions have been added to X11 to allow things like non-rectangular windows and accelerated display of videos and three-dimensional graphics (like many games now use). One of the latest extensions is called
Composite, which allows rendering of windows offscreen buffer, allowing an application (called a composite manager) to do the actual drawing. This allows effects like drop shadows and true transparency. All of the presented systems aim to enrich the possibilities of
Composite by somehow integrating OpenGL, the system used for three-dimensional drawing, to accelerate existing effects and add new ones like wobbly windows and animated workspace switching. However, the ways they do this varies.
Xglx, more commonly known as just Xgl, is a complete X11 server using GLX (X11+OpenGL) for communicating with the hardware, like a driver. This means that you need 2 X servers running at once whenever you want Xglx – this created some overhead. Also, the indirectness makes it difficult to integrate special features of graphics cards and direct rendering (fast). For special effects, Xgl relies on an external composite and window manager, the most common today being compiz.
Xegl is closely related to Xglx, with the major difference in choice of driver. While Xglx relies on GLX, and thus a separate traditional X server, Xegl uses EGL (embedded openGL), a kernel-level OpenGL API. Xegl is little known and almost not used or developed currently since only very few graphics card drivers support EGL. Xegl shares much the same problems as Xglx: by relying fully on OpenGL, it neglects special features a graphics card might have (e.g.: Multihead support, special shader APIs).
For more information about Xglx and Xegl see wikipedia and the openSUSE wiki.
Luminocity was a testbed of Fedora and GNOME developers for new special effects not yet ready for Metacity. It relies on a traditional X server to provide an OpenGL API and on the nested X server Xfake for the applications to connect to. Luminocity itself is a Window and Composite manager that draws the Windows from the Xfake server into a window (often fullscreen) on the traditional server via OpenGL, providing effects like wobbly windows or transparency that compiz manages under Xgl (=Xglx/Xegl).
For more information about Luminocity see GNOME Live!.
AIGLX stands for “Accelerated Indirect GLX”. It is an extension to the core X server developed mainly by the Fedora team providing Xgl-like functionality. It eliminated the extra X server needed with Xglx, saving development effort and allowing the integration of card-specific features as always. Like Xgl, it relies on an external application for effects. Mostly, this is a version of Metacity including code originally from Luminocity. Compiz can also be used on AIGLX and Metacity can be used on Xgl due to mostly compatible APIs. The main “problem” for AIGLX is that it requires support at driver level, which currently is only available in free drivers. However, it is known that NVIDIA is actively developing full AIGLX support in their proprietary drivers.
For more information about AIGLX see the Fedora Project Wiki.
Most Linux distributions and users have embraced Xglx and compiz, owing to the fact that it works right now with any GL-capable driver and it was, contrary to the similar Luminocity, well publicised (by Novell). Only few, most notably NVIDIA and Red Hat/Fedora, support AIGLX. I personally think that AIGLX is the right path – but Xglx remains the only viable option for most at present and was good for some short-term publicity.