This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Technology

A bit about the technology behind GNOME Shell.

GNOME Shell acts as a compositing manager for the desktop, and displays both application windows and other objects in a Clutter scene graph. Much of the code of the shell is written in Javascript but uses Clutter and GNOME platform libraries via GObject Introspection and JavaScript bindings for GNOME. For window management and compositing, the shell builds off of a Metacity branch called Mutter, which adds Clutter-based compositing to Metacity. See Owen Taylor's blog post for the explanation of the technology choices that were made for the GNOME Shell.

Technology components

The Shell is using OpenGL graphics. It's built on top of Clutter, which is a scene graph that uses OpenGL for rendering. For the window management and compositing, the Shell uses Mutter window manager, which is a branch of the traditional window manager for GNOME called Metacity that includes Clutter-based compositing.

We have a Shell Toolkit on top of Clutter, which implements many custom widgets, such as boxes that help with the layout, buttons or scrollbars. The Shell Toolkit also adds support for CSS, which makes the Shell easily themeable.

The GObject Introspection technology is used for automatically generating the GObject bindings for JavaScript. So while we have some code written in C, most of the user interface code is written in JavaScript, which is very easy to use and allows for a rapid development cycle with no need for compilation between changes.

We also have a custom Javascript console called Looking Glass that allows evaluating arbitrary JavaScript statements, as well as accessing and manipulating objects in the Shell from within the Shell. So it is similar to the Firebug in Firefox or to the interactive lisp facilities in Emacs in its nature.


2024-10-23 11:37