Next Previous Contents

1. Introduction

Linux is rock solid, it's almost crash-proof. But for a long time, there's been one thing that can consistently bring Linux down: console graphics. The GGI project wishes to close that gaping vulnerability, making it possible to do console graphics without fear of crashing Linux.

The centerpiece of the GGI project is "libggi", a shared library for drawing graphics. It is not unlike svgalib, though it has several differences. It supports accelerated graphics. It can draw on an X window. You don't have to be root to use it. But most importantly, you cannot crash Linux with it. Libggi requires a small amount of kernel support to achieve this goal. This kernel support is provided by a set of loadable kernel modules, collectively called KGI. KGI stands for Kernel Graphics Interface. KGI has two basic goals:

  1. to add support for multiple monitors and keyboards
  2. to add support for the needs of libggi

Though it is sometimes said that KGI puts graphics in the kernel, that is not strictly correct. Libggi is what contains the drawing code. KGI, the kernel part, only contains a few support functions for libggi. That's usually a tiny stub of code, and it rarely involves any actual drawing in the kernel.

KGI consists of four kinds of loadable kernel modules:

Because we've kept the drawing code out of the kernel, the display driver is only about 20 kbytes. This makes it one of the smallest, simplest modules in the Linux kernel. By way of comparison, it's 1/2 the size of the ppp driver, and less than than 1/5 the size of the sound driver. The total size of a typical set of KGI modules is less than 40 kbytes.

We'll start with a discussion of how KGI supports multiple monitors and keyboards. Later, we'll discuss its functions for supporting libggi.


Next Previous Contents