Allgemeine Grafikschnittstelle - General Graphics Interface

Allgemeine Grafikschnittstelle
Entwickler GGI-Entwickler
Stabile Version
2.2.2 / 27. Januar 2007 ; Vor 14 Jahren ( 2007-01-27 )
Typ Programmierschnittstelle
Lizenz MIT-Lizenz
Webseite www .ibiblio .org / ggicore / index .html

General Graphics Interface (GGI) war ein Projekt, das darauf abzielte, ein zuverlässiges, stabiles und schnelles Computergrafiksystem zu entwickeln, das überall funktioniert. Die Absicht war, dass jedes Programm, das GGI verwendet, auf jeder von ihm unterstützten Computerplattform ausgeführt werden kann, was höchstens eine Neukompilierung erfordert . GGI ist freie Open-Source-Software und unterliegt den Anforderungen der MIT-Lizenz .

Das GGI-Projekt und seine verwandten Projekte wie KGI gelten allgemein als tot.

Ziele

Das Projekt wurde ursprünglich gestartet, um das Umschalten zwischen virtuellen Konsolen , svgalib und den X- Display-Server- Subsystemen unter Linux zuverlässiger zu machen. Die Ziele waren:

  • Portabilität durch eine flexible und erweiterbare API für die Anwendungen. Dies vermeidet ein Aufblähen in den Anwendungen, indem nur das abgerufen wird, was sie verwenden.
  • Portabilität plattformübergreifend und in Backends
  • Sicherheit im Sinne von möglichst wenigen Privilegien

Das GGI Rahmen wird durch einen Satz implementiert tragbaren Benutzerraum - Bibliotheken , mit einer Reihe von verschiedenen Back - Ends oder Targets (zB Linux Framebuffer , X11 , Quartz , DirectX ), von denen die beiden grundlegendsten libgii sind (für die Eingabe-handling) und LibGGI (für grafische Ausgabe). Alle anderen Pakete fügen diesen Kernbibliotheken Funktionen hinzu und sind daher von einer oder beiden abhängig.

Einige Ziele sprechen mit anderen Zielen. Diese werden Pseudoziele genannt. Pseudoziele können kombiniert werden und funktionieren wie eine Pipeline.

Ein Beispiel: display-palemu zum Beispiel emuliert den Palettenmodus auf Truecolor-Modi. Dadurch können Benutzer Anwendungen im Palettenmodus auch auf Maschinen ausführen, auf denen sonst kein Palettenmodus verfügbar wäre. display-tile teilt große virtuelle Displays in viele kleinere Teile auf. Sie können sie auf mehrere Monitore verteilen oder sogar über ein Netzwerk weiterleiten.

Geschichte

Andreas Beck und Steffen Seeger gründeten The GGI Project 1994 nach einigen experimentellen Vorläufern, die "scrdrv" genannt wurden.

Die Entwicklung von scrdrv wurde durch die Probleme motiviert, die zu dieser Zeit durch koexistierende, aber nicht sehr gut zusammenarbeitende Grafikumgebungen (hauptsächlich X und SVGAlib ) unter dem Linux-Betriebssystem verursacht wurden, die häufig zu Abstürzen führten, die einen Neustart erforderten. Das erste scrdrv-Design wurde stark vom Grafik-Subsystem des DJ-DOS-Extenders und einigen Konzepten aus dem SANE- Projekt beeinflusst. Das grundlegende Problem, das scrdrv löste, bestand darin, dass es einen Kernel-Modus-Treiber bereitstellte, der genug über die Videohardware kannte, um Modi einzurichten, wodurch es ermöglicht wurde, selbst aus einer durcheinandergebrachten oder abgestürzten Grafikanwendung in einen gesunden Zustand zu gelangen.

Die erste offizielle Version erschien 1995. Ungefähr 1996 wurde GGI 1.0 unter der LGPL-Lizenz veröffentlicht. GGI bestand nur aus der Kernbibliothek namens libggi . Es beinhaltete die Eingabebehandlung, einen Satz von 2D-Grafikprimitiven und einige Userspace-Treiber für Grafikkarten sowie einen Linux-Kernel-Patch mit der Userspace-Schnittstelle für die Treiber. Der Patch war als KGI bekannt, das Kernel Graphics Interface.

1997 ging GGI in ein komplettes Re-Design. Viele neue Ideen und eine Entscheidung von Linux machten GGI zu dem, was es in GGI 2.0 wurde, das im August 2001 unter dem MIT-Release veröffentlicht wurde.

1998 gab es einen großen Flame War auf der Linux-Kernel-Mailingliste, um KGI in den Kernel zu bekommen. Linus Torvalds erklärte seine Bedenken bezüglich GGI mit den Worten: "Ich denke, dass X gut genug ist" und äußerte Bedenken bezüglich der Gesamtrichtung von GGI.

Während dieser Zeit kam auch eine weitere Designidee namens EvStack zum Flamewar hinzu. EvStack war ein ziemlich komplettes Redesign des Eingabe- und Ausgabe-Subsystems, das es Ereignissen (also dem "Ev") ermöglichte, durch einen "Stack" von Modulen zu fließen, die konfiguriert werden können, um sie zu manipulieren. EvStack ist ein sehr leistungsfähiges Konzept, das es zB ermöglicht, zwei Tastaturen an den gleichen Rechner anzuschließen, wobei eine eine Textkonsole auf einer Grafikkarte und eine eine Grafikkonsole auf der anderen bedient (wie auf dem Linux-Kongreß ´97 demonstriert) und ermöglicht sogar unterschiedliche Tastaturlayouts auf verschiedenen virtuellen Konsolen oder das Anschließen von Tastaturen über das Netzwerk. Dies kam jedoch zum Preis eines riesigen Patches für das Eingabesubsystem, der nicht akzeptabel schien. Das moderne Linux-Eingabeereignissystem ermöglicht es Programmen (zB Xorg), Tastaturereignisse anders als über die Konsolentastatur zu empfangen, was einen Mehrplatzbetrieb ermöglicht .

Auf der LinuxExpo 98 wurden eine Reihe von Vorträgen über GGI, KGI und EvStack gehalten.

Für GGI 2.0 wurde KGI abgespalten und wurde ein eigenes Projekt namens The KGI Project . GGI 2.0 bestand aus einer Reihe von Bibliotheken. Während der 2.0-Beta-Phase Ende 1998 wurde die Lizenz der Bibliotheken von LGPL auf eine MIT-ähnliche Lizenz geändert. Auch am Buildsystem wurde viel Arbeit geleistet, um mehr Betriebssysteme zu unterstützen. Es funktionierte auf FreeBSD, Code für OpenBSD, NetBSD und sogar Microsoft Windows waren da sowie einige Unterstützung für weitere Hardware-Plattformen.

Die Eingabebehandlung wurde in eine Bibliothek namens libgii verschoben. Generischer GGI-Code war in libgg, einer Unterbibliothek innerhalb von libgii. Die Kerngrafikbibliothek libggi hat einen leichten Satz von Grafikprimitiven, die häufig genug waren, um jede Art von Grafikanwendung zu schreiben, während APIs auf höherer Ebene in andere Bibliotheken über libggi hinausgingen. Diese wurden als GGI-Erweiterungen bezeichnet. libggi unterstützt eine Reihe von Zielen, die meisten davon waren Linux-spezifisch: fbdev, X, aa, vcsa, terminfo und einige Pseudo-Ziele wie Tile, Multi, Palemu und Trueemu. Die GGI-Erweiterungen verfügten über eine API auf höherer Ebene. libggiwmh bietet Funktionalität für reine Fensterziele, zu dieser Zeit war dies nur X. libggimisc lieferte einige grundlegende Dinge wie vga splitline.

GGI 2.0.2 wurde im Dezember 2002 veröffentlicht. Die für den Benutzer sichtbarste Änderung war das von Grund auf neu gestaltete X-Backend. Eine weitere auffällige Änderung war die enorme Verbesserung der Dokumentation. Zu guter Letzt haben sich die Release-Zyklen geändert. Ab dieser Version gab es einen Entwicklungs- und einen stabilen Baum. Der Stable-Tree ist nur für Bugfixes geöffnet, der Development-Tree hat den Namen, dem BSD-Schema folgend, -current.

Im November 2004 wurde der letzte Bugfix aus dem GGI 2.0.x Stable Tree zugunsten eines neuen GGI 2.1.x Stable Tree veröffentlicht.

GGI 2.1.x läuft auf vielen Betriebssystemen: GNU Hurd , Linux , *BSD , System V , Mac OS X und Microsoft Windows. Unterstützung für weitere Hardwareplattformen wurde hinzugefügt. NetBSD hat sogar ein Binärpaket für NetBSD/Vax erstellt! Eine neue GGI-Bibliothek über libgii namens libgiigic wurde hinzugefügt. Es ermöglicht die Kombination von Benutzeraktionen mit Ereignissen zur Laufzeit.

GGI 2.2 wurde im Dezember 2005 veröffentlicht. Die automatische Zielerkennung wurde überarbeitet und war nicht mehr linux-zentriert. GGI ersetzte seine eigenen Integer-Datentypen durch ANSI C99-Typen für mehr Portabilität. Ein Ziel für Quarz wurde hinzugefügt. Mac OS X-Benutzer sind nicht mehr auf X11 angewiesen, können aber weiterhin das X11-Backend verwenden. Die für den Benutzer sichtbarste Änderung war jedoch die Unterstützung für statische verknüpfte Ziele.

Die neueste Version ist GGI 2.2.2, eine Bugfix-Version in der stabilen Serie von GGI 2.2.x. Es wurde im Januar 2007 veröffentlicht.

Stand 2006

Das GGI-Projekt ging auf die GGI 3.0-Version über. libgii wurde neu gestaltet. Die Eingabebehandlung wurde durch ein Reaktorereignismodell ersetzt, das flexibler ist als die Verwendung von select() für einen Dateideskriptor . Dies vereinfacht auch die Eingabetreiber im Allgemeinen, insbesondere für diejenigen, die keine Dateideskriptoren wie input-quartz verwenden. libgg wurde in eine separate Bibliothek ausgelagert.

libggi hatte einige Targets zu einer Sublib zusammengeführt, Multi mit Tile und Mono Text mit Palemu. libggi hatte auch ein neues VNC- Target bekommen, das es erlaubte, jede Anwendung als VNC-Server auszuführen.

In GGI 3.0 wurde der Erweiterungsmechanismus von Grund auf neu gestaltet, um die Interaktion zwischen den Erweiterungen und den Kernbibliotheken zu vereinfachen. Dies erforderte eine kleine API-Änderung.

Siehe auch

Verweise

Externe Links