Plan9 en GPL v2, pour les nuls

Posté par  (site web personnel, Mastodon) . Édité par palm123, ZeroHeure et tuiu pol. Modéré par Florent Zara. Licence CC By‑SA.
55
19
fév.
2014
Technologie

L'université de Berkeley en Californie a reçu l'autorisation d'Alcatel-Lucent de publier Plan9 en GPLv2. Pour rappel, Plan9 est un OS, descendant de Unix Time-Sharing System, développé chez Bell Labs, par Rob Pike, Ken Thompson, Dennis Ritchie et d'autres.

Glenda, logo de Plan9

Comme il semble que peu de monde sache ce qu'est Plan9, voici, dans la suite de la dépêche, une rapide introduction à Plan9. Nous vous invitons à poursuivre par vous même en lisant la documentation et en installant Plan9 sur votre cluster de RaspberryPi, vos Thinkpads ou vos machines virtuelles pour vous faire une idée de la bête par vous-même.

NdA : Merci à eggman et Sygne pour leurs journaux respectifs sur le sujet, sous licence CC by-sa.

Sommaire

Plan9 pour les nuls

Plan9 est bien né

Parce qu'il est le fils de Ken Thompson, Dennis Ritchie, Brian Kernighan et Rob Pike, entre autres.

Plan9 est libre

Parce qu'il est distribué, depuis 2003, sous la Lucent Public License, une licence reconnue libre par la FSF. Et il est désormais aussi distribué sous GPLv2.

Plan9 est moderne

Parce que son interface graphique est déjà intégrée au noyau. Il n'y a d'ailleurs pas de tty dans Plan9, ceux-ci paraissant déjà dépassés en 1987. L'ergonomie de Plan9 continue néanmoins de reposer sur le texte, puisque Rio, le gestionnaire de fenêtres, n'ouvrira par défaut que des lignes de commandes.

Plan9 propose en outre une interface de programmation, nommée Acme, qui s'utilise au clavier et à la souris. Le clic du milieu permet d'exécuter le texte sélectionné ou les commandes de l'éditeur représentées par des tags situés en haut de la fenêtre. L'exécution s'affiche dans une nouvelle sous-fenêtre, automatiquement placée à la façon d'un gestionnaire de fenêtre pavant. Enfin, l'exécution de la commande dépend du contexte : exécuter une ligne de sortie de grep ouvre le fichier greppé à cette ligne repérée par grep.

Plan9 est international

Parce que l'utf-8 a été inventé pour Plan9.

Plan9 n'est pas POSIX

Parce que ce standard a été jugé trop limitatif pour un système d'exploitation dédié à l'exploration de nouveaux concepts. Le shell de Plan9, rc, a une syntaxe un peu personnelle et sa libc a été entièrement ré-écrite, ainsi que son compilateur.

Plan9 est distribué

Parce que Plan9 est fait pour fonctionner sur un cluster de machines. L'architecture d'un cluster Plan9 repose sur au moins trois machines : des serveurs de CPU, des serveurs de fichiers et des terminaux, le serveur de CPU faisant généralement aussi office de serveur d'identification. Il est à noter qu'on peut installer le tout sur une seule machine.

Par défaut, le CPU utilisé est celui du terminal. Mais il suffit de préfixer une commande par cpu pour utiliser le CPU distant.

Pour que tout cela fonctionne bien dans des environnements multi-architectures, le serveur de fichier adapte la vue du système de fichier présenté à chaque terminal en fonction de son architecture. Ainsi, à une machine Arm il montrera /arm/bin/ en lieu et place de /bin/.

Plan9 est unifié

Parce que la commande bind permet de monter plusieurs systèmes de fichiers dans un même répertoire. Au cas où un même nom apparaîtrait dans plusieurs de ces systèmes de fichiers, seul celui du premier monté sera accessible.

Plan9 est tout fichier

Parce que sur Plan9, vraiment tout est fichier. La souris est un fichier, il suffit d'écrire dedans pour déplacer le curseur. La fenêtre aussi est un fichier, il suffit d'écrire dedans pour la modifier. Le contenu de la fenêtre aussi est un fichier, ce fichier est celui que vous êtes en train d'éditer - c'est d'ailleurs pour cela que Plan9 n'aime pas trop la coloration syntaxique, car elle supposerait d'introduire une discontinuité dans ce tout fichier. De même, le réseau est représenté dans Plan9 par un système de fichiers.

Puisque tout est fichier sur Plan9, lorsqu'on écrit un pilote, par exemple un pilote de carte ethernet, on écrit en vérité quelque chose qui ressemble à un serveur de fichier. Conséquence directe de ce fonctionnement : pour accéder à un périphérique distant, il suffit de monter son système de fichier localement.

Plan9 est simple

Parce tout Plan9 repose sur un unique protocole de relation entre client et serveur : 9P. Ainsi, le pilote de souris, le gestionnaire de fenêtre, le pilote de carte Ethernet et le système de fichier lui-même ne sont que des implémentations du protocole 9P.

Le protocole lui-même est très simple : Les quatre premiers bytes indiquent la taille complète du message, le byte suivant le type du message, celui d'après est un tag, et le reste est constitué de paramètres.

Plan9 est sauvegardant

Parce que Fossil, son système de fichier par défaut, permet à tout utilisateur de réaliser des snapshots.

Mais parce que Plan9 dispose d'un autre système fichier, Venti, dédié quant à lui à la sauvegarde permanente des snapshots. Pour être simple et robuste, Venti ne permet pas de supprimer des données, seulement d'en ajouter.

Plan9 est varié

Parce qu'il existe plusieurs distributions de Plan9 : vanilla de Bell Labs, 9front, inferno, 9atom. Outre qu'elles proposent différents utilitaires, toutes ces distributions proposent leur propre version patchée du noyau.

Plan9 est communautaire

Parce que les utilisateurs de Plan9 partagent leurs pilotes, patchs, ports, et programmes. On voit difficilement trace de toutes ces sources, parce qu'elles sont surtout distribuées par Bell Labs sous la forme de systèmes de fichiers pour Plan9 : /n/sources/contrib/.

Plan9 est compatible avec Linux

Parce qu'une application pour Linux, drawterm, permet de se connecter à un serveur Plan9. Parce que l'utilisation du protocole 9P comme système de fichier est implémenté dans le noyau Linux (v9fs). Parce que les utilitaires de Plan9 sont disponibles sous Linux grâce à Plan9 from user space. Parce que, enfin, des ports de GCC, binutils, et de certaines applications Linux sont disponibles sous Plan9.

Aller plus loin

  • # Trop tard ?

    Posté par  (site web personnel) . Évalué à 1.

    Plan9 est intéressant mais qui en a vraiment besoin ?
    Si ma mémoire est bonne, il y a peu de temps, il n'était pas libre.
    C'est sans doute ce qui a freiné son adoption et sa mise sous GPL est arrivée trop tard.

    • [^] # Re: Trop tard ?

      Posté par  (site web personnel) . Évalué à 9.

      Plan9 a été libéré il y a 10 an. Pour moi, il y a deux éléments principaux qui en font sa puissance (outre sa simplicité manifestée par tout au plus une trentaine d'appels système) :

      • 9P(2000) le protocole de communication dont l'article parle, dont le principe de base est uniquement le fichier. C'est un protocole asynchrone qui prend en charge le transport pour l'authentification, et seulement le traitement des fichiers : open, read, write, close, delete, rename, stat, dup (clone). Pas de syscall ioctl dans Plan9 … On peut facilement écrire des serveurs de fichiers en C (fuse?)

      • les namespaces: chacun des processus peut voir sa propre arborescence : un jail ou un chroot natif, sans exception particulière puisque même les devices sont présentés comme des fichiers.

      Plan9 c'est surtout une philosophie, qui a inspiré beaucoup d'autres OS. C'est aussi là que des langages de programmation ont été conçus ou pensés (limbo, alef, ancêtres de google go).

      Personne n'a probablement besoin de Plan9, mais une fois qu'on y a goûté, il est difficile de l'oublier. Il en reste des réminiscences grâce a plan9ports un portage unix des outils, ou encore 9vx une machine virtuelle.

      Et je ne parle pas de fossil et venti, les systèmes de fichiers, ou de factotum, l'api d'authentification …

      Pour moi, c'est surtout sa simplicité qui me parle, mais c'est sûr, il est peu utilisé en production.

    • [^] # Re: Trop tard ?

      Posté par  (site web personnel) . Évalué à 9.

      En un sens, je peux dire que moi j'ai besoin de Plan9 :

      À côté du toujours plus de formats, de protocoles, de langages et de complexité, Plan9 me semble essayer d'engager le développement de l'informatique sur une autre voie, vers plus de simplicité, d'unité et de transparence.

      Et personnellement, j'ai besoin de cette autre voie parce que la question de la maîtrise de notre outil informatique m'importe et me semble être un des enjeux de notre époque. Et le logiciel libre ne répond qu'imparfaitement à cet enjeu de par le bazar qu'il génère. Les gens d'ici savent par exemple que je suis un fervent utilisateur de Troff parce que ce vieil outil est le seul logiciel de formatage de texte que je sois capable de maîtriser—et ça compte lorsqu'on utilise cet outil tous les jours dans sa profession.

      Plus concrètement, je m'aperçois en outre que l'architecture distribuée de Plan9 répondrait à nombre des problèmes que je rencontre aujourd'hui au quotidien : synchronisation entre machines, partage des fichiers, sauvegarde. Il y a tous les outils qu'il faut sur linux pour faire ça, mais c'est une plaie à administrer.

      Il manque quelques applications clés à Plan9 pour que l'on puisse l'utiliser sereinement, et c'est bien dommage à mon avis.

      • [^] # Re: Trop tard ?

        Posté par  . Évalué à 3.

        Ca me donne envie de réessayer Plan9 tout ça (et troff aussi). Tu l'utilises sur une machine virtuelle ? ou il est carrément installé sur ton pc ?

        • [^] # Re: Trop tard ?

          Posté par  (site web personnel) . Évalué à 3.

          Ben non, je n'utilise pas plan9…

          Quand je l'ai essayé, j'ai eu l'impression que je n'aurais pas d'autres choix que de renoncer à certains usages si je voulais l'utiliser au quotidien, parce qu'il est tout de même pauvre en applications.

          Ça reste probablement l'OS dont la philosophie me plaît le plus.

          Pour l'essayer, le mieux, d'après la liste de discussion, est de faire un petit cluster de trois machines, avec des Raspberry Pi par exemple.

      • [^] # Re: Trop tard ?

        Posté par  (site web personnel) . Évalué à -10.

        XKCD Standards

  • # précisions

    Posté par  . Évalué à 10.

    Bonjour,
    quelques précisions

    • Venti n'est pas un système de fichiers. C'est un système d'écriture de blocs sur disque. Le nom du bloc, son adresse, est sa signature cryptographique SHA1, ce qui veut dire qu'un bloc est une archive fixe, en écriture unique. Quand on envoie à Venti un bloc à écrire, il renvoie le SHA1, quand on veut lire un bloc sur Venti, on lui envoie le SHA1, il renvoie le bloc. La conversation a lieu en protocole Venti (voir http://man.cat-v.org/plan_9/6/venti), et pas en 9P, ce qui est une confirmation que Venti n'est pas un serveur de fichiers. Il sert de couche sous-jacente à Fossil, le serveur de fichiers typique actuel.

    • Brian Kernighan ne fait pas partie des développeurs de Plan 9. Selon ses propres mots : http://doc.cat-v.org/plan_9/2nd_edition/README
      On peut le citer, mais en tant que membre de l'équipe des Bell Labs historique, qui a produit Unix, et plus tard Plan 9. Un produit qui sort de ce milieu d'incubation mérite sûrement au moins un peu d'attention de la part des auditeurs.

    • [^] # Re: précisions

      Posté par  (site web personnel) . Évalué à 10.

      Merci pour ces précisions ! Je suis en fait étonné de n'avoir pas écrit plus de bêtises…

      Un produit qui sort de ce milieu d'incubation mérite sûrement au moins un peu d'attention de la part des auditeurs.

      Vous pouvez nous aider à mieux le connaître je suppose. Les gens qui, comme vous, semblent être familiers avec Plan9 ne courent pas les rues. Un petit journal de temps en temps, même bookmark, un exemple d'utilisation, l'explication technique d'un concept, un tutoriel, ou n'importe quoi d'autre, attirera l'attention des auditeurs.

      Par exemple, j'ai une question, qui, j'espère, n'est pas trop indiscrète: Si vous utilisez Plan9, que faîtes vous avec ? De la recherche ? Du développement ? Un serveur de fichiers ? De la bureautique ?

  • # précisions

    Posté par  . Évalué à 2.

    [On dirait que ça n'est pas passé… je recommence.]

    Bonjour,
    quelques précisions

    • Venti n'est pas un système de fichiers. C'est un système d'écriture de blocs sur disque. Le nom du bloc, son adresse, est sa signature cryptographique SHA1, ce qui veut dire qu'un bloc est une archive fixe, en écriture unique. Quand on envoie à Venti un bloc à écrire, il renvoie le SHA1, quand on veut lire un bloc sur Venti, on lui envoie le SHA1, il renvoie le bloc. La conversation a lieu en protocole Venti (voir http://man.cat-v.org/plan_9/6/venti), et pas en 9P, ce qui est une confirmation que Venti n'est pas un serveur de fichiers. Il sert de couche sous-jacente à Fossil, le serveur de fichiers typique actuel.

    • Brian Kernighan ne fait pas partie des développeurs de Plan 9. Selon ses propres mots : http://doc.cat-v.org/plan_9/2nd_edition/README
      On peut le citer, mais en tant que membre de l'équipe des Bell Labs historique, qui a produit Unix, et plus tard Plan 9. Un produit qui sort de ce milieu d'incubation mérite sûrement au moins un peu d'attention de la part des auditeurs.

  • # Autres remarques

    Posté par  . Évalué à 10. Dernière modification le 21 février 2014 à 09:33.

    Quelques ajouts/corrections:

    • Plan9 est le successeur des diverses versions de recherche d'Unix
    • un peu rapide de dire que « l'interface graphique est intégrée dans le noyau ». De façon un peu plus correcte, contrairement aux Unix qui ont connu les graphismes (et le réseau…) après coup, et qui ne les ont de se fait jamais complétement digéré, comme en témoigne les relents d'X, ou encore les sockets, Plan9 a été conçu avec ses deux éléments.
    • il y a plusieurs « interfaces de programmation », on parle d'éditeurs, et ils sont acme, sam et ed. sam est un ed++. c'est le click droit de la souris qui permet d'ouvrir un fichier à une ligne via un texte comme foo.c:42. sauf erreur, le texte est envoyé au plumber, qui constitue l'équivalent d'un double-click windows programmable, et 9P-able, bien sûr.
    • international, mais ne supportant pas les écritures « à droite » (arabe, amaric, etc.)
    • Plan9 n'est pas POSIX mais dispose d'une couche de compatibilité POSIX (APE); pratique pour porter du code.
    • "Ainsi, à une machine Arm il montrera /arm/bin/ en lieu et place de /bin/." est incorrect. /bin est un répertoire obtenu via plusieurs appels à bind (comme en témoigne la sortie de ns(1)), entre autre /rc/bin, /$objtype/bin, etc. où $objtype désigne l'architecture courante
    • il existe d'autres options que venti/fossil; notamment le WORM (Write Once Read Many)
    • inferno n'est pas une distribution Plan9 : c'est une re-écriture complète, articulée autour des mêmes principes, dans le langage Limbo, apparu à peu près à la même époque et Java, et tournant comme lui sous une VM (Dis).

    Plan9 c'est un peu comme le Lisp : en pratique ça sert pas à grand chose, mais les concepts derrière.
    beaucoup de concepts sont en portage/déjà portés sur vos unix préférés: utf8, /proc, namespaces, etc. mais c'est tellement plus sale :-)
    à aborder avec un esprit neuf (no pun intended)

    PS: je suis perdu avec la syntaxe des listes : le boutton me sort des tirets; l'aide mémoire de la syntaxe des étoiles, mais aucun ne marche en prévisualisation.

    • [^] # Re: Autres remarques

      Posté par  (site web personnel) . Évalué à 4.

      Concernant le PS :

      • ça marche avec un tiret comme cette ligne
      • ça marche avec une étoile comme cette ligne
      • par contre il faut une ligne blanche entre le ':' et les items
    • [^] # Re: Autres remarques

      Posté par  (site web personnel) . Évalué à 2.

      en pratique ça sert pas à grand chose

      C'est bien dommage de ne pas pouvoir profiter de la conception de Plan9 pour faire quelque chose d'utile au jour le jour…

      En testant Plan9, je dois avouer avoir été déçu sur ce point. Je ne m'attendais pas à pouvoir faire ce que je fais sur linux, par contre, j'espérais que pour certaines tâches fondamentales, il proposerait des outils bien pensés et originaux.

      En un sens, ces outils existent: on peut écrire des mails, visiter sobrement internet, publier un wiki en ligne, produire des documents et les imprimer, n'est-ce pas ? Mais j'ai l'impression (sauf peut-être pour le mail que je n'ai pas essayé) que ces outils n'ont pas la valeur ajouté que peuvent avoir les autres programmes de Plan9.

      Il y en a pourtant des choses à explorer au niveau applicatif…

      Un exemple, pour le fun: Faire reposer toute la publication (mail, wiki, postscript, man) sur une unique sémantique.

      • [^] # Re: Autres remarques

        Posté par  . Évalué à 7.

        oh si c'est faisable. tout dépend de ce qui est compris par utilisation journalière.
        pour du développement, l'apprentissage de la programmation, etc. c'est un environnement particulièrement sain par rapport aux unix modernes.

        9front par exemple est utilisable décemment au quotidien comme OS principal, notamment grace:

        • au wifi
        • plus généralement à un support hw (drivers) correct
        • linuxemu (émulateur de binaire linusque, qui permet par exemple de faire tourner une vielle version d'opera, oui çapuecestpaslibre, mais après avoir testé les autres navigateurs disponibles, on ne peut qu'apprécier)
        • une communauté petite mais active

        après il faut chercher, et ouvrir les yeux: y'a pas mal de petites perles ici et là, par exemple:

        • aux/listen, qui travaille sur des fichiers. par exemple pour le fichier tcp7, il ouvre une connexion tcp sur le port 7 (en listen, bien sûr), redirige les io vers le script tcp7, qui contient: #!/bin/rc cat (du coup, oui c'est largement faisable un serveur http codé en shell en quelques lignes, cf http://man2.aiju.de/8/rc-httpd)
        • dans le même genre de chose facilement faisable en shell, supposons deux machines A et B. Pour que tout le traffic réseau de A passe par B (ie. que A utilise B comme proxy): A# import -a B /net et grâce au méchanisme d'isolation des processus via namespaces, c'est valide que pour le processus courant. pour que ça soit valide tout le temps, il suffit de le faire plus tôt dans le démarrage de l'OS, pour que le namespace soit hérité par les processus fils.
        • les expressions régulières structurelles couplées au langage de commande de sam (qui est aussi celui d'acme) qui permet de manipuler du texte avec des commandes plus criptiques que jamais
        • la compilation du système (userland+kernel), qui se résume à un cd; mk (mk étant l'équivalent de make). cross compiler pour une autre archi? changer la variable d'environnement $objtype avant d'appeler mk.
        • la version du C utilisé, qui contient des ajoutes comme les structures anonymes, où encore des libs pour faire de la concurrence basées sur du CSP (« goroutine » en Go)
        • notons un port de TeX (KerTeX, et par un français: http://www.kergis.com/kertex.html)
        • etc.

        C'est bien de garder en tête les considérations suivantes quand on aborder Plan9:

        • c'est un OS de recherche; c'était pas prévu à l'origine que ça sorte au grand jour
        • il a été conçu à une époque où le web était à l'état de fœtus (d'où les navigateurs et autres outils web sobres)
        • il est fait pour construire un OS distribué sur un réseau local (9P supporte très mal la latence; c'est utilisable hein, mais faut pas être pressé :))

        au final, je dirais que c'est un îlot de tranquilité pour les sysadmins, et une référence en matière de design pour les codeurs. je serais curieux de voir des novices complet en informatique débuter sous Plan9.

        (c'est la fête des listes!, merci Benoît)

        • [^] # Re: Autres remarques

          Posté par  (site web personnel) . Évalué à 2.

          wifi, plus généralement à un support hw (drivers) correct

          Ils ne sont pas remontés à plan9 de Bell Labs ces drivers de 9front ?

          • [^] # Re: Autres remarques

            Posté par  . Évalué à 4.

            y'a plus grand monde qui bosse sur Plan9 @bell-labs (du genre une ou deux personnes)
            et fort peu de patchs sont acceptés. c'est une des raisons pour lequelles des distribs non-officielle (9atom, 9front, NiX, etc.) existent.

            ceci dit, ça devrait être possible de patcher la version de bell-labs pour y porter les drivers sans trop de boulot. à voir si 9grid (http://9grid.fr/downloads.html) ne le fait pas déjà.

            • [^] # Re: Autres remarques

              Posté par  (site web personnel) . Évalué à 4.

              9grid ? Vous voulez-dire 9legacy plutôt, non ?

              D'ailleurs, en constatant qu'un français était derrière 9legacy, je me demande si le Hibou qui parlait de Plan9 il y a quelques années dans un commentaire, ne serait pas ce français…

              Cette même discussion m'avait d'ailleurs assez refroidi quant à 9front. Les choses semblent avoir changées depuis…

              • [^] # Re: Autres remarques

                Posté par  . Évalué à 2.

                oui effectivement, je parle bien de 9legacy.

                je me permet de citer ce qui a été dit sur #plan9 il y a quelques heures par un développeur principal de 9front, qui compare l'implémentation des noyaux 64bits de Nix (une autre distrib) et 9front.

                17:57:48 < cinap_lenrek> anth_r: the nix kernel changed half of the portable code
                17:58:00 < cinap_lenrek> anth_r: and they use retarded 2MB pages by default
                17:58:59 < cinap_lenrek> in contrast, the 9front pc64 kernel uses 4K pages and shares almost everything with the pc kernel and the portable parts
                18:00:08 < cinap_lenrek> its just main.c memory.c mmu.c trap.c and squidboy.c (mp startup)
                18:00:19 < cinap_lenrek> and l.s of course
                18:00:22 < cinap_lenrek> the rest is all the same
                18:00:55 < cinap_lenrek> also, this was mostly done over a weekend
                18:02:48 < cinap_lenrek> 9front pc64 is more a port than a complete rewrite of the plan9 kernel as nix is
                

                les choix techniques qu'ils font sont toujours justifiés. et je suis sûr qu'ils ouvriront leurs écoutilles à des arguments extérieurs, surtout s'ils sont pertinents. s'ils ne le sont pas, il faudra savoir ignorer la pluie d'insultes ;-) (c'est pas un comportement plus blamable que celui de Linus ou Theo)

                pour leur penchant à « semer le trouble » : http://9front.org/troll/troll-culture.pdf
                on en pense ce qu'on en veut, mais de nos jours, l'esprit du citoyen lambda de notre société est tellement confus, tellement éloigné de ses racines culturelles, que le piquer un peu de temps en temps pour le lui rappeller ne peut qu'être bénéfique.

                • [^] # Re: Autres remarques

                  Posté par  (site web personnel) . Évalué à 2.

                  les choix techniques qu'ils font sont toujours justifiés

                  C'était là ma seule question concernant 9front, et aussi ma dernière question je crois.

                  Merci pour toutes ces remarques !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.