GoboLinux TéléchargementsDocumentationCommunautéRecettesPaquetsCaptures d'écran


La structure hiérarchique d'Unix repensée: une introduction à GoboLinux.

Traducteur: Arsène Dernière

Hisham Muhammad, le 9 mai 2003.

Dernièrement, nous avons pu voir apparaître ici et là de nombreux articles et discutions concernant le statut actuel de Linux en temps que système bureautique, avec occasionnellement de très bonnes idées. Néanmoins, aucun d'entre eux ne m'a plus surpris que celui-ci. Cet article était globalement très hypothétique mais contenait quelques idées radicales et séduisantes concernant la manière de réorganiser l'arborescence des répertoires de Linux. Cette partie était d'ailleurs la plus polémique et a déclenché beaucoup de discussions autour de la possibilité de l'implémenter . Et c'est ce qui m'a surpris: nous avions déjà implémenté tout cela depuis un an. GoboLinux est une distribution Linux basée sur une arborescence de répertoires alternative et qui à évolué depuis une installation personnalisée de LFS vers une distribution utilisée et maintenue par un petit groupe de personnes. C'était intéressant de se rendre compte que d'autres personnes étaient intéressées par des idées similaires aux nôtres. Il est donc peut-être temps pour nous de sortir de l'ombre.


Un peu d'histoire

Nous nous souvenons tous du temps où discuter des distributions Linux en temps que système bureautique ce limitait à débattre afin de savoir laquelle avait le meilleur programme d'installation. Beaucoup de choses ont changé depuis: les installateurs graphiques attrayants sont arrivés, bien que nous ne soyons pas encore tout à fait rendu. Malgré les habituels pseudo débats concernant "pourquoi (insérez ici un de vos chevaux de bataille) est le problème", certaines idées intéressantes font surface de temps à autre. Mieux encore, certaines personnes ont commencé à croire que le temps est peut-être venu pour des tentatives plus aventureuses.

Curieusement, GoboLinux n'a pas démarré comme une de celles-là. Tout a commencé quand j'ai du installer des logiciels à l'université. Etant donné que je n'avais pas d'accès en écriture aux répertoires racine standards de Unix, j'ai créé mes propres dossiers, comme je le sentais, dans $HOME. J'ai constamment mis à jour chacun de ces logiciels sans pouvoir utiliser de gestionnaire de paquets. Ma solution était la plus évidente: placer chaque logiciel dans un dossier lui étant réservé, comme suit: ~/Programs/AfterStep. Rapidement les variables d'environnement (PATH, LD_LIBRARY_PATH...) sont devenues de plus en plus chargées, j'ai donc créé des répertoires centralisés pour chaque classe de fichier, contenant des liens symboliques comme ~/Libraries, ~/Headers et ainsi de suite. Une étape suivante et naturelle était d'écrire des scripts qui gèrent les liens symboliques et les fichiers configure et Makefile.

Ce système c'est avéré très commode à utiliser. J'ai alors commencé à retirer les paquets pré-compilés de mon système personnel et à les recompiler en utilisant ces scripts. J'allais droit vers une système Linux entièrement personnalisé que j'ai alors nommé, en guise de boutade, LodeLinux. (LinuxSource). Lorsqu'à peu près 80% du système fut prêt, le Grand Crash du Système de fichiers a frappé. Le moment était alors venu de tout recommencer, mais cette fois en suivant une autre route: au lieu de démonter un système existant, un ami (André Desch) et moi même (Hisham Muhammad) avons passé deux jours a construire un système Linux From Scratch modifié. Ainsi est né sans plus d'histoires, le 20 mars 2002, GoboLinux. Un mois plus tard, à l'occasion du "3rd Workshop on Free Software" (le troisième Atelier des Logiciels Libres), nous présentions un article intitulé: "Une nouvelle proposition pour l'arborescence des répertoires d'Unix".

De quoi s'agit-il?

GoboLinux n'est certainement pas "encore une autre distribution axée vers la bureautique". Elle est entièrement basée sur une structure de fichiers alternative. Chaque logiciel vit dans son propre répertoire: vous trouverez XFree86 4.3 dans le répertoire /Programs/XFree86/4.3/ et ping dans le répertoire Programs/Netkit-Base/0.17/bin/ping. Ainsi pour voir une liste de tous les logiciel installés sur votre système, il vous suffit de faire ls /Programs.

Pour chaque catégorie de fichiers il y a un répertoire dans /System/Links regroupant les fichiers de chaque application à l'aide de liens symboliques: Executables, Libraries, Headers, Shared et Manuals. Pour garantir la compatibilité, chaque répertoire "hérité" est remplacé par un lien symbolique vers une catégorie correspondante, de sorte que, /bin, /sbin, /usr/bin, /usr/local/bin (et ainsi de suite) soient tous des liens symboliques vers /System/Links/Executables. Les variables d'environnement sont également simplifiées: export PATH=/System/Links/Executables est suffisant.

En résumé, nous avons un système de gestion de paquets sans base de données: la structure hiérarchique des dossiers organise elle-même le système (n'était-ce pas sa fonction première, d'ailleurs?). Chaque répertoire de logiciel (par exemple, /Programs/KDE) contient des sous-répertoires (/Programs/KDE/3.0, /Programs/KDE/3.1.1), et un répertoire indépendant des versions contenant les fichiers de configuration (/Programs/KDE/Settings), qui abrite les fichiers habituellement situés dans /etc. Garder deux versions ou plus d'une librairie est trivial. Lorsque la majorité des distribuions on basculé vers GCC 3, il leur a fallu distribuer une nouvelle version majeure, souvent incompatible avec les précédentes. Lorsque la série 006 de GoboLinux a adopté GCC 3, ce fut juste une question de conserver les anciennes versions de librairies en parallèle des nouvelles, tandis qu'elles étaient petit à petit retirées. Aucun paquet "compat" ne fut nécessaire.

La plus part des fonctionnalités de GoboLinux sont automatisées à l'aide d'une collection de scripts. Pour créer un paquet GoboLinux, il vous suffit de taper quelque chose comme CreatePackage CoreUtils. Tout ce que fait cette commande consiste en conserver CoreUtils/5.0/ et CoreUtils/Settings dans une archive .tar.bz2 nommée CoreUtils?5.0--i686.tar.bz2. Un lien symbolique nommé /Programs/CoreUtils/Current pointe alors vers la version actuelle. Ce lien est utilisé par les scripts comme la version "par défaut". L'installation d'un logiciel est gérée par trois scripts: PrepareProgram, qui créé la hiérarchie de répertoires dans /Programs/ et passe les options adéquates à configure. Quant à SymlinkProgram, il créé les liens symboliques situés dans /System/Links. Un script plus général, CompileProgram s'occupe du classique configure && make && make install (avec un certain nombre d'options en ligne de commande afin de gérer les cas particuliers)

Scripts de démarrages alternatifs

Etant donné qu'il nous semblait que nous "partions de rien" et que nous voulions réellement créer un système où tout aurait un sens pour nous, nous avons également pris le temps de repenser les scripts de démarrage. Il me semblait que les deux modèles historiques (System V et BSD) sont exagérément complexes pour le démarrage de notre système bureautique simple. Ainsi GoboLinux utilise un système plus simple: deux scripts, Init et Done, qui font la majeure partie du travail. Des scripts supplémentaires, comme Multi et Single, prennent soin des "niveaux de fonctionnement". Ces fichiers sont des simples séquences de commandes, précédées par le mot Exec et d'une chaîne de caractères en guise de message. Voici un extrait de Init:

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

Des fonctions plus élaborées comme SetClock son définies comme des fonctions de la console dans un fichier Tasks (ces fonctions peuvent aussi être invoquées en ligne de commande à l'aide du script RunTask). Des options configurables son définies comme des variables dans le fichier Options. La fonction globale Exec ajoute une fonctionnalité astucieuse supplémentaire: des thèmes de démarrage. La séquence de démarrage peut ressembler à celle de Slackware (avec les messages d'erreur / de sortie standards), à RedHat (avec beaucoup d'OKs), ou à GoboLinux (dernièrement elle utilise une version modifiée du Patch de Progression de Linux).

L'arborescence "héritée"

Malheureusement, certains logiciels ne sont pas suffisamment flexibles pour être installés n'importe où. Occasionnellement, des chemins d'accès codés "en dur" sont tapis dans des logiciel qui appartiennent pourtant à l'espace utilisateur et qui, du moins théoriquement, devraient autoriser une installation dans, disons, le répertoire personnel d'un utilisateur.

Bien que j'aimerais que ce soit chose faite à long terme, modifier toutes les applications n'est pas envisageable. C'est pour cette raison que GoboLinux garde, comme énoncé plus tôt, une arborescence où tous les chemins d'accès habituels d'Unix trouvent un équivalent, ainsi, si un Makefile cherche /usr/X11R6/include/X11/Xaw3d/XawInit.h, il le trouvera , bien qu'il réside dans /Programs/Xaw3d/1.5/include/X11/Xaw3d/XawInit.h, là où il a sa place. Lorsque deux applications ont un même nom de répertoire, les scripts de GoboLinux vont les étendre de manière récursive. XFree8 et Xaw3d ont tout deux X11 sous include. Un répertoire /System/Links/Headers/X11 est créé automatiquement, hébergeant les liens vers les les deux répertoires X11.

Une autre fonctionnalité intéressante des scripts de GoboLinux consiste en l'usage d'un utilisateur particulier qui n'a de permissions en écriture que dans les répertoires des sources des logiciels et dans les sous-répertoires du répertoire /Programs pour exécuter make install. De la sorte qu'aucun fichier ne puisse "s'échapper" de la hiérarchie de GoboLinux et ne se glisse ainsi dans un répertoire de l'arborescence héritée.

La structure des répertoires de GoboLinux amène un regard neuf au système Linux, mais la présence de l'arborescence héritée, bien que nécessaire, ombrage une partie de cette nouveauté. Mac OS X recourt à un tour de passe passe pour cacher sa nature Unix: le Finder ne montrera aucun des répertoires Unix, mais vous pouvez les apercevoir depuis la ligne de commande. Dans un système Linux, étant donné que nous avons différentes manières de "regarder" le système de fichiers (consoles, gestionnaires de fichiers, explorateurs...), nous devions donc aller plus loin afin d'obtenir un système visuellement plus clair. GoboHide est un patch (évidement optionnel) du noyau et une application de l'environnement utilisateur écrits par Lucas Correira Villa Real et Felipe Damásio qui implémentent effectivement des "fichiers cachés" sous Linux (à des lieues de point.fichiers, qui sont pris en charges par l'interface utilisateur tout comme Finder le fait).

Voici ce à quoi ressemble ls / dans GoboLinux:

Depot Mount System
Files Programs Users

Similitudes

En lisant ceci, vous avez probablement trouvé beaucoup de concepts qui vous sont familiers (en dehors des noms de répertoires). GoboLinux a clairement trouvé de l'inspiration dans d'autres systèmes d'exploitation, comme Mac OS X, BeOS et AtheOS, mais je pense que la notion de construire "quelque chose de différent" en utilisant une base Unix existante (que ce soit en utilisant un noyau Unix comme OS X ou en utilisant les outils GNU comme le fait AtheOS) fut l'influence la plus importante de toutes. Il y a, maintenant, un certain nombre d'autres projets, à des étapes variées de leur développement, qui utilisent le noyau de Linux comme fondations et qui mettent en oeuvre des arborescences des répertoires alternatives. Il est intéressant de constater que la majorité d'entre elles sont des clones ou sont très lourdement inspirées par des systèmes d'exploitations propriétaires spécifiques: ROX OS tend à ressembler à RiscOS, LinuxSTEP est un projet basé sur GNUstep qui tendait à ressembler à un système NeXT, et BlueEyedOS tend à être un clone de BeOS compatible au niveau des sources.

GoboLinux, d'autre part, n'est le clone de rien d'autre. Il utilise des logiciels bureautiques Linux standards. Nous croyons qu'une structure de répertoires bien organisée est un bon terreau pour de nouvelles idées -- les possibilités sont nombreuses.

Où en sommes nous?

GoboLinux a énormément évolué l'an dernier. Vous trouverez une image ISO de notre dernière version, la 006, sur le site web de gobolinux.org. Il s'agit d'un "live CD" faisant fonctionner GoboLinux dans un système de fichiers chrooté et en lecture seule, vous pouvez ainsi faire un tour dans la structure et percevoir ce qu'est GoboLinux. Le CD propose aussi les scripts d'installation usuels et des paquets supplémentaires.

Il n'y a pas encore d'installateur graphique attrayant, mais je pense que la simplicité de l'installation reflète la simplicité d'usage globale du système comme un tout (contrairement à ce qui ce passe pour d'autres distributions).

Malgré une base d'utilisateur restreinte (nous n'avons encore jamais réellement fait d'annonce), le projet a progressé rapidement et est entièrement exploitable depuis un moment déjà (la majorité des développeurs l'utilisent comme leur unique système d'exploitation, tout comme quelques autres utilisateurs).