GoboLinux DownloadsDokumentationGemeinschaftRezeptePaketeScreenshots


Das Unix Verzeichnis neu überdenkt: eine Einleitung zu Gobolinux

Übersetzer: Thin Myrna

Hisham Muhammad, May 09 2003.

Es hat so um das Jahr 2003 einige Diskussionen gegeben über den aktuellen Status von Linux auf dem Desktop. Es sind einige Artikel erschienen zu dem Thema (z. B. hier), teilweise mit guten Ideen. Keiner hat mich aber so erstaunt wie der hier. Der Artikel war ziemlich hypothetisch, beschrieb aber ein paar ganz schön radikale Ideen, wie der Verzeichnisbaum (die Filesystem-Hierarchie) von Linux geändert werden sollte. Dieser Teil des Artikels war polemisch und führte zu vielen Diskussionen, ob so etwas überhaupt machbar ist. Das war dann auch der Grund für meine Überraschung, denn zu diesem Zeitpunkt hatten wir das alles schon implementiert gehabt - seit einem Jahr! GoboLinux ist eine Linux-Distro, die auf einem alternativen Verzeichnisbaum basiert. Es hat sich von einem individuellen LFS zu einer Linux-Distro entwickelt, die heute von einer kleinen Gruppe gepflegt wird. Es war interessant zu sehen, dass viele Leute Interesse zeigen an Ideen wie die unseren. Scheint so, als wäre es an der Zeit, endlich aus dem Schatten hervorzutreten.


Ein bisschen Geschichte

Wir alle erinnern uns an die Zeit, als sich die Diskussion über Linux auf dem Desktop noch auf die Frage reduzierte, welches wohl der beste Installer sei. Es hat sich einiges getan seither, jedenfalls sind die einfachen, benutzerfreundlichen grafischen Installer verfügbar. Wir sind aber noch nicht ganz am Ziel. Neben dem üblichen Gejammer "warum (Lieblingsärgernis hier einfüllen) ein wirkliches Problem ist" kamen von Zeit zu Zeit auch interessante Ideen ans Licht. Noch interesanter war der Umstand, dass einige zu glauben begannen, dass es Zeit wäre, sich auf größere Abenteuer einzulassen.

Komischerweise hat GoboLinux aber selbst gar nicht so angefangen. Das ganze begann, als ich an der Uni Programme zu installieren hatte. Dabei hatte ich keinen Schreibzugriff auf die Standard-Unix-Verzeichnisse, weshalb ich unter $HOME meine eignenen Verzeichnisse passend anlegte. Ich machte laufend Upgrades meiner Programme ab Sourcen, ohne Package-Manager. Meine Lösung war die naheliegendste: Jedes Programm kam in sein eigenes Verzeichnis wie z.B. ~/Programs/AfterStep. Die Umgebungsvariablen (Einvironment-Variablen) wie PATH, LD_LIBRARY_PATH usw. wurden mit der Zeit immer länger, sodass ich für jede Klasse von Files ein zentrales Verzeichnis anlegte, das dann symbolische Links enthielt: ~/Libraries, ~/Headers usw. Als natürliche Folge schrieb ich auch Skripte, die die Links und die configure- und make-Files verwalteten.

Es war sehr angenehm, mit diesem System zu arbeiten. Zuhause begann ich dann, vorkompilierte Pakete zu entfernen und mit meinen eigenen Skripten zusammenzubauen. Schrittweise näherte ich mich so einem eigenen Linux, das ich spaßeshalber "LodoLinux" nannte. Als ich das System zu etwa 80% zusammen hatte, schlug der Große Filesystem Crash zu. Ich fing also von vorne an, schlug diesmal aber einen anderen Weg ein: Anstatt eine existierende Distro auseinanderzunehmen, investierten wir (d.h. ich, Hisham Muhammad, und mein Freund André Detsch) zwei Tage, um ein Linux From Scratch zusammenzustellen. Ohne großes Aufsehen erblickte so am 20. März 2002 GoboLinux das Licht der Welt. Einen Monat später präsetierten wir auf dem 3rd Workshop on Free Software einen Artikel, der "A new proposal for the Unix directory tree" (Ein neuer Vorschlag für den Unix Verzeichnisbaum) hieß.

Worum handelt es sich?

GoboLinux ist definitiv kein "noch eine Linux-Distro für den Desktop". Es gründet komplett auf einer alternativen Verzeichnisstruktur. Jedes Programm hat sein eigenes Directory: So findet man XFree86 4.3 in /Programs/XFree86/4.3/ und ping in /Programs/Netkit-Base/0.17/bin/ping. Um alle installierten Programme anzuzeigen, braucht es lediglich ein ls /Programs.

Für jede Kategorie von Files gibt's unter /System/Links ein Verzeichnis, das die Files jeder Applikation in Form von symbolischen Links sammelt bzw. zusammenfasst: Executables, Libraries, Headers, Shared und Manuals. Aus Kompatibilitätsgründen ist jedes "Legacy"-Verzeichnis ein Link zur entsprechenden Kategorie. Daher sind /bin, /sbin, /usr/bin, /usr/local/bin usw. symbolische Links nach /System/Links/Executables. Umgebungsvariablen (Environment-Variablen) sind ebenso vereinfacht: Es reicht aus, export PATH=/System/Links/Executables zu schreiben.

Kurz, wir haben ein datenbanklose Paketverwaltung (Package Management System): Die Verzeichnisstruktur selbst organisiert das System (war das schließlich nicht dessen ursprünglicher Zweck?). Jedes Programmverzeichnis (z.B. /Programs/KDE) enthält Versionsverzeichnisse (Verzeichnisse, die die Programmversion bezeichnen, also z.B. /Programs/KDE/3.0, /Programs/KDE/3.1.1) und ein versionsneutrales Verzeichnis für die Konfigurationsdaten (/Programs/KDE/Settings, um beim Beispiel zu bleiben), d.h. Daten, die sonst in /etc zu finden wären. Es ist auf diese Weise trivial, mehr als eine Version einer Library auf dem System installiert zu haben. Als die meisten Distributionen auf GCC 3 wechselten, hatte das den Release einer neuen Hauptversion zur Folge (Version Ziffer vor dem Punkt, also inkompatibel zu den vorhergehenden Versionen). Für GoboLinux auf der anderen Seite bedeutete das einfach nur die alten Libs neben den neuen zu halten, um sie dann schrittweise zu entfernen. Es war kein "Kompatibilitätspaket" im Spiel.

In GoboLinux sind die meisten Aufgaben durch eine Sammlung von Skripten automatisiert. Um ein GoboLinux-Paket zu erzeugen, ruft man einfach beispielsweise CreatePackage CoreUtils auf. Alles, was so passiert, ist, dass CoreUtils/5.0/ und CoreUtils/Settings in einem .tar.bz2-File gespeichert werden, das CoreUtils--5.0--i686.tar.bz2 heißt. Ein Link mit dem Namen /Programs/CoreUtils/Current zeigt an, welche Version aktuell aktiv ist. das wird von den Skripten als eine 'Default-Version' verwendet. Für die Installation eines Programmes sind drei Skripte zuständig: PrepareProgram, das die /Programs-Hierarchie erzeugt und die richtigen Oütionen an configure weitergibt. SymlinkProgram erzeugt die Links in /System/Links. Ein Wrapper-Skript - nämlich CompileProgram - deckt den gewöhnlichen Fall configure && make && make install ab, mit einer Anzahl von Befehlszeilenparametern (command-line options), um Spezialfälle berücksichtigen zu können.

Alternative Boot-Skripte

Weil wir das Gefühl hatten, dass wir wirklich ganz von vorne angefangen hatten und wir wiklich ein System wollten, bei dem für uns einfach alles stimmte, nahmen wir uns die Zeit, auch über die Boot-Skripte nachzudenken. Wird dachten uns, dass die beiden historischen Modelle (System V und BSD) Overkill wären für unser Setup als Desktop-Maschine. GoboLinux verwendet daher ein einfacheres System: Zwei Skripte, Init und Done, erledigen die meiste Arbeit. Weitere Skripte wie Multi und Single kümmern sich um die Runlevels. Diese Files sind einfach eine Sequenz von Kommandos, denen Exec und ein Info-Text vorangestellt sind. Hier ist ein kleiner Ausschnitt aus Init

Exec "Setting clock..." SetClock
Exec "Loading keymap..." loadkeys "$KeymapLayout"
Exec "Bringing up the loopback interface..." ifconfig lo 127.0.0.1

Komplexere Aufgaben wie SetClock sind in einem Tasks-File als Shell-Funktionen definiert. Diese Funktionen können mit dem Skript RunTask auch von der Befehlszeile aus verwendet werden. Konfigurierbare Einstellungen sind im Options-File als Umgebungsvariable definiert. Die Wrapper-Funktion Exec stellt noch ein weiteres, hübsches Feature zur Verfügung: Boot Themes. Die Boot-Sequenz kann aussehen wie bei Slackware (mit den Standard Fehler-/Meldungen), oder wie bei Red Hat (mit den vielen OKs) oder wie bei GoboLinux (nutzt eine modifizierte Version des Linux Progress Patch).

Die Altlast Unix-Verzeichnisbaum

Unglücklicherweise sind nicht alle Programme so geschrieben, dass man sie in ein beliebiges Verzeichnis installieren kann. Manchmal schleichen sich hartkodierte Pfadnamen sogar in Programme ein, die zum Userland gehören. Theoretisch sollten sich aber Userland-Programme sogar im Home-Verzeichnis des jeweiligen Users installieren lassen.

So sehr ich das langfristig erledigt sehen möchte, so wenig können alle Programme einfach gepatcht werden. Aus diesem Grund gibt's in GoboLinux einen Legacy-Verzeichnisbaum, der alle gewöhnlichen Unix-Pfade ins Äquivalent von GoboLinux abbildet. Wenn also ein Make-File nach /usr/X11R6/include/X11/Xaw3d/XawInit.h sucht, wird es dieses File finden, obwohl es sich in /Programs/Xaw3d/1.5/include/X11/Xaw3d/XawInit.h befindet, wo's hingehört. Wenn zwei Programme einen Verzeichniseintrag mit dem selben Namen haben, dann erweitern sie die GoboLinux-Skripte rekursiv. Beide, XFree86 und Xaw3d, haben X11 unter include. Ein Verzeichnis /System/Links/Headers/X11 wird automatisch angelegt und enthält Links von beiden X11-Verzeichnissen.

Ein weiteres interessantes Feature ist, dass GoboLinux-Skripte make install mit einer speziellen User-Id verwenden, die Schreibzugriffe nur innerhalb des Source-Directories des Programms und des zum Programm gehörigen Directories unterhalb /Programs erlaubt. So können keine Files aus der GoboLinux-Hierarchie "ausbrechen" und sich in den Legacy-Tree verirren.

Die Verzeichnisstruktur von GoboLinux bringt ein frisches Aussehen in Linux, aber die Legacy-Hierarchie - obwohl notwendig - nimmt dem Ganzen wieder einiges an Schönheit. Mac OS X verwendet einen nicht ganz sauberen Trick, um seine Unix-Herkunft zu verbergen: Sein Finder zeigt keine Unix-Verzeichnisse an, aber von der Befehlszeile aus kann man sie dennoch sehen. In Linux gibt's aber mehr als eine Möglichkeit, ins Filesystem zu schauen (Shells, File-Manager, Browsers usw.). Wir mussten uns also mehr anstrengen und tiefer gehen, um ein auberes System zu erhalten. GoboHide ist ein optionaler Kernel-Patch plus eine Userland-Applikation von Lucas Correia Villa Real und Felipe Damásio, der effektiv versteckte Files (hidden files) auf Linux realisiert, die mehr sind als simple dot-Files, die das Verstecken auf UI-Ebene ermöglichen wie Finder unter Mac OS X das tut).

So schaut ls / unter GoboLinux aus:

Depot  Mount     System
Files  Programs  Users

Arbeiten, die mit GoboLinux verwandt sind

Während Sie diesen Text gelesen haben (und offensichtlich noch lesen ;-)), haben Sie vermutlich viele vertraute Konzepte wiedererkannt (ganz zu schweigen von den Verzeichnisnamen). GoboLinux hat Anleihen bei anderen Betriebssystemen wie Mac OS X, BeOS und AtheOS genommen, aber ich glaube, dass der größte Einfluss das Bestreben war, etwa Anderes zu bauen - unter Verwendung der existierenden Unix-Basis (sei es ein Unix-Kernel wie in Mac OS X oder die Verwendung von GNU-Tools wie in AtheOS). Gerade jetzt sind einige andere Projekte in Arbeit, die den Linux-Kernel als Bais verwenden und eine alternative Verzeichnisstruktur aufweisen. Interessanterweise sind die meisten von ihnen Klone oder sind stark an ein bestimmtes proprietäres Betriebssystem angelehnt: Das Ziel von ROX OS ist es, wie RiscOS zu sein, LinuxSTEP basiert auf GNUstep und zielt auf ein NeXT-ähnliches System ab, und BlueEyedOS hat sich zum Ziel gesetzt, ein auf Source-Ebene kompatibler BeOS-Klon zu sein.

GoboLinux auf der anderen Seite ist kein Klon von was auch immer. Es verwendet Standard-Linux-Desktop-Software. Wir glauben, dass eine gut organisierte Verzeichnisstruktur eine gute Testumgebung für neue Ideen ist - die Möglichkeiten sind beinahe unbegrenzt.

Wo stehen wir heute?

GoboLinux hat sich über die letzten Jahre sehr gut entwickelt. Auf www.gobolinux.org können Sie ein ISO-Image des neuesten Releases herunterladen (014 - Stand Jan. 2008). Es handelt sich dabei - wie heute üblich - um eine Live-CD (von der aus bei Bedarf GoboLinux auf die Harddisk installiert werden kann). Sie ermöglicht es Ihnen, GoboLinux ohne jede Gefahr für Ihr System auszuprobieren und v.a. den Verzeichnisbaum zu untersuchen und zu sehen, wie sich GoboLinux anfühlt. Wie gesagt besitzt die CD die üblichen Installer (grafisch und auf Textbasis) und natürlich weitere Pakete.

Obwohl die Anwenderbasis noch klein ist (wir haben nie irgendwo speziell Werbung für GoboLinux gemacht) hat das Projekt große Fortschrtitte gemacht und kann bereits als Desktop-System für die tägliche Arbeit eingesetzt werden. Die meisten der GoboLinux-Entwickler nützen es als ihr einziges Betriebssystem und viele andere Anwender tun das auch.