diff options
Diffstat (limited to 'talermerchantdemos/blog/articles/fr/rms-lisp.html')
-rw-r--r-- | talermerchantdemos/blog/articles/fr/rms-lisp.html | 649 |
1 files changed, 649 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/fr/rms-lisp.html b/talermerchantdemos/blog/articles/fr/rms-lisp.html new file mode 100644 index 0000000..7854c9f --- /dev/null +++ b/talermerchantdemos/blog/articles/fr/rms-lisp.html @@ -0,0 +1,649 @@ +<!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" --> + +<!--#include virtual="/server/header.fr.html" --> +<!-- Parent-Version: 1.77 --> + +<!-- This file is automatically generated by GNUnited Nations! --> +<title>Mes expériences avec Lisp et le développement de GNU Emacs - Projet GNU - +Free Software Foundation</title> + +<!--#include virtual="/gnu/po/rms-lisp.translist" --> +<!--#include virtual="/server/banner.fr.html" --> +<h2>Mes expériences avec Lisp et le développement de GNU Emacs</h2> + +<blockquote><p>(Transcription du discours de Richard Stallman à la conférence +internationale Lisp, le 28 octobre 2002)</p></blockquote> + +<p>Comme aucun de mes discours habituels n'a à voir avec Lisp, aucun ne serait +approprié pour aujourd'hui. Donc je vais improviser. Comme j'ai fait +suffisamment de choses dans ma carrière en relation avec Lisp, je devrais +être capable de raconter quelque chose d'intéressant.</p> + +<p>Ma première expérience avec Lisp a été de lire le manuel Lisp 1.5 au +lycée. C'est à ce moment-là que l'idée m'a frappé de plein fouet : qu'il +puisse y avoir un langage informatique comme cela. La première fois que j'ai +eu la chance de faire quelque chose avec Lisp fut quand je suis arrivé à +Harvard et que j'ai écrit un interpréteur Lisp pour le <abbr +title="Programmed Data Processor">PDP</abbr>-11. C'était une toute petite +machine, avec quelque chose comme 8 kilooctets de mémoire, et j'ai réussi à +écrire l'interpréteur en un millier de lignes. Cela m'a laissé un peu de +place pour quelques données. Tout cela, c'était avant que je ne voie ce +qu'est un vrai logiciel, qui fait de vraies tâches sur un système.</p> + +<p>J'ai commencé à travailler sur une vraie implémentation de Lisp avec +JonL White après avoir débuté au <abbr title="Massachusetts Institute of +Technology">MIT</abbr>. J'ai été engagé au laboratoire d'intelligence +artificielle (IA) non pas par JonL, mais par Russ Noftsker, ce qui est +plutôt ironique vu ce qui s'est passé par la suite ; il a vraiment dû +regretter ce jour‑là.</p> + +<p>Pendant les années 70, avant que ma vie ne soit politisée par des événements +horribles, je me contentais de faire une extension après l'autre pour des +programmes variés, la plupart d'entre eux n'ayant rien à voir avec +Lisp. Mais en cours de route j'ai écrit un éditeur de texte, Emacs. L'idée +intéressante à propos d'Emacs était qu'il possédait un langage de +programmation et que les commandes d'édition de l'utilisateur étaient +écrites dans ce langage de programmation interprété, de telle sorte qu'on +pouvait charger de nouvelles commandes dans l'éditeur tout en éditant. On +pouvait éditer les programmes qu'on utilisait tout en continuant à s'en +servir pour l'édition. Donc, nous avions un système qui était utile à autre +chose qu'à programmer et qu'on pouvait programmer pendant qu'on +l'utilisait. Je ne sais pas si c'était le premier programme à le faire, mais +c'était certainement le premier éditeur comme ça.</p> + +<p>L'idée de construire des programmes gigantesques et compliqués pour nous en +servir dans notre propre travail d'édition, et ensuite de les échanger avec +d'autres personnes, a alimenté l'esprit de coopération sans contrainte que +nous avions au labo d'<abbr title="Intelligence Artificielle">IA</abbr> à ce +moment-là. L'idée première était qu'on pouvait donner une copie de n'importe +quel programme qu'on possédait à qui en voulait une. Nous partagions les +programmes avec qui voulait les utiliser, ils étaient de la connaissance, du +savoir humain. Donc même s'il n'y avait pas de pensée politique organisée +liée à la manière dont nous partagions du logiciel pour concevoir Emacs, je +suis convaincu qu'il y avait une connexion, peut-être une connexion +inconsciente. Je pense que c'est la nature de notre façon de vivre au labo +d'IA qui a mené à Emacs et l'a fait devenir ce qu'il était.</p> + +<p>L'Emacs original ne contenait pas de Lisp. Le langage de bas niveau, le +langage non interprété, était de l'assembleur PDP-10. L'interpréteur dans +lequel nous écrivions n'était en fait pas écrit pour Emacs, il était écrit +pour <abbr title="Text Editor and COrrector">TECO</abbr>. C'était notre +éditeur de texte, et c'était un langage de programmation extrêmement laid, +le plus laid qui puisse exister. En effet, il n'était pas conçu comme +langage de programmation, mais comme langage d'édition et de commande. Il y +avait des commandes comme <code>5l</code>, qui signifiait « avance de 5 +lignes », ou bien <code>i</code> puis une chaîne de caractère et Échap pour +insérer cette chaîne. Vous pouviez taper une chaîne de caractères qui était +une série de commandes, ce qui s'appelait une chaîne de commande. Vous la +terminiez par Échap Échap, et elle était exécutée.</p> + +<p>Certaines personnes voulaient étendre ce langage avec des méthodes de +programmation. Elles en ont donc ajouté quelques-unes. Par exemple, l'une +des premières fut une structure de boucle, qui était < >. Vous pouviez +placer ces chevrons autour de quelque chose, et cette chose s'exécutait en +boucle. Il y avait d'autres commandes cryptiques qu'on pouvait utiliser pour +sortir de la boucle si une condition était vérifiée. Pour faire Emacs, +nous <a id="foot-1-rev" href="#foot-1">(1)</a> avons ajouté des méthodes +pour avoir des sous-programmes avec des noms. Avant cela, c'était une sorte +de Basic, et le nom des sous-programmes ne pouvaient avoir qu'une seule +lettre. Il était difficile de faire de gros programmes avec. Nous avons donc +ajouté du code pour qu'ils puissent avoir des noms plus long. En fait, il y +avait des méthodes plutôt sophistiquées : je pense que Lisp a hérité sa +méthode <cite>unwind-protect</cite> de TECO.</p> + +<p>Nous avons commencé à intégrer des méthodes plutôt sophistiquées, toutes +avec la syntaxe la plus horrible que vous puissiez imaginer, et cela +marchait ; en tout cas, les gens étaient capables d'écrire des programmes +avec. La leçon évidente était qu'un langage comme TECO, qui n'a pas été +conçu pour programmer, menait à une impasse. Un langage sur lequel on +construit des extensions ne doit pas être vu comme langage de programmation +après coup, il doit être <em>conçu</em> comme langage de programmation. En +fait, nous avons découvert que le mieux adapté à cet usage était Lisp.</p> + +<p>C'est Bernie Greenberg qui l'a découvert <a id="foot-2-rev" +href="#foot-2">(2)</a>. Il a écrit une version d'Emacs avec le MacLisp de +Multics ; il écrivait ses commandes en MacLisp de façon très +simple. L'éditeur lui-même était entièrement écrit en Lisp. L'Emacs de +Multics a été un grand succès : programmer de nouvelles commandes d'édition +était si pratique que même les secrétaires de son service s'y sont +mises. Elles se servaient d'un manuel que quelqu'un avait écrit pour montrer +comment étendre Emacs, sans dire qu'il s'agissait de programmation. Donc les +secrétaires, qui croyaient être incapables de programmer, n'ont pas eu peur +d'essayer. Elles ont lu le manuel, découvert qu'elles pouvaient faire des +choses utiles, et ont appris à programmer.</p> + +<p>Bernie a vu ainsi qu'une application (un programme qui fait quelque chose +d'utile pour vous) contenant Lisp, qu'on pouvait étendre en réécrivant les +programmes Lisp, était vraiment une très bonne manière pour les gens +d'apprendre à programmer. Cela leur donnait l'occasion d'écrire de petits +programmes qui leur étaient utiles, ce qui est impossible dans la plupart +des situations. L'utilité pratique qu'ils en retiraient leur servait +d'encouragement (au stade le plus difficile) quand ils ne croyaient pas +pouvoir programmer, jusqu'à ce qu'ils en arrivent au point où ils étaient +devenus programmeurs.</p> + +<p>À ce moment-là, les gens ont commencé à se demander comment ils pouvaient +obtenir quelque chose de ce genre sur une plateforme sur laquelle ils ne +disposaient pas de l'implémentation des services complets de Lisp. Le +MacLisp de Multics avait un compilateur aussi bien qu'un interpréteur +(c'était un système Lisp complet) mais les gens voulaient implémenter +quelque chose comme ça sur d'autres systèmes où il n'y avait pas encore de +compilateur Lisp. Car sans compilateur Lisp on ne pouvait écrire l'éditeur +entier en Lisp : cela aurait été trop lent, en particulier l'affichage, s'il +avait fallu faire tourner du Lisp interprété. Donc nous avons développé une +technique hybride. L'idée était d'écrire ensemble l'interpréteur Lisp et les +parties bas niveau de l'éditeur, de telle sorte que certaines parties de +l'éditeur soient des méthodes intégrées Lisp. Ces parties étaient celles +dont nous pensions qu'elles avaient besoin d'être optimisées. C'est une +technique que nous avions déjà consciemment pratiquée dans l'Emacs original, +puisqu'il y avait certaines fonctionnalités de relativement haut niveau que +nous réimplémentions en langage machine, les transformant en primitives +TECO. Par exemple, il y avait une primitive TECO pour remplir un paragraphe +(en fait, pour faire le gros du travail de remplir un paragraphe, parce que +certaines des parties du travail les moins exigeantes en temps étaient +faites à un niveau supérieur par un programme TECO). On aurait pu faire tout +le travail en écrivant un programme TECO, mais c'était trop lent, donc nous +l'avons optimisé en en mettant une partie en langage machine. C'est cette +idée que nous avons utilisée dans la technique hybride : la plus grosse +partie de l'éditeur serait écrite en Lisp, mais certaines parties ayant +besoin d'une vitesse d'exécution particulièrement rapide seraient écrites à +un niveau inférieur.</p> + +<p>Par conséquent, j'ai suivi le même concept pour écrire ma deuxième +implémentation d'Emacs. Le langage de bas niveau n'était plus du langage +machine mais du C. C'était un bon langage, efficace pour des programmes +portables fonctionnant dans un système d'exploitation de type Unix. Il y +avait un interpréteur Lisp, mais j'ai implémenté des méthodes pour les +tâches spéciales d'édition directement en C : manipuler les piles de +l'éditeur, insérer des interlignes, lire et écrire des fichiers, réafficher +la pile à l'écran, gérer les fenêtres de l'éditeur.</p> + +<p>Cela dit, ce n'était pas le premier Emacs écrit en C et fonctionnant sous +Unix. Le premier a été écrit par James Gosling et s'appelait GosMac. Une +chose étrange est arrivée à Gosling. Au début, il semblait être influencé +par le même esprit de partage et de coopération que celui de l'Emacs +original. J'ai d'abord distribué l'Emacs original aux gens du MIT. Quelqu'un +voulait le porter sur Twenex – il fonctionnait à l'origine sur +l'<cite>Incompatible Timesharing System</cite><a id="TransNote1-rev" +href="#TransNote1"><sup>a</sup></a> que nous utilisions au MIT. Ils l'ont +porté sur Twenex, ce qui signifiait qu'il y avait quelques centaines +d'installations dans le monde qui pouvaient éventuellement l'utiliser. Nous +avons commencé à le leur distribuer, en posant comme règle que « vous deviez +renvoyer toutes vos améliorations » pour que tout le monde en +bénéficie. Personne n'a jamais essayé de faire appliquer cette règle, mais +autant que je sache les gens coopéraient effectivement.</p> + +<p>Au début, Gosling avait vraiment l'air de collaborer dans cet esprit. Il a +écrit dans un manuel qu'il appelait le programme « Emacs » en espérant que +d'autres dans la communauté l'amélioreraient jusqu'à ce qu'il soit digne de +ce nom. C'est la bonne approche pour créer une communauté : demander aux +gens de se joindre à vous pour participer à l'amélioration du +programme. Mais après cela il a apparemment changé d'état d'esprit et vendu +le programme à une entreprise.</p> + +<p>À ce moment-là, je travaillais sur le système GNU (un système d'exploitation +libre de type Unix que beaucoup de gens nomment par erreur « Linux »). Il +n'y avait pas d'éditeur Emacs libre fonctionnant sur Unix. J'avais en +revanche un ami qui avait participé au développement de l'Emacs de +Gosling. Gosling lui avait donné, par courriel, la permission de distribuer +sa propre version. Il m'a proposé d'utiliser cette version. Puis j'ai +découvert que l'Emacs de Gosling n'avait pas réellement de Lisp. Il avait un +langage de programmation connu sous le nom de « mocklisp », qui ressemblait +pour la syntaxe à Lisp, mais n'avait pas ses structures de données. Donc les +programmes n'étaient pas des données et des éléments vitaux de Lisp +manquaient. Ses structures de données étaient les chaînes de caractères, les +nombres et quelques autres choses spécialisées.</p> + +<p>J'en ai conclu que je ne pouvais pas l'utiliser et qu'il me fallait tout +reprendre à zéro, à commencer par l'écriture d'un véritable interpréteur +Lisp. J'ai progressivement adapté toutes les parties de l'éditeur aux +structures de données du vrai Lisp plutôt qu'à des structures de données ad +hoc, de manière à permettre aux programmes Lisp des utilisateurs d'accéder +aux structures de données des parties internes de l'éditeur pour les +manipuler.</p> + +<p>L'unique exception était le réaffichage. Pendant longtemps, le réaffichage a +été une sorte d'autre planète. L'éditeur arrivait sur cette planète, et les +choses continuaient avec des structures de données très spéciales qui +pouvaient être corrompues par le « ramasse-miette »,<a id="TransNote2-rev" +href="#TransNote2"><sup>b</sup></a> ou par les interruptions, et vous ne +pouviez exécuter aucun programme Lisp pendant ce temps-là. Nous avons changé +ça depuis ; il est maintenant possible d'exécuter du code Lisp pendant le +réaffichage. C'est quelque chose de très pratique.</p> + +<p>Ce second programme Emacs était du « logiciel libre » dans le sens moderne +du terme ; il faisait partie d'une campagne politique explicite pour libérer +le logiciel. L'essence de cette campagne était que chacun devait être libre +de faire les choses que nous faisions au temps du MIT, travailler ensemble +sur du logiciel et travailler avec qui voulait travailler avec nous. C'est +la base du mouvement du logiciel libre – l'expérience que j'ai eue, la vie +que j'ai vécue au labo d'IA du MIT : travailler sur le savoir de l'humanité, +sans empêcher qui que ce soit de le réutiliser et de le disséminer.</p> + +<p>À cette époque, on pouvait fabriquer un ordinateur dans le même ordre de +prix que d'autres qui n'étaient pas conçus pour Lisp, à part qu'il faisait +fonctionner Lisp beaucoup plus rapidement qu'eux, avec en plus une +vérification complète de type. Les ordinateurs ordinaires vous forçaient +typiquement à choisir entre vitesse d'exécution et bonne vérification de +type. Donc oui, vous pouviez avoir un compilateur Lisp et faire fonctionner +vos programmes rapidement, mais quand ils essayaient d'exécuter +<code>car</code> sur un nombre, ils sortaient des résultats insensés et +finissaient par planter au bout d'un moment.</p> + +<p>La machine Lisp était capable d'exécuter des instructions presque aussi vite +que ces autres machines, mais à chaque instruction une instruction +<code>car</code> faisait une vérification de type ; par conséquent, lorsque +vous essayiez d'obtenir le <code>car</code> d'un nombre dans un programme +compilé, vous obteniez immédiatement une erreur. Nous avons construit la +machine et fait un système d'exploitation Lisp pour elle. Il était presque +entièrement écrit en Lisp, à la seule exception des parties écrites dans le +microcode. Certaines personnes ont porté de l'intérêt à la fabrication de la +machine Lisp, ce qui voulait dire qu'elles allaient lancer une entreprise.</p> + +<p>Il y avait deux conceptions différentes du type de société que ça devait +être. Greenblatt voulait lancer ce qu'il appelait une « entreprise de +hacker ». Cela signifie qu'il voulait une entreprise dirigée par des hackers +et qui fonctionnerait d'une manière favorable aux hackers. Elle aurait +également pour but de maintenir la culture du labo d'IA <a id="foot-3-rev" +href="#foot-3">(3)</a>. Malheureusement, comme Greenblatt n'avait aucune +expérience des affaires, d'autres personnes du groupe de la machine Lisp ont +émis des doutes sur ses chances de réussite. Elles pensaient que son plan +pour éviter les investissements extérieurs ne marcherait pas.</p> + +<p>Pourquoi voulait-il éviter les investissements extérieurs ? Parce que, +lorsqu'une entreprise a des investisseurs extérieurs, ils prennent le +contrôle et ne vous laissent pas avoir le moindre scrupule. Et si vous +finissez par avoir des scrupules, ils vous remplacent également à la +direction.</p> + +<p>Greenblatt a donc eu l'idée de chercher un client prêt à payer d'avance pour +acheter les composants. Ils construiraient les machines et les livreraient ; +avec le bénéfice réalisé, ils seraient en mesure d'acheter les composants +pour quelques machines de plus, de les vendre, d'acheter des composants pour +plus de machines, etc., etc. Les autres personnes du groupe ne pensaient pas +que cela puisse fonctionner.</p> + +<p>Greenblatt a ensuite recruté Russel Noftsker, la personne qui m'avait +engagé, et qui avait entre-temps quitté le labo d'IA pour monter une +entreprise florissante. Russel passait pour avoir des capacités pour les +affaires. Il l'a démontré en disant aux autres membres du groupe : « Jetons +Greenblatt, oublions son idée et créons une autre entreprise. » Poignarder +dans le dos… un véritable homme d'affaires en effet. Ces personnes +ont décidé de former une société nommée Symbolics. Elles chercheraient des +investissements extérieurs, n'auraient aucun scrupule et feraient tout leur +possible pour gagner.</p> + +<p>Mais Greenblatt n'a pas abandonné. Lui et les quelques personnes qui lui +étaient restées loyales ont décidé de lancer tout de même <cite>Lisp +Machines Inc.</cite> et de poursuivre leur projet initial. Et devinez quoi, +ils ont réussi ! Ils ont trouvé leur premier client et ont été payés +d'avance. Ils ont construit leurs machines, les ont vendues, et ont +construit de plus en plus de machines. Ils ont effectivement réussi alors +même qu'ils n'avaient pas l'aide de la plupart des personnes du +groupe. Symbolics a eu un bon départ également ; il y avait donc deux +entreprises concurrentes de machines Lisp. Quand Symbolics a vu que <abbr +title="Lisp Machines Inc.">LMI</abbr> n'allait pas s'écrouler, ils ont +commencé à chercher des moyens de la détruire.</p> + +<p>Il y a donc eu l'abandon de notre labo, suivi par une « guerre » dans notre +labo. L'abandon s'est fait quand Symbolics a débauché tous les hackers, à +l'exception de moi et de quelques autres qui travaillaient chez LMI à temps +partiel. Puis, pour éliminer les gens qui travaillaient à temps partiel pour +le MIT, ils ont invoqué une règle qui les a forcés à le quitter +complètement, ce qui m'a laissé seul. Le labo d'IA était maintenant +impuissant. Et le MIT a passé un arrangement absurde avec ces deux +entreprises. C'était un contrat entre eux trois dans lequel chaque +entreprise donnait des licences pour utiliser les sources des systèmes de +machine Lisp. Ces entreprises étaient obligées de laisser le MIT utiliser +leurs modifications. Mais le contrat ne contenait rien disant que le MIT +avait le droit de les utiliser dans les systèmes de machine Lisp pour +lesquels les deux entreprises lui avaient donné des licences. Personne +n'avait imaginé que le groupe de hackers du labo d'IA disparaîtrait, mais ce +fut le cas.</p> + +<p> Les gens de Symbolics ont trouvé une combine <a id="foot-4-rev" +href="#foot-4">(4)</a>. Ils ont dit au labo : « Nous continuerons à mettre à +votre disposition nos modifications du système pour votre usage, mais vous +ne pourrez pas les installer dans le système de machine Lisp du MIT. À la +place, nous vous donnerons accès à celui de Symbolics et vous pourrez le +faire fonctionner, mais c'est tout ce que vous pourrez faire. »</p> + +<p>En pratique, cela voulait dire qu'ils nous obligeaient à choisir un camp : +utiliser la version du MIT, ou la version de Symbolics. Quel que soit notre +choix, cela déterminait à quel système iraient nos améliorations. Si nous +travaillions sur la version de Symbolics pour l'améliorer, nous +soutiendrions uniquement Symbolics. Si nous utilisions la version MIT du +système, nos améliorations seraient à la disposition des deux entreprises, +mais Symbolics verrait que nous soutenions LMI puisque nous les aidions à +exister. Donc nous ne pouvions plus rester neutres.</p> + +<p>Jusque-là, je n'avais pris parti pour aucune des deux entreprises, bien que +cela me rendît malheureux de voir ce qui était arrivé à notre communauté et +au logiciel. Mais maintenant, Symbolics m'avait forcé la main. Alors, pour +essayer d'aider LMI à poursuivre son activité <a id="foot-5-rev" +href="#foot-5">(5)</a>, j'ai commencé à dupliquer toutes les améliorations +que Symbolics avait faites au système de machine Lisp. Je réécrivais des +améliorations équivalentes moi-même (c'est-à-dire avec mon propre code).</p> + +<p>Au bout d'un moment <a id="foot-6-rev" href="#foot-6">(6)</a>, je suis +arrivé à la conclusion que cela irait mieux si je ne regardais même pas leur +code. Dans les annonces de versions bêta qui donnaient les notes de version, +je pouvais voir quelles allaient être les fonctionnalités et les implémenter +moi-même. Au moment où ils avaient une version publiable, j'avais la mienne +également.</p> + +<p>De cette façon, et pendant deux ans, je les ai empêchés d'écraser LMI et les +deux entreprises ont continué d'exister. Mais je ne voulais pas passer des +années et des années à punir quelqu'un, dans le seul but de contrer une +mauvaise action. J'imagine qu'ils avaient été assez punis parce qu'ils +étaient coincés avec de la concurrence qui n'allait pas laisser tomber ni +disparaître <a id="foot-7-rev" href="#foot-7">(7)</a>. De toute manière, il +était temps de commencer à bâtir une nouvelle communauté pour remplacer +celle que leurs actions, ainsi que d'autres, avaient rayée de la carte.</p> + +<p>La communauté Lisp des années 70 ne se limitait pas au labo d'IA du MIT et +les hackers n'étaient pas tous au MIT. La guerre lancée par Symbolics est ce +qui a déclenché la disparition du groupe du MIT, mais il y avait d'autres +événements en cours au même moment. Il y avait des gens qui abandonnaient la +coopération ; tout cela a détruit la communauté et il n'en est pas resté +grand-chose.</p> + +<p>Après avoir arrêté de punir Symbolics, il m'a fallu réfléchir à la suite. Il +fallait que je fasse un système d'exploitation libre, c'était clair ; la +seule façon de faire travailler des gens ensemble et de les faire partager +était d'avoir un système d'exploitation libre.</p> + +<p>Au début, j'ai pensé faire un système basé sur Lisp, mais j'ai réalisé que +techniquement ce n'était pas une très bonne idée. Pour avoir quelque chose +comme le système de la machine Lisp, on avait besoin de microcode à but +spécifique. C'est ce qui permettait d'exécuter des programmes aussi +rapidement que les autres ordinateurs exécutaient les leurs, en ayant tout +de même le bénéfice de la vérification de type. Sans cela, on en était +réduit à quelque chose comme les compilateurs Lisp pour les autres +machines. Les programmes étaient plus rapides, mais instables. Ça va bien si +on exécute un programme sur un système en temps partagé ; si un programme +plante, ce n'est pas un désastre, c'est quelque chose que les programmes +font occasionnellement. Mais cela ne convenait pas pour l'écriture d'un +système d'exploitation ; j'ai donc rejeté l'idée de prendre comme modèle le +système comme la machine Lisp.</p> + +<p>Au lieu de ça, j'ai décidé de faire un système d'exploitation de type Unix +qui aurait des implémentations Lisp fonctionnant en tant que programmes +utilisateur. Le noyau ne serait pas écrit en Lisp, mais nous aurions +Lisp. Le développement de ce système d'exploitation, le système +d'exploitation GNU, est ce qui m'a amené à écrire GNU Emacs. Ce faisant, +j'ai cherché à faire le strict minimum d'implémentation Lisp. La taille des +programmes était un souci énorme.</p> + +<p>Il y avait des gens à cette époque, en 1985, qui avaient des machines d'un +mégaoctet sans mémoire virtuelle. Ils voulaient pouvoir utiliser GNU +Emacs. Cela voulait dire que je devais garder le programme aussi réduit que +possible.</p> + +<p>Par exemple, à ce moment-là, la seule construction de boucle était +<code>while</code>, et elle était extrêmement simple. Il n'existait aucun +moyen de sortir de cette boucle <code>while</code> ; vous ne pouviez faire +qu'un <code>catch</code> et un <code>throw</code>, ou tester une variable +dans la boucle. Cela montre à quel point j'essayais de réduire le +programme. Nous n'avions pas de <code>caar</code>, de <code>cadr</code>, +etc. ; simplifier au maximum était l'esprit de GNU Emacs, l'esprit du Lisp +d'Emacs, depuis l'origine.</p> + +<p>Évidemment les machines sont plus grosses maintenant et nous ne travaillons +plus de cette façon. Nous utilisons <code>caar</code> et <code>cadr</code>, +etc., et nous pourrions intégrer une autre construction de boucle un de ces +jours. Nous avons envie de l'étendre un peu maintenant, mais nous ne voulons +pas l'étendre au niveau du Common Lisp. Il m'est arrivé une fois +d'implémenter le Common Lisp sur la machine Lisp, mais je n'en ai pas été +vraiment satisfait. Ce que je n'aime pas trop, ce sont les arguments +mots-clefs <a id="foot-8-rev" href="#foot-8">(8)</a>. Ils ne me semblent pas +très « Lisp » ; je le fais de temps à autre, mais le moins possible.</p> + +<p>L'implication du projet GNU avec Lisp ne s'est pas arrêtée là. Plus tard +vers 1995, nous pensions lancer un projet de bureau graphique. Il était +clair que pour les programmes du bureau, nous voulions un langage de +programmation qui permette d'en écrire une grande partie et de le rendre +facilement extensible, comme l'éditeur. La question était lequel choisir.</p> + +<p>À ce moment-là, <abbr title="Tool Command Language">TCL</abbr> était +largement mis en avant pour ce genre d'applications. J'avais une très +mauvaise opinion de TCL, avant tout parce que ce n'était pas du Lisp. Cela +ressemblait un peu à Lisp, mais pas au niveau sémantique, et ce n'était pas +aussi propre. Puis quelqu'un m'a montré une publicité dans laquelle Sun +essayait de recruter quelqu'un pour travailler sur TCL afin d'en faire le +« langage d'extension standard de facto » au niveau mondial. Et j'ai pensé : +« Nous devons empêcher cela. » C'est ainsi que nous avons commencé à faire +de Scheme le langage d'extension standard pour GNU. Pas Common Lisp parce +qu'il était trop gros. L'idée était d'avoir un interpréteur Scheme conçu +pour être lié à des applications à la manière de TCL. Nous recommanderions +ensuite de donner la préférence à Scheme pour les extensions à tous les +programmes GNU.</p> + +<p>Il y a un avantage intéressant à utiliser comme langage d'extension primaire +un langage aussi puissant qu'une version de Lisp. On peut implémenter +d'autres langages en les traduisant en langage primaire. Si le langage +primaire est TCL, on ne peut pas implémenter facilement Lisp en le +traduisant en TCL. Mais si le langage primaire est Lisp, il n'est pas +difficile d'implémenter d'autres choses en les traduisant. Nous sommes +partis de l'idée que si chaque application extensible était compatible avec +Scheme, on pourrait écrire une implémentation de TCL, Python ou Perl en +Scheme, qui traduirait ce programme en Scheme. Puis on pourrait charger cela +dans n'importe quelle application et la configurer dans votre langage +favori, et cela marcherait également avec d'autres configurations.</p> + +<p>Tant que l'extensibilité des langages est faible, les utilisateurs doivent +utiliser uniquement le langage qu'on leur fournit. Ce qui signifie que les +gens qui préfèrent un langage particulier doivent concourir pour le choix +des développeurs d'application : « S'il vous plaît, monsieur le développeur +d'applications, mettez mon langage dans votre application, pas le sien. » +Ensuite, les autres utilisateurs n'ont plus le choix ; quelle que soit +l'application qu'ils utilisent, elle arrive avec un langage et ils sont +limités à ce langage. Mais quand vous avez un langage puissant qui peut +implémenter les autres en les traduisant, alors vous donnez le choix aux +utilisateurs et vous éliminez la guerre des langages. Nous espérons que +c'est ce que fera « Guile », notre interpréteur Scheme. Nous avions une +personne l'été dernier qui travaillait à terminer un traducteur de Python +vers Scheme. Je ne sais pas s'il est entièrement fini maintenant, mais si +quelqu'un est intéressé par ce projet, contactez-moi. Voilà donc notre +projet pour l'avenir.</p> + +<p>Je n'ai pas parlé de logiciel libre, mais laissez-moi vous dire rapidement +un petit peu de ce que cela signifie. « Logiciel libre » ne se réfère pas au +prix, cela ne veut pas dire que vous l'obtiendrez gratuitement (vous pouvez +avoir à payer les copies, ou bien vous pouvez les obtenir gratuitement).<a +id="TransNote3-rev" href="#TransNote3"><sup>c</sup></a> Cela signifie que +vous êtes libre en tant qu'utilisateur. L'essentiel, c'est que vous êtes +libre d'utiliser le programme, libre d'étudier ce qu'il fait, libre de le +modifier pour l'adapter à vos besoins, libre de redistribuer des copies aux +autres et libre de publier des versions améliorées ou étendues. Voilà ce que +signifie « logiciel libre ». Si vous utilisez des logiciels non libres, vous +perdez cette liberté capitale, donc ne le faites jamais.</p> + +<p>Le but du projet GNU est de faciliter aux gens le rejet des logiciels non +libres qui dominent les utilisateurs, qui piétinent leur liberté, en mettant +à leur disposition des logiciels libres pour les remplacer. À ceux qui n'ont +pas le courage moral de rejeter les logiciels non libres quand cela signifie +quelque inconvénient pratique, nous essayons de donner une alternative libre +pour qu'ils puissent se libérer avec moins de complications et un sacrifice +moindre en termes pratiques. Plus le sacrifice est petit, mieux c'est. Nous +voulons leur faciliter la vie libre, la coopération.</p> + +<p>Il s'agit de la liberté de coopérer. Nous avons l'habitude de penser à la +liberté et à la coopération avec la société comme si ces notions +s'opposaient. Mais ici elles sont dans le même camp. Avec le logiciel libre +vous êtes libre de coopérer avec d'autres personnes et vous êtes libre de +vous aider vous-même. Avec le logiciel non libre, quelqu'un vous domine et +garde les gens divisés. Vous n'êtes pas autorisé à partager avec eux, vous +n'êtes pas libre de coopérer avec la société ni de l'aider, pas plus que +vous n'êtes autorisé à vous aider vous-même. Divisés et impuissants, voilà +l'état des utilisateurs de logiciel non libre.</p> + +<p>Nous avons produit une variété énorme de logiciels libres. Nous avons fait +ce que les gens disaient que nous n'arriverions jamais à faire ; nous avons +deux systèmes d'exploitation constitués de logiciel libre. Nous avons de +nombreuses applications, mais évidemment nous avons encore beaucoup à +faire. C'est pourquoi nous avons besoin de votre aide. J'aimerais vous +demander de faire du bénévolat pour le projet GNU ; aidez-nous à développer +le logiciel libre pour qu'il y ait plus d'emplois. Allez voir sur <a +href="/help/">http://www.gnu.org/help</a> pour trouver des suggestions sur +la manière de nous aider. Si vous voulez commander des choses, il y a un +lien pour cela sur cette page. Si vous voulez des articles sur des questions +philosophiques, allez voir dans /philosophy. Si vous cherchez des logiciels +libres, allez voir dans /directory, qui actuellement répertorie environ +1900 logiciels (ce qui représente une fraction de tout les logiciels libres +existants). S'il vous plaît, écrivez-en d'autres et offrez-les au projet +GNU. Mon livre d'essais, <cite>Free Software and Free Society</cite> +(Logiciel libre et société libre), est en vente et peut être acheté sur <a +href="http://www.gnu.org/">www.gnu.org</a>. <cite>Happy hacking!</cite> +(Codez joyeusement !)</p> + +<ol> +<li id="foot-1">Guy Steele a conçu la bibliothèque symétrique originale de commandes +d'Emacs, puis lui et moi avons commencé à implémenter Emacs (au-dessus de +TECO), mais après une longue session de développement conjointe, Steele a +commencé à s'éloigner. J'ai donc terminé Emacs. D'autres, en particulier +Eugene C. Cicciarelli et Mike McMahon, ont par la suite contribué de manière +substantielle. <a href="#foot-1-rev" class="nounderline">↑</a></li> + +<li id="foot-2">Bernie Greenberg dit que l'implémentation d'Emacs de Dan Weinberg pour la +machine Lisp est arrivée avant celle de Greenberg pour Multics. Je lui +présente mes excuses pour cette erreur. <a href="#foot-2-rev" +class="nounderline">↑</a></li> + +<li id="foot-3">Le plan de Greenblatt, d'après ce que j'ai compris, était d'engager les gens +du laboratoire à temps partiel afin qu'ils puissent continuer à travailler +au labo d'IA. Au lieu de cela, Symbolics les a engagés à temps plein, et +donc ils ont arrêté de travailler au MIT. <a href="#foot-3-rev" +class="nounderline">↑</a></li> + +<li id="foot-4">L'arrière-pensée de ce plan, que je n'ai pas explicitée dans le discours, +était que durant cette période initiale les ex-hackers du labo d'IA, que ce +soit chez Symbolics ou chez LMI, continuent à apporter leurs modifications +au système pour machine Lisp du MIT, bien que le contrat ne l'exige pas. Le +plan de Symbolics était de briser cette coopération unilatéralement. <a +href="#foot-4-rev" class="nounderline">↑</a></li> + +<li id="foot-5">Ce n'est pas que le sort de LMI m'intéressait particulièrement, mais plutôt +que je ne voulais pas laisser Symbolics gagner grâce à son agression contre +le labo d'IA. <a href="#foot-5-rev" class="nounderline">↑</a></li> + +<li id="foot-6">Cette phrase a été mal interprétée ; je n'aurais, paraît-il, jamais, à aucun +moment jeté un œil sur le code de Symbolics. En réalité, cette phrase dit +que je l'ai bel et bien regardé, au début. Le code source de Symbolics était +disponible au MIT où j'étais en droit de le lire, et au début c'est ainsi +que je me suis rendu compte de leurs modifications. + +<p>Mais cela signifiait que je devais faire un effort particulier pour résoudre +chaque problème différemment, de manière à éviter de copier le code de +Symbolics. Après un moment, j'ai conclu que c'était mieux de ne pas le +regarder du tout. De cette façon, je pouvais écrire le code de la meilleure +façon, sans me soucier de ce qui était dans le code de Symbolics. <a +href="#foot-6-rev" class="nounderline">↑</a></p></li> + +<li id="foot-7">Symbolics s'est plaint au MIT que mon travail, en contrant leur plan, avait +coûté à Symbolics un million de dollars. <a href="#foot-7-rev" +class="nounderline">↑</a></li> + +<li id="foot-8">Cela ne me dérange pas si une mégafonction très complexe prend des arguments +mots-clés. Ce qui me dérange, c'est de les mettre dans des fonctions simples +et basiques comme « member ». <a href="#foot-8-rev" +class="nounderline">↑</a></li> +</ol> + +<div class="translators-notes"> + +<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> +<hr /><b>Notes de relecture</b><ol id="translator-notes-alpha"> +<li id="TransNote1"><cite>Incompatible Timesharing System</cite> (ITS) : +« système à temps partagé incompatible », conçu par l'équipe du laboratoire +d'intelligence artificielle et nommé en opposition avec CTSS +<cite>(Compatible Time Sharing System)</cite>, système d'exploitation +utilisé précédemment au MIT. <a href="#TransNote1-rev" +class="nounderline">↑</a></li> +<li id="TransNote2"><cite>Garbage collection</cite> : mise à jour de tables +d'allocation de mémoire (d'après « Le Jargon Français »). <a +href="#TransNote2-rev" class="nounderline">↑</a></li> +<li id="TransNote3">En anglais, le mot <cite>free</cite> veut dire libre, +mais aussi gratuit, d'où la confusion possible. <a href="#TransNote3-rev" +class="nounderline">↑</a></li> +</ol></div> +</div> + +<!-- for id="content", starts in the include above --> +<!--#include virtual="/server/footer.fr.html" --> +<div id="footer"> +<div class="unprintable"> + +<p>Veuillez envoyer les requêtes concernant la FSF et GNU à <a +href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. Il existe aussi <a +href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens +orphelins et autres corrections ou suggestions peuvent être signalés à <a +href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> + +<p> +<!-- TRANSLATORS: Ignore the original text in this paragraph, + replace it with the translation of these two: + + We work hard and do our best to provide accurate, good quality + translations. However, we are not exempt from imperfection. + Please send your comments and general suggestions in this regard + to <a href="mailto:web-translators@gnu.org"> + + <web-translators@gnu.org></a>.</p> + + <p>For information on coordinating and submitting translations of + our web pages, see <a + href="/server/standards/README.translations.html">Translations + README</a>. --> +Nous faisons le maximum pour proposer des traductions fidèles et de bonne +qualité, mais nous ne sommes pas parfaits. Merci d'adresser vos commentaires +sur cette page, ainsi que vos suggestions d'ordre général sur les +traductions, à <a href="mailto:web-translators@gnu.org"> +<web-translators@gnu.org></a>.</p> +<p>Pour tout renseignement sur la coordination et la soumission des +traductions de nos pages web, reportez-vous au <a +href="/server/standards/README.translations.html">guide de traduction</a>.</p> +</div> + +<!-- Regarding copyright, in general, standalone pages (as opposed to + files generated as part of manuals) on the GNU web server should + be under CC BY-ND 4.0. Please do NOT change or remove this + without talking with the webmasters or licensing team first. + Please make sure the copyright date is consistent with the + document. For web pages, it is ok to list just the latest year the + document was modified, or published. + + If you wish to list earlier years, that is ok too. + Either "2001, 2002, 2003" or "2001-2003" are ok for specifying + years, as long as each year in the range is in fact a copyrightable + year, i.e., a year in which the document was published (including + being publicly visible on the web or in a revision control system). + + There is more detail about copyright years in the GNU Maintainers + Information document, www.gnu.org/prep/maintain. --> +<p>Copyright © 2003, 2007, 2013, 2014, 2020 Free Software Foundation, Inc.</p> + +<p>Cette page peut être utilisée suivant les conditions de la licence <a +rel="license" +href="http://creativecommons.org/licenses/by-nd/4.0/deed.fr">Creative +Commons attribution, pas de modification, 4.0 internationale (CC BY-ND +4.0)</a>.</p> + +<!--#include virtual="/server/bottom-notes.fr.html" --> +<div class="translators-credits"> + +<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> +Traduction : Marc de Maillard.<br /> Révision : <a +href="mailto:trad-gnu@april.org">trad-gnu@april.org</a></div> + +<p class="unprintable"><!-- timestamp start --> +Dernière mise à jour : + +$Date: 2020/07/07 12:30:00 $ + +<!-- timestamp end --> +</p> +</div> +</div> +</body> +</html> |