URL: https://linuxfr.org/news/a-la-recherche-des-sources-de-troff Title: À la recherche des sources de Troff Authors: Sygne Nils Ratusznik, baud123, Nÿco, patrick_g, B16F4RV4RD1N et Pierre Jarillon Date: 2012年08月06日T19:10:41+02:00 License: CC By-SA Tags: troff, brian_kernighan, donald_knuth, groff, nostalgie, histoire et unix Score: 89 Troff est le logiciel de formatage de texte des Unix originaux. Il est toujours présent sur nos machines en sa version GNU (Groff) même s'il ne sert généralement qu'à afficher nos pages de manuel. [Eric Raymond](http://fr.wikipedia.org/wiki/Eric_Raymond) n'hésite pas à dire que Troff est « l'application originale Unix qui tue tout » (_Unix's original killer application_, cf. [_The Art of Unix Programming_](http://www.faqs.org/docs/artu/ch08s02.html#id2934197)), non seulement parce qu'il s'associe à différents interpréteurs et tire le meilleur profit des tubes et de la philosophie Unix, mais aussi parce que l'efficacité du logiciel a favorisé l'adoption d'Unix par le département des brevets de Bell labs, et ensuite au-delà. S'il était largement utilisé dans les années 80, Troff est aujourd'hui tombé dans l'oubli, et semble peu à peu disparaître de l'Internet. Pourtant, en cherchant bien, on retrouve de nombreuses traces de la vivacité passée de Troff. Ces traces sont exhumées en seconde partie de la dépêche. ---- [binaire du roff original](http://www.tuhs.org/Archive/PDP-11/Distributions/research/1972_stuff/s2-bits.gz) [sources du premier nroff](http://www.tuhs.org/Archive/PDP-11/Distributions/research/Dennis_v6/v6src.tar.gz) [troff d'AT&T](http://www2.research.att.com/~gsf/cgi-bin/download.cgi?action=list&name=dwb) [troff de Solaris](http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/) [troff du projet Heirloom](http://heirloom.sourceforge.net/doctools.html) [troff de plan9port](http://swtch.com/plan9port/) ---- N.B.: les liens vers le site de Bell Labs sont actuellement morts, mais cela arrive parfois et n'est jusqu'alors que provisoire. L'histoire des sources ====================== Un [rapide historique](https://linuxfr.org/news/groff-sort-en-version-121) de Troff a été proposé ici même à l'occasion de la sortie d'une nouvelle version de son équivalent GNU : **Groff**. Ici, nous insisterons sur les traces de cette histoire telles qu'elles sont présentes aujourd'hui sur internet, ainsi que sur la façon dont elles nous sont parvenues, car les sources du logiciel n'ont pas toujours été partagées. Roff de Joseph Ossana sur les premiers Unix -------------------------------------------> Dear Unix Enthousiasts, C'est avec cette formule, que, en 2002, [Caldera](http://fr.wikipedia.org/wiki/SCO_Group) ouvre le texte de la [licence](http://www.tuhs.org/Archive/Caldera-license.pdf) annonçant la [libération](http://tech.slashdot.org/article.pl?sid=02/01/24/0146248) des sources des anciens outils Unix en même temps qu'elle [libère](https://linuxfr.org//2002/01/24/6820.html) le code source original d'[Unix](http://cm.bell-labs.com/cm/cs/who/dmr/complinks.html) lui-même. Dans l'archive de la [version 3](http://www.tuhs.org/Archive/PDP-11/Distributions/research/1972_stuff/s2-bits.gz) des [premiers Unix](http://www.tuhs.org/Archive/PDP-11/Distributions/research/) on trouve une version binaire de roff dans datée de 1972. Cette version binaire est en la ré-écriture pour Unix, par [Joseph Ossanna](http://fr.wikipedia.org/wiki/Joseph_Ossanna), du RunOff de Multics. New Roff -------- Joseph Ossana a ensuite amélioré Roff, et l'a renommé Nroff (New Roff). Nroff est probablement une ré-écriture en C de Roff. On trouve les sources, tant de Roff que de Nroff dans la [Version 6](http://www.tuhs.org/Archive/PDP-11/Distributions/research/Dennis_v6/v6src.tar.gz) d'Unix. Une recherche dans les sources d'[Unix 32V](http://www.tuhs.org/Archive/PDP-11/Distributions/usdl/) devrait permettre de suivre l'évolution du code source. Ditroff de Kernighan -------------------- En 1979, [Brian Kernighan](http://fr.wikipedia.org/wiki/Brian_Kernighan), ré-écrit entièrement Nroff, pour qu'il produise une sortie intermédiaire, qui devra être traitée par un autre logiciel pour finalement produire un fichier imprimable. Cette sortie intermédiaire permet à Nroff d'être utilisé pour divers types d'imprimantes, incompatibles entre elles. Il nomme ce nouveau logiciel [Ditroff](http://www.darwinsys.com/history/hist.html), « _device independant troff_ », mais ce nom sera abandonné au profit de Troff. L'usage a imposé le nom _Nroff_ pour logiciel utilisé pour écrire sur un terminal, et celui de _Troff_ pour le logiciel produisant du texte destiné à être imprimé. Depuis 1979, les logiciels Troff et Nroff, quelle que soit leur origine, reproduisent le comportement du Troff de Kernighan. La compatibilité entre toutes les versions est ainsi assurée, à quelques détails près. La documentation en usage est d'ailleurs celle qu'a écrit Kernighan à la même époque. Cela fait probablement du format de Troff le format de traitement de texte qui est, de fait, le plus pérenne de l'histoire de l'informatique. DWB d'AT&T ---------- Le Troff de Kernighan a eu de nombreux descendants, en particulier, il a été le cœur d'un ensemble de logiciels nommé DWB (_Documenter's WorkBench_) distribués avec l'Unix d'AT&T. En cherchant bien, on peut trouver, sous licence [Eclipse](http://www.eclipse.org/org/documents/epl-v10.php), les sources du [DWB 3.2 d'AT&T](http://www2.research.att.com/~gsf/cgi-bin/download.cgi?action=list&name=dwb) de 1993 (et un [patch](http://cyrillelefevre.free.fr/dwb/dwb.1993年02月04日.patch.bz2) pour le compiler dans Cygwin). Certains navigateurs ayant quelques difficultés à télécharger le DWB d'AT&T, voici comment faire avec Wget, sous réserve d'acceptation de la licence: ``` bash wget \ --user "I accept www.opensource.org/licenses/eclipse" \ --password "." \ "http://www2.research.att.com/~gsf/download/tgz/dwb.1993年02月04日.tgz" ``` Cette archive est une perle, car elle contient, outre les sources de Troff, les sources de toute la documentation, ainsi que quelques logiciels que beaucoup croient perdus, tels **Picasso** et **Diffmk**, dont il sera question plus loin. Troff de Solaris ---------------- En 2005, Solaris, le descendant d'Unix Systeme V dévoilé par AT&T en 1983, est [libéré](http://linuxfr.org//2005/01/26/18184.html), à son tour ainsi que le code des outils Unix de l'époque. Le tout est distribué sous licence [CDDL](http://opensource.org/licenses/cddl1.php). Le Troff d'Open Solaris est basé sur le Troff du Systeme V release 4, qui dérive du DWB d'AT&T version 2. Sur la [forge](http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/), de Solaris, on trouve ainsi les sources de Troff, Nroff, et d'autres logiciels qui lui sont associés : Checknr, Checkeq, Col, Deroff, Eqn, Refer, Soelim, Spell, Tbl, Ul. Heirloom Troff, de Gunnar Ritter -------------------------------- Suite à cette libération, Gunnar Ritter décide de donner une nouvelle jeunesse aux sources de Troff. Il récupère alors le Troff d'Open Solaris, lui ajoute quelques fonctions modernes, et le redistribue sous le titre [Heirloom Doctools](http://heirloom.sourceforge.net/doctools.html) :> Le projet Heirloom s'adresse aux personnes qui aiment travailler sur leur ordinateur en utilisant une interface Unix traditionnelle en ligne de commande. Le projet Heirloom n'est pas un musée du logiciel ; il n'essaie pas de conserver les utilitaires sans modification. Il conserve plutôt le style, l'algorithme et l'interface intacts, tandis qu'il modernise le système lorsque cela est approprié. [Accueil du projet Heirloom](http://heirloom.sourceforge.net/index.html) Gunnar Ritter a très soigneusement amélioré Troff afin de lui apporter les fonctions typographiques indispensables aujourd'hui : calcul des espaces inter-mots paragraphe par paragraphe (selon une variante de l'algorithme Knuth-Plass utilisé par Tex), micro-typographie (taille des glyphes et interlettrage finement modifiables (comme le préconise Hàn The Thành dans _Micro-typographic extensions to the TEX typesetting system_), [réglage de l'approche](http://fr.wikipedia.org/wiki/Kerning), ligatures arbitraires, décalage de certains glyphes hors de la marge (« _hanging characters_ »), support des polices [PostScript Type 1](http://fr.wikipedia.org/wiki/Fontes_PostScript), [TrueType](http://fr.wikipedia.org/wiki/Truetype), [OpenType](http://fr.wikipedia.org/wiki/OpenType), et de leurs possibilités, césure des mots internationalisée, gestion de l'UTF-8, méta-données PDF (table des matières, liens, mots-clefs, auteur, titre et sujet). Bref, Heirloom Troff est à Troff ce que pdfTeX est à TeX. Outre ces améliorations, Gunnar Ritter a aussi incorporé les extensions de troff introduites par Groff, son équivalent GNU. L'ensemble compile maintenant sur à peu près toutes les plate-formes : Linux, BSD, Solaris et plan9. L'archive contient, outre Troff, Nroff, Dpost, Eqn, Pic, Refer et Soelim, des outils un peu oubliés : Checknr, qui vérifie qu'un fichier Troff est bien formaté, Vgrind, un pré-processeur qui formate du code source pour l'impression via Troff (Il est encore fait mention du copyright de Bill Joy dans les sources), Picpack qui permet d'inclure des images postscript, et Ptx, pour créer des index. Troff de Plan9 -------------- [Plan9](http://plan9.bell-labs.com/plan9/) incorpore une version de Troff dans ses sources. Largement modifiée, cette version n'apporte que peu d'améliorations visibles par l'utilisateur final, sinon qu'elle gère nativement l'utf-8. Néanmoins, les utilisateurs de Plan9 sont aujourd'hui parmi les derniers a utiliser Troff, aussi, sur la liste de discussion [9fans](http://marc.info/?l=9fans), on trouve de nombreuses informations sur Troff, et les sources d'anciens logiciels qui lui étaient associés y apparaissent régulièrement. Une version compilable sur Unix/Linux du Troff de Plan9 est disponible dans l'archive de [plan9 from user space](http://swtch.com/plan9port/). Dans cette archive, on trouve, outre [Troff](http://swtch.com/plan9port/man/man1/troff.html) : [Troff2html](http://swtch.com/plan9port/man/man1/troff2html.html), [Tr2post](http://swtch.com/plan9port/man/man1/tr2post.html), [Tbl](http://swtch.com/plan9port/man/man1/tbl.html), [Spell](http://swtch.com/plan9port/man/man1/spell.html), [Proof](http://swtch.com/plan9port/man/man1/proof.html), [Pic](http://swtch.com/plan9port/man/man1/pic.html), [Htmlroff](http://swtch.com/plan9port/man/man1/htmlroff.html), [Grap](http://swtch.com/plan9port/man/man1/grap.html), [Eqn](http://swtch.com/plan9port/man/man1/eqn.html), [Doctype](http://swtch.com/plan9port/man/man1/doctype.html), [Deroff](http://swtch.com/plan9port/man/man1/deroff.html) et [Grap](http://swtch.com/plan9port/man/man1/grap.html). Documentation de troff et de ses compagnons =========================================== La documentation de Troff est, à mon avis, particulièrement bien faite. Elle est composée d'un ensembles d'articles courts, clairs et exhaustifs. Comme indiqué ci-dessus, les sources de la documentation originale de Troff sont présentes dans l'archive du DWB d'AT&T. Mais on trouve aussi la version postscript de ces articles sur le site de Bell Labs. Seulement, ces articles sont mal indexés, et introuvables sans aide. Le site de référence à ce sujet est celui de [Ralph Corderoy](http://troff.org). Je me contente de recueillir ici les liens connus vers la documentation. Deux des documents écrits par Brian Kernighan font aujourd'hui encore office de référence : [54.ps.gz](http://cm.bell-labs.com/cm/cs/cstr/54.ps.gz), la documentation complète, [97.ps.gz](http://cm.bell-labs.com/cm/cs/cstr/97.ps.gz), la description du format de sortie indépendant du périphérique (_device independant_). Quant aux autres documents, ils traitent des logiciels qui s'articulent avec Troff. En voici la liste : [Pic](http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz), [Grap](http://cm.bell-labs.com/cm/cs/cstr/114.ps.gz), [Chem](http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz), [algorythm animation](http://cm.bell-labs.com/cm/cs/cstr/132.ps.gz), [Dformat](http://cm.bell-labs.com/cm/cs/cstr/142.ps.gz), [Eqn user guide](http://cm.bell-labs.com/cm/cs/doc/74/eqn.ps.gz), [cross references](http://cm.bell-labs.com/cm/cs/cstr/127.ps.gz), [index tools](http://cm.bell-labs.com/cm/cs/cstr/128.ps.gz), [ideal](http://cm.bell-labs.com/cm/cs/cstr/103.ps.gz), [MetaPost manual](http://cm.bell-labs.com/cm/cs/cstr/162.ps.gz), [graph with MetaPost](http://cm.bell-labs.com/cm/cs/cstr/163.ps.gz). Sur la page de [Richard Stevens](http://www.kohala.com/start/troff/troff.html) on trouve une copie de ces articles, mais aussi d'autres documents sur Troff : [manuel](http://www.kohala.com/start/troff/cstr54.ps), [tutoriel](http://www.kohala.com/start/troff/v7man/trofftut/trofftut.ps), [device independant](http://www.kohala.com/start/troff/cstr97.ps), [Tbl](http://www.kohala.com/start/troff/v7man/tbl/tbl.ps), [Eqn2e](http://www.kohala.com/start/troff/v7man/eqn/eqn2e.ps), [Eqn](http://www.kohala.com/start/troff/v7man/eqn/cacm.ps), [Pic](http://www.kohala.com/start/troff/cstr116.ps), [GNU Pic](http://www.kohala.com/start/troff/gpic.raymond.ps), [Pic examples](http://www.kohala.com/start/troff/pic.examples.ps), [Pic macros](http://www.kohala.com/start/troff/Setup.pic.txt), [Pic to html](http://www.kohala.com/start/troff/pic2html.html), [ms](http://www.kohala.com/start/troff/v7man/msmacros/msmacros.ps), [Grap](http://www.kohala.com/start/troff/cstr114.ps), [Gpic](http://www.kohala.com/start/troff/gpic.raymond.ps), [index tools](http://www.kohala.com/start/troff/cstr128.ps), [index tools sources](http://www.kohala.com/start/troff/indexing.tools.txt), [refer](http://www.kohala.com/start/troff/v7man/refer/refer.ps). Quant aux autres documents que j'ai pu trouver, en voici la liste, en vrac : [GNU Eqn](http://www.zen89632.zen.co.uk/Groff/Eqn/eqnguide.pdf), [Me tutoriel](http://docs.freebsd.org/44doc/usd/19.memacros/paper.pdf), [Me reference manual](http://docs.freebsd.org/44doc/usd/20.meref/paper.pdf), [man how-to](http://www.schweikhardt.net/man_page_howto.html), [Effman](http://home.windstream.net/kollar/groff/effman.html), [Mom](http://www.schaffter.ca/mom/mom-01.html), [Mm](ftp://ftp.axis.se/pub/groff/swedish_mm_manual.src.tgz). Enfin, Oreilly publie les sources du livre [_Unix Text Processing_](http://oreilly.com/openbook/utp/) écrit par Dale Dougherty et Tim O'Reilly lui-même. Logiciels accompagnant Troff ============================== De nombreux logiciels gravitent autour de Troff. Si les sources des anciens Troff tendent à réapparaître sur le net, les sources des logiciels qui l'entouraient tendent quant à elles à disparaître. Voici quelques liens permettant d'en retrouver les traces. Mpm : pour la justification verticale ------------------------------------ Mpm est un post-processeur qui gère la justification verticale des blocs (figures, paragraphes...). Il réapparait tous les dix ans sur la [liste de discussion de plan9](http://marc.info/?l=9fans&r=1&w=2) : ainsi [en 2002](http://marc.info/?l=9fans&m=111558829312191&w=2) et [en 2012](http://marc.info/?l=9fans&m=134060727303392&w=2). On peut trouver ses sources dans le répertoire [contrib](http://plan9.bell-labs.com/sources/contrib/steve/root/sys/src/cmd/pm) de plan9. Gunnar Ritter l'a ajouté dans l'archive de Heirloom Troff. On trouve la documentation qu'en a fait Brian Kernighan sur usenix : [spr_kernighan](http://www.usenix.org/publications/compsystems/1989/spr_kernighan.pdf). À la fin du README, il est indiqué :> Historical note: There is a simpler version of pm and -mpm called pj and -mpj that only does vertical justification of pages that have already been laid out by conventional means. This simpler version may be adequate, but it is no longer supported and memory of how it works is growing dim. Picasso : pour dessiner ---------------------- Picasso est une interface graphique permettant de dessiner des dessins au format pic. Il en est parfois question dans la liste de discussion de Groff, mais avec regrets, car les sources semblent perdues. Pourtant, en cherchant bien, on les trouve : dans l'archive du DWB d'AT&T ! Un [post](http://marc.info/?l=9fans&m=130619143229061&w=2) de 9fans y fait aussi référence, et cite trois alternatives : > art (from the 2nd edition), though Andrey did stirling work porting it to the draw model years ago I honestly don't feel it up to the job - perhaps my lack of stamina? On devrait le trouver dans le répertoire de Steve Simon de Plan9/contrib. > cip/xcip - this is part of the blit distribution and xcip is avaialable on the net these days. I have a vague memory that someone got this to run on a modern OS - plan9/X11 perhaps? anyone know more? Cip fait l'inverse de Pic : à partir d'une image, il produit le code de Pic. Xcip est la version graphique de Cip, comme l'indique la quatrième de couverture de [_Unix System V Network Programming_](http://www.amazon.com/Network-Programming-Addison-Wesley-Professional-Computing/dp/product-description/0201563185) :> Acknowledgements. This book was produced on an Intel i386-based system running UNIX System V Release 4.0, Version 3. The text editor sam was used to create and update the text. The pictures were created with xcip, a newer version of cip, on an AT&T 630MTG terminal. The output for the book was produced with eqn, tbl, pic, troff, and dpost from the Documenter's WorkBench, Version 3.2. On en parle aussi dans un [guide sur Unix](http://man.lupaworld.com/content/other/Linux/Linux_Unixs_secret/unx25.htm), et dans un [post](http://lists.gnu.org/archive/html/groff/2010-10/msg00035.html) de la liste de discussion de groff. Il est présent dans contrib/Venkatesh Srinivas/ selon ce [post](http://marc.info/?l=9fans&m=130619279630297&w=2) :> xfig + transfig - feels a bit like a patch on a patch and, being modern unix code would (no doubt) include configure hell... [Xfig et transfig](http://xfig.org/) sont encore en activité, car plus récents et compatibles avec Latex. Parfois, il est aussi question de ideal, de [dag](ttp://marc.info/?l=9fans&m=121120654006794&w=2) dont on trouve la [documentation](ftp://ftp.cs.utexas.edu/pub/code2/kleyn/graphs/AttDag/dagdoc.ps), de [flow](http://www.cs.uwaterloo.ca/~dberry/FTP_SITE/reprints.journals.conferences/flo.conference.paper.pdf) ou de [g3](http://troff.org/papers.html) (_"G3 - A Language for Typesetting Three Dimensional Graphics"_, dont on trouve un scan de la [documentation](http://www.ukuug.org/events/1990/evolves/G3typesetting.pdf), mais ceux-ci semblent bel et bien perdus... Sinon, on peut aussi travailler avec dformat, dont on trouve [l'original](http://www.troff.org/dformat.jlb) et une version [nettoyée](http://www.troff.org/dformat), [grn](http://www.manpagez.com/man/1/grn/) ou bien [metapost](http://ect.bell-labs.com/who/hobby/MetaPost.html) qui produit des fichiers pour troff, et pas seulement pour Tex. Troff et le HTML --------------- Éparpillés sur le net, on trouve des outils pour transformer un fichier troff vers de l'html : [Unroff](http://www-rn.informatik.uni-bremen.de/software/unroff/), [Troffcvt](http://www.snake.net/software/), [Manserver](http://freecode.com/projects/manserver), [Man-cgi](http://users.softlab.ece.ntua.gr/~christia/man-cgi.html), [Ms2html](http://plan9.bell-labs.com/sources/plan9/sys/src/cmd/ms2html.c), [Troff2page](http://www.ccs.neu.edu/home/dorai/troff2page/), [Troff2hml.pl](http://www.pathname.com/~quinlan/troff2html/) et [Web2](http://alumnus.caltech.edu/~copeland/work/software/web2.shar.gz). Certains outils sont concentrés dans l'archive de Plan9 From User Space : [Troff2html](http://swtch.com/plan9port/man/man1/troff2html.html), [Htmlroff](http://swtch.com/plan9port/man/man1/htmlroff.html), Sur la page de [Jeffrey Copeland](http://alumnus.caltech.edu/~copeland/work/), on trouve un [article](http://alumnus.caltech.edu/~copeland/work/PDF/2000-11-tbl.pdf) concernant la transfert du format tbl en HTML, ainsi qu'un [logiciel](http://alumnus.caltech.edu/~copeland/work/software/tbl.shar.gz) faisant ce travail. Pour le même travail, on pourra aussi utiliser [Htbl](http://home.windstream.net/kollar/groff/htbl.tar.gz). Troff et le XML -------------- Pour transférer un fichier Troff vers Docbook, l'outil de référence est [Doclifter](http://www.catb.org/~esr/doclifter/) (écrit par Éric S. Raymond). On appréciera aussi [Dbtroff](http://dbtroff.sourceforge.net) (écrit par Gunnar Ritter), qui fait le travail inverse. Pour l'ODT, il y a un fichier XSLT dans l'archive de Heirloom Troff. Références et index ------------------- Dans l'archive des [utilitaires](http://heirloom.sourceforge.net/tools.html), du projet Heirloom, on trouve tout un tas d'outils pour gérer la bibliographie au format refer : Addbib, Sortbib, Roffbib, Indxbib, Lookbib. On pourra aussi utiliser les outils de [Bibstuff](http://www.snake.net/software/). On trouve aussi des outils pour créer des [index](http://www.netlib.org/typesetting/indexing.tools). Outils qu'on retrouve parmi les logiciels du [Netlib de Bell Lab](http://www.netlib.org/). Ces [outils d'indexation](http://www.cs.princeton.edu/netlib/typesetting/indexing.tools.gz) sont aussi publiés sur la page personnelle de [Brian Kernighan](http://www.cs.princeton.edu/~bwk/btl.mirror/new/). Développement logiciel ---------------------- [Nrchbar](http://home.windstream.net/kollar/groff/nrchbar.tar.gz) permet d'imprimer un diff. On peut aussi utiliser Diffmk, présent dans l'archive de DWB pour marquer les différences entre deux fichiers troff. Présentations scientifiques --------------------------- Troff est toujours fourni avec une version de Eqn, qui permet d'écrire des formules mathématiques. Mais on trouve aussi, parmi les logiciels du [Netlib de Bell Lab](http://www.netlib.org/) une version de [Chem](http://www.netlib.org/typesetting/chem) qui permet d'écrire des formules chimiques. La version originale est disponible sur la page personnelle de [Brian Kernighan](http://www.cs.princeton.edu/~bwk/btl.mirror/new/) ainsi que sa [documentation](http://www.cs.princeton.edu/netlib/typesetting/chem.gz). Sur la liste de discussion de Plan9, on peut trouver plusieurs macros. Pour créer des [slides](http://marc.info/?l=9fans&m=125062452017555&w=2), d'autres [slides](http://plan9.bell-labs.com/sources/contrib/steve/foils.tgz) et des [circuits électroniques](http://plan9.bell-labs.com/sources/contrib/fernan/schem.tgz). D'autres macro permettent de créer des présentations, telles [Gpresent](http://www.science.uva.nl/~bobd/useful/gpresent/), [Mv](http://www.cs.rit.edu/~hpb/Man/_Man_Local_html/html5/mv.5.html), dont les sources semblent perdues, et [Mo](http://web.cecs.pdx.edu/~trent/gnu/groff/mo-0.2.tar.gz). Heirloom Troff est fourni avec une version de Grap, qui permet de dessiner des graphiques depuis une liste de données. [Plan9 from user space](http://swtch.com/plan9port/), fournit lui aussi une version de [grap](http://swtch.com/plan9port/man/man1/grap.html). Si on préfère, on pourra utiliser une autre [version](http://www.lunabase.org/~faber/Vault/software/grap/), ou alors utiliser [Prag](http://www.kohala.com/start/troff/prag-1.0pl2.shar), un script Awk capable de remplacer Grap. Macro diverses -------------- On trouve une macro nommée [Loom](ftp://ftp.cs.princeton.edu/pub/people/drh/loom.tar.gz), une autre nommée [Labels](http://troff.org/labels-20020520.tar.gz) pour écrire des étiquettes, pour des étiquettes toujours, on peut utiliser cette [version](http://home.windstream.net/kollar/groff/labels.tar.gz). On trouve aussi une macro nommée [Meta](http://www.cowlark.com/meta/), une autre nommée [Resume](http://alumnus.caltech.edu/~copeland/work/software/resume.shar.gz), et encore une nommée [Letter](http://alumnus.caltech.edu/~copeland/work/software/letter.shar.gz). Pourquoi cette dépêche ? ======================== Il est vrai que cette dépêche n'est qu'une collection de liens à peine commentés. Quel est donc son intérêt, au delà de l'effet marque page ? Réflexion sur l'histoire à l'âge de l'Internet ---------------------------------------------- En premier lieu, la dépêche a été motivée par la curiosité de [Tonton Th](https://linuxfr.org/users/oulala), qui, au détour d'un commentaire a exprimé sa [curiosité](https://linuxfr.org/nodes/95053/comments/1374575) quant à l'histoire de Troff. Ce commentaire apparaissait dans une discussion sur la pérennité des données sur Internet. On peut avoir l'impression qu'Internet n'a pas de mémoire, et rechercher _troff_ sur Google ne donne pas grand chose de très intéressant sur son passé. Pourtant, en cherchant bien, on trouve les documents nécessaires à l'écriture de l'histoire de Troff. La méthode à suivre est d'ailleurs assez simple : * Il faut commencer par trouver un centre de référence ; en l'occurrence, ici, il s'agit des listes de discussion de Plan9 et de Groff, où se rencontrent les derniers utilisateurs de Troff. * En parcourant ces listes de discussion, on retrouve de nombreux noms de logiciels. * Ces noms permettent de faire des recherches plus précises dans les moteurs de recherches, qui deviennent alors pertinents. Par exemple, pour trouver le logiciel _Picasso_, il m'a fallu d'abord prendre connaissance du nom du logiciel, qui est déjà bien oublié ; il m'a fallu apprendre ensuite qu'il faisait partie d'un ensemble dénommé DWB, et au détour d'un article sur l'histoire d'Unix, j'ai appris que DWB était un produit d'AT&T. Finalement, c'est une (longue) recherche sur DWB et AT&T qui m'a permis de trouver l'archive contenant _Picasso_. Ce travail de recherche met en évidence deux mouvements : certes, des données disparaissent d'internet, mais il faut remarquer que des données y ré-apparaissent tout autant. Sur les listes de discussion, des logiciels, ou des liens vers des logiciels ressortent régulièrement : à la demande d'un utilisateur, un particulier peut partager un logiciel dont il conservait une copie. Les entreprises elles-aussi peuvent décider de libérer les sources de logiciels ayant une importance historique, comme l'a fait _Caldera_ pour Unix. Réflexion sur le langage à l'âge de l'image ------------------------------------------- En second lieu cette dépêche fait suite au journal de [MrSpackMan](http://linuxfr.org/users/mrspackman) : « [L'esprit Unix, une culture de mots](https://linuxfr.org/users/mrspackman/journaux/l-esprit-unix-une-culture-des-mots) ». Qu'est-ce qui définit proprement Unix ? [Thomas Scoville](http://theody.net/elements.html) pense que, au-delà (ou en-deçà) des tubes, du shell et du tout fichier, ce qui définit Unix c'est son affinité avec le langage. Unix, c'est le langage comme interface. Si tel est bel et bien le cas, alors, Unix est l'outil idéal pour manipuler du texte. Or, la manipulation du texte sous Unix trouve son terme (l'impression) avec Troff. Si Unix se définit par son logocentrisme, alors Troff constitue un moment essentiel de son aventure. De fait, Internet garde les traces de l'importance qu'a pu avoir Troff, et devant la foison de logiciels qui s'articulaient avec lui, on peut avoir l'impression que l'histoire d'Unix est intimement liée à l'histoire de Troff. Peut-être que le moment où Unix était adopté en entreprise coïncide avec le moment ou Troff était considéré comme un outil d'édition pertinent. Si l'on s'accorde pour dire que les histoires d'Unix et de Troff sont conjointes, nous pouvons nous demander ce que signifie pour Unix l'oubli de Troff. Avec l'oubli de Troff, c'est le texte qui disparaît d'Unix. De fait, le déport du texte hors du cœur d'Unix vers l'interface graphique et le web modifie radicalement l'usage d'Unix. Si les seuls textes qui persistent au cœur d'Unix sont les fichiers de configuration, alors, les outils Unix deviennent des outils dédiés à l'administration. Ils l'ont toujours été, mais je crois qu'il fut un temps où la manipulation de fichiers de configuration et la manipulation de textes destinés à être imprimés ont convergé, et cette convergence a marqué l'apogée de l'histoire d'Unix. On repère ce déplacement dans l'histoire de Troff : il apparaît un moment où les interfaces graphiques complètent l'éco-système logiciel, en particulier pour créer des dessins. Mais très vite, ces outils sont dépassés. De même, dans l'histoire de Troff, on repère l'émergence du web : il arrive un moment où une foison d'outils servent à exporter un fichier troff vers l'HTML. Mais tous ces outils arrivent trop tard, l'HTML, et les outils le manipulant, se sont implantés à côté de Troff, et non pas dans sa continuité. Ces deux ruptures ne sont pas équivalentes. Troff semble avoir pu concurrencer un temps les interfaces graphiques mais a aucun moment il n'a pu se faire une place dans le monde de l'HTML. Enfin, si Troff a pu être un maillon important d'un système informatique ayant le langage comme interface, alors retrouver l'usage de Troff est un moyen de retrouver l'usage du langage comme interface. Troff et les logiciels qui l'accompagnent forment un ensemble de mini-langages (Eqn, Pic, Tbl, et Refer ont chacun leur mini-langage). La syntaxe de Troff, qui force à l'écriture de ligne courtes, s'articule parfaitement avec les outils de manipulation de flux lignes à lignes (Sed, Awk, Diff, Patch). En ligne de commande, Troff fait un usage intensif des tubes. Cet ensemble forme ainsi un tout cohérent, une suite bureautique en ligne de commande, mais dont nous avons perdus l'usage. Retrouver les sources de ces logiciels et leurs documentations est un moyen de retrouver la grammaire d'une langue, avant de pouvoir la parler de nouveau.