The free world is the new continent in cyberspace that we have built so we can live here in freedom. It's impossible to live in freedom in the old world of cyberspace, where every program has its feudal lord that bullies and mistreats the users. So, to live in freedom we have to build a new continent. Because this is a virtual continent, it has room for everyone, and there are no immigration restrictions. - Richard Stallman -

GGI stands for General Graphics Interface, and it is a project that aims to develop a reliable, stable and fast graphics system that works everywhere. We want to allow any program using GGI to run on any platform, requiring at most a recompile.

Historically, GGI was developed in order to provide a unified interface to manage access to graphics hardware under Linux, to avoid the conflicts and instability arising from the direct access of hardware by competing graphics systems such as X and svgalib.

The GGI project is now focussed on developing a set of portable user-space libraries, with an array of different backends or targets (eg. framebuffer, X, quartz, directx). While GGI no longer aims to manage direct access to graphics hardware, we provide a target to use the interfaces provided by our associated KGI Project▸, which is concerned with providing the necessary kernel level support (protection, virtualization and abstraction) through a fast, secure and portable Kernel Graphics Interface.

Developed in a professional manner, the clean design, stability and scalability of GGI make it excellent in embedded, production and research environments, and it is user-supported with complete source.

The GGI project provides various libraries, of which the two most fundamental are LibGII (for input-handling) and LibGGI (for graphical output). All other packages add features to these core libraries, and so depend on one or both of them; for a more in-depth explanation of package categories, see the longer introduction to GGI.

Example of running the inputdump program supplied with GGI, using the DirectX target under MSYS/MinGW (in MS Windows). Four different input devices are shown: a keyboard, mouse, steering-wheel/pedals and an advanced joystick.

Demonstration of the cube3d demo supplied with GGI. In this case the four vertical sides of the cube are each running XGGI (an X server for GGI) and a Nixterm (a terminal emulator for GGI) is running on the top and bottom. This demo is an extreme example of how GGI applications may be run on different targets - including the sides of a rotating cube! - without recompiling.

This was set up by former project leader Andreas Beck, with the help of this script.

A port of id-software's classic game Doom to run on GGI (link available in the games section of our software page). This game does not usually look like the image below however: here a perl script is used to split the display across many different windows (GGI visuals). This can be utilised for simple multi-head display, up to displaying over a video-wall.