General Graphics Interface
Encyclopedia
General Graphics Interface (GGI) is a project that aims to develop a reliable, stable and fast computer graphics system that works everywhere. The intent is to allow for any program using GGI to run on any computing platform supported by it, requiring at most a recompilation
Compiler
A compiler is a computer program that transforms source code written in a programming language into another computer language...

.

Released under the permissive MIT License
MIT License
The MIT License is a free software license originating at the Massachusetts Institute of Technology . It is a permissive license, meaning that it permits reuse within proprietary software provided all copies of the licensed software include a copy of the MIT License terms...

, GGI is free software
Free software
Free software, software libre or libre software is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with restrictions that only ensure that further recipients can also do...

.

Goals

The project was originally started to make switching back and forth between virtual consoles, svgalib
SVGALib
SVGAlib is an open-source low-level graphics library which runs on Linux and FreeBSD and allows programs to change video mode and display full-screen graphics. Some popular games like Quake and Doom used it in their original releases....

, and X
X Window System
The X window system is a computer software system and network protocol that provides a basis for graphical user interfaces and rich input device capability for networked computers...

 subsystems on Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...

 more reliable. The goals are:
  • Portability through a flexible and extensible API for the applications. This avoids bloat in the applications by only getting what they use.
  • Portability in cross-platform and in backends
  • Security in the sense of requiring as few privileges as possible


The GGI framework is implemented by a set of portable
Porting
In computer science, porting is the process of adapting software so that an executable program can be created for a computing environment that is different from the one for which it was originally designed...

 user-space libraries, with an array of different backends or targets (e.g. framebuffer
Linux framebuffer
The Linux framebuffer is a graphic hardware-independent abstraction layer to show graphics on a computer monitor, typically on the console...

, X11, Quartz
Quartz (graphics layer)
Quartz specifically refers to a pair of Mac OS X technologies, each part of the Core Graphics framework: Quartz 2D and Quartz Compositor. It includes both a 2D renderer in Core Graphics and the composition engine that sends instructions to the graphics card...

, DirectX
DirectX
Microsoft DirectX is a collection of application programming interfaces for handling tasks related to multimedia, especially game programming and video, on Microsoft platforms. Originally, the names of these APIs all began with Direct, such as Direct3D, DirectDraw, DirectMusic, DirectPlay,...

), 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.

Some targets talk to other targets. These are called pseudo targets. Pseudo targets can be combined and work like a pipeline.

One example:
display-palemu, for example, emulates palette mode on truecolor modes. This allows users to run applications in palette mode even on machines where no palette mode would be available otherwise. display-tile splits large virtual display into many smaller pieces. You can spread them on multiple monitors or even forward them over a network.

History

Andreas Beck and Steffen Seeger founded The GGI Project in 1994 after some experimental precursors that were called "scrdrv".

Development of scrdrv was motivated by the problems caused by coexisting but not very well cooperating graphics environments (mainly X
X
X is the twenty-fourth letter in the basic modern Latin alphabet.-Uses:In mathematics, x is commonly used as the name for an independent variable or unknown value. The usage of x to represent an independent or unknown variable can be traced back to the Arabic word šay شيء = “thing,” used in Arabic...

 and SVGAlib
SVGALib
SVGAlib is an open-source low-level graphics library which runs on Linux and FreeBSD and allows programs to change video mode and display full-screen graphics. Some popular games like Quake and Doom used it in their original releases....

) under the Linux operating system at this time which frequently lead to lockups requiring a reboot. The first scrdrv design was heavily influenced by the graphics subsystem of the DJ DOS extender and some concepts from the SANE
Sane
Sane is an English word meaning "of sound mind"; see Sanity.Sane or SANE may also refer to:* Sane Ancient Greek city* An archaeological site and a modern name of Sani, Greece*Sane, Mali...

 project. The basic problem that scrdrv solved was that it provided a kernel mode driver that knew enough of the video hardware to set up modes, thus allowing to get into a sane state even from a messed-up or crashed graphics application.

The first official version appeared in 1995. About 1996, GGI 1.0 was released under the LGPL license.

GGI only consisted of the core lib named libggi. It included input handling, a set of 2d graphic primitives and some userspace drivers for graphic boards along with a Linux kernel patch with the userspace interface for the drivers.

The patch was known as KGI, the Kernel Graphics Interface.

In 1997, GGI went into a complete re-design. Many new ideas and a decision from Linux made GGI to what it became in GGI 2.0 released in August 2001 under the LGPL release.

In 1998, there was a big flamewar on the linux kernel mailinglist about getting KGI into the kernel.
Linus
Linus Torvalds
Linus Benedict Torvalds is a Finnish software engineer and hacker, best known for having initiated the development of the open source Linux kernel. He later became the chief architect of the Linux kernel, and now acts as the project's coordinator...

 explained his concernshttp://marc.info/?l=linux-kernel&m=89089527200744&w=2 about GGI stating, "I think that X
X Window System
The X window system is a computer software system and network protocol that provides a basis for graphical user interfaces and rich input device capability for networked computers...

 is good enough" and expressing concern regarding the overall direction of GGI.

During this time, another design idea called EvStack also added to the flamewar. EvStack was a pretty much complete redesign of the input and output subsystem that allowed for events (thus the "Ev") to flow through a "Stack" of modules that can be configured to manipulate them. EvStack is a very powerful concept, allowing e.g. to have two keyboards attached to the same machine, one operating a text console on one graphics adapter and one operating a graphics console on the other (as was demonstrated on the Linux-Kongreß´97 http://www.linux-kongress.org/1997/seegerbeck.html) and even allows for having different keyboard layouts on different virtual consoles or attaching keyboards via network. However this came at the price of a huge patch to the input subsystem which did not seem acceptable. (The modern Linux input event system allows programs (e.g. Xorg) to receive keyboard events other than through the console keyboard, allowing multiseat operation.)

A set of talks about GGI, KGI and EvStack were given at LinuxExpo 98.

For GGI 2.0, KGI was split off and became its own project named The KGI Project. GGI 2.0 consisted of a set of libraries. During the 2.0 beta phase in late 1998 the license of the libraries was changed from LGPL to a MIT-style license. Much work was also done on the buildsystem to support more operating systems. It worked on FreeBSD, code for OpenBSD, NetBSD and even MS-Windows were there as well as some support for more hardware platforms.

Input handling was moved into a library called libgii. Generic GGI code was in libgg, a sublib within libgii. The core graphic library, libggi, has a lightweight set of graphic primitives that was common enough to write any kind of graphic application, while higherlevel API went into other libraries on top of libggi. These were called GGI extensions. libggi support a set of targets, most of them were Linux specific: fbdev, X, aa, vcsa, terminfo
Terminfo
Terminfo is a library and database that enables programs to use display terminals in a device-independent manner. This library has its origins in the UNIX System III operating system....

 and some pseudo targets such as tile, multi, palemu and trueemu. The GGI extensions featured higherlevel API. libggiwmh provides functionality for windowed only targets, at that time this was only X. libggimisc provided some basic stuff like vga splitline.

December 2002, GGI 2.0.2 was released. The most user visible change was the from scratch re-designed X backend.

Another noticeable change was the huge documentation improvement.

Last, but not least, the release cycles changed. From this release on, there was a development and a stable tree.

The stable tree is open for bugfixes only, the development tree got the name, following the BSD scheme, -current.

November 2004, the last bugfix from the GGI 2.0.x stable tree was released in favour for a new GGI 2.1.x stable tree.

GGI 2.1.x runs on many Operating Systems: GNU Hurd
GNU Hurd
GNU Hurd is a free software Unix-like replacement for the Unix kernel, released under the GNU General Public License. It has been under development since 1990 by the GNU Project of the Free Software Foundation...

, Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...

, *BSD, System V, Mac OS X
Mac OS X
Mac OS X is a series of Unix-based operating systems and graphical user interfaces developed, marketed, and sold by Apple Inc. Since 2002, has been included with all new Macintosh computer systems...

 and MS Windows. Support for more hardware platforms has been added. NetBSD
NetBSD
NetBSD is a freely available open source version of the Berkeley Software Distribution Unix operating system. It was the second open source BSD descendant to be formally released, after 386BSD, and continues to be actively developed. The NetBSD project is primarily focused on high quality design,...

 even created a binary package for NetBSD/Vax! A new GGI library on top of libgii called libgiigic has been added. It allows to combine user actions with events at runtime.

GGI 2.2 was released in December 2005. The target autodetection has been reworked and was no longer linux centric.

GGI replaced its own integer datatypes with ANSI C99 types for more portability.
A target for Quartz has been added. Mac OS X users no longer depend on X11 but still can use the X11 backend.

The most user visible change, however, was the support for static linked in targets.

Latest release is GGI 2.2.2, a bugfix release in the GGI 2.2.x stable series.
It was released in January 2007.

Current status

The GGI Project is moving onward to the GGI 3.0 release. libgii has been re-designed. The input handling has been replaced with a reactor event model, which is more flexible than using select on a file descriptor
File descriptor
In computer programming, a file descriptor is an abstract indicator for accessing a file. The term is generally used in POSIX operating systems...

. This also simplified the input-drivers in general, particularly for those who don't use file descriptors such as input-quartz.
libgg has been moved out into a separate library.

libggi merged some targets into one sublib, multi with tile and monotext with palemu. libggi also got a new VNC target,
which allows to run any application as a VNC server.

In GGI 3.0, the extension mechanism has been re-designed from scratch to simplify interactions between the extensions and the core libs. This required a little API change.

See also

  • XGGI
    XGGI
    XGGI is a partly accelerated X server which uses the General Graphics Interface and LibGGI to do hardware-independent graphics and input. It supports 8-, 15-, 16-, 24-, and 32-bit modes output to multiple monitors on any LibGGI target that has a pixellinear DirectBuffer, and should run in any...

  • FrameBuffer UI
  • Text windows
  • Fresco (windowing system)
The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK