taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

rms-lisp.html (40805B)


      1 <!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
      2 
      3 <!--#include virtual="/server/header.fr.html" -->
      4 <!-- Parent-Version: 1.96 -->
      5 <!-- This page is derived from /server/standards/boilerplate.html -->
      6 <!--#set var="TAGS" value="gnu-history" -->
      7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
      8 
      9 <!-- This file is automatically generated by GNUnited Nations! -->
     10 <title>Mes expériences avec Lisp et le développement de GNU Emacs - Projet GNU -
     11 Free Software Foundation</title>
     12 <style type="text/css" media="print,screen"><!--
     13 a[href*='#foot-'] { font-size: .94em; }
     14 -->
     15 </style>
     16 
     17 <!--#include virtual="/gnu/po/rms-lisp.translist" -->
     18 <!--#include virtual="/server/banner.fr.html" -->
     19 <!--#include virtual="/gnu/gnu-breadcrumb.fr.html" -->
     20 <!--GNUN: OUT-OF-DATE NOTICE-->
     21 <!--#include virtual="/server/top-addendum.fr.html" -->
     22 <div class="article reduced-width">
     23 <h2>Mes expériences avec Lisp et le développement de GNU Emacs</h2>
     24 
     25 <div class="infobox">
     26 <p>Transcription du discours de Richard Stallman à la conférence internationale
     27 Lisp, le 28 octobre 2002.</p>
     28 </div>
     29 <hr class="thin" />
     30 
     31 <p>Comme aucun de mes discours habituels n'a à voir avec Lisp, aucun ne serait
     32 approprié pour aujourd'hui. Donc je vais improviser. Comme j'ai fait
     33 suffisamment de choses dans ma carrière en relation avec Lisp, je devrais
     34 être capable de raconter quelque chose d'intéressant.</p>
     35 
     36 <p>Ma première expérience avec Lisp a été de lire le manuel Lisp 1.5 au
     37 lycée. C'est à ce moment-là que l'idée m'a frappé de plein fouet : qu'il
     38 puisse y avoir un langage informatique comme cela. La première fois que j'ai
     39 eu la chance de faire quelque chose avec Lisp fut quand je suis arrivé à
     40 Harvard et que j'ai écrit un interpréteur Lisp pour le <abbr
     41 title="Programmed Data Processor">PDP</abbr>-11. C'était une toute petite
     42 machine, avec quelque chose comme 8 kilooctets de mémoire, et j'ai réussi à
     43 écrire l'interpréteur en un millier de lignes. Cela m'a laissé un peu de
     44 place pour quelques données. Tout cela, c'était avant que je ne voie ce
     45 qu'est un vrai logiciel, qui fait de vraies tâches sur un système.</p>
     46 
     47 <p>J'ai commencé à travailler sur une vraie implémentation de Lisp avec
     48 JonL White après avoir débuté au <abbr title="Massachusetts Institute of
     49 Technology">MIT</abbr>. J'ai été engagé au laboratoire d'intelligence
     50 artificielle (IA) non pas par JonL, mais par Russ Noftsker, ce qui est
     51 plutôt ironique vu ce qui s'est passé par la suite ; il a vraiment dû
     52 regretter ce jour‑là.</p>
     53 
     54 <p>Pendant les années 70, avant que ma vie ne soit politisée par des événements
     55 horribles, je me contentais de faire une extension après l'autre pour des
     56 programmes variés, la plupart d'entre eux n'ayant rien à voir avec
     57 Lisp. Mais en cours de route j'ai écrit un éditeur de texte, Emacs. L'idée
     58 intéressante à propos d'Emacs était qu'il possédait un langage de
     59 programmation et que les commandes d'édition de l'utilisateur étaient
     60 écrites dans ce langage de programmation interprété, de telle sorte qu'on
     61 pouvait charger de nouvelles commandes dans l'éditeur tout en éditant. On
     62 pouvait éditer les programmes qu'on utilisait tout en continuant à s'en
     63 servir pour l'édition. Donc, nous avions un système qui était utile à autre
     64 chose qu'à programmer et qu'on pouvait programmer pendant qu'on
     65 l'utilisait. Je ne sais pas si c'était le premier programme à le faire, mais
     66 c'était certainement le premier éditeur comme ça.</p>
     67 
     68 <p>L'idée de construire des programmes gigantesques et compliqués pour nous en
     69 servir dans notre propre travail d'édition, et ensuite de les échanger avec
     70 d'autres personnes, a alimenté l'esprit de coopération sans contrainte que
     71 nous avions au labo d'<abbr title="Intelligence Artificielle">IA</abbr> à ce
     72 moment-là. L'idée première était qu'on pouvait donner une copie de n'importe
     73 quel programme qu'on possédait à qui en voulait une. Nous partagions les
     74 programmes avec qui voulait les utiliser, ils étaient de la connaissance, du
     75 savoir humain. Donc même s'il n'y avait pas de pensée politique organisée
     76 liée à la manière dont nous partagions du logiciel pour concevoir Emacs, je
     77 suis convaincu qu'il y avait une connexion, peut-être une connexion
     78 inconsciente. Je pense que c'est la nature de notre façon de vivre au labo
     79 d'IA qui a mené à Emacs et l'a fait devenir ce qu'il était.</p>
     80 
     81 <p>L'Emacs original ne contenait pas de Lisp. Le langage de bas niveau, le
     82 langage non interprété, était de l'assembleur PDP-10. L'interpréteur dans
     83 lequel nous écrivions n'était en fait pas écrit pour Emacs, il était écrit
     84 pour <abbr title="Text Editor and COrrector">TECO</abbr>. C'était notre
     85 éditeur de texte, et c'était un langage de programmation extrêmement laid,
     86 le plus laid qui puisse exister. En effet, il n'était pas conçu comme
     87 langage de programmation, mais comme langage d'édition et de commande. Il y
     88 avait des commandes comme <code>5l</code>, qui signifiait « avance de 5
     89 lignes », ou bien <code>i</code> puis une chaîne de caractère et Échap pour
     90 insérer cette chaîne. Vous pouviez taper une chaîne de caractères qui était
     91 une série de commandes, ce qui s'appelait une chaîne de commande. Vous la
     92 terminiez par Échap Échap, et elle était exécutée.</p>
     93 
     94 <p>Certaines personnes voulaient étendre ce langage avec des méthodes de
     95 programmation. Elles en ont donc ajouté quelques-unes. Par exemple, l'une
     96 des premières fut une structure de boucle, qui était &lt; &gt;. Vous pouviez
     97 placer ces chevrons autour de quelque chose, et cette chose s'exécutait en
     98 boucle. Il y avait d'autres commandes cryptiques qu'on pouvait utiliser pour
     99 sortir de la boucle si une condition était vérifiée. Pour faire Emacs,
    100 nous <a id="foot-1-rev" href="#foot-1">[1]</a> avons ajouté des méthodes
    101 pour avoir des sous-programmes avec des noms. Avant cela, c'était une sorte
    102 de Basic, et le nom des sous-programmes ne pouvaient avoir qu'une seule
    103 lettre. Il était difficile de faire de gros programmes avec. Nous avons donc
    104 ajouté du code pour qu'ils puissent avoir des noms plus long. En fait, il y
    105 avait des méthodes plutôt sophistiquées : je pense que Lisp a hérité sa
    106 méthode <i>unwind-protect</i> de TECO.</p>
    107 
    108 <p>Nous avons commencé à intégrer des méthodes plutôt sophistiquées, toutes
    109 avec la syntaxe la plus horrible que vous puissiez imaginer, et cela
    110 marchait ; en tout cas, les gens étaient capables d'écrire des programmes
    111 avec. La leçon évidente était qu'un langage comme TECO, qui n'a pas été
    112 conçu pour programmer, menait à une impasse. Un langage sur lequel on
    113 construit des extensions ne doit pas être vu comme langage de programmation
    114 après coup, il doit être <em>conçu</em> comme langage de programmation. En
    115 fait, nous avons découvert que le mieux adapté à cet usage était Lisp.</p>
    116 
    117 <p>C'est Bernie Greenberg qui l'a découvert <a id="foot-2-rev"
    118 href="#foot-2">[2]</a>. Il a écrit une version d'Emacs avec le MacLisp de
    119 Multics ; il écrivait ses commandes en MacLisp de façon très
    120 simple. L'éditeur lui-même était entièrement écrit en Lisp. L'Emacs de
    121 Multics a été un grand succès : programmer de nouvelles commandes d'édition
    122 était si pratique que même les secrétaires de son service s'y sont
    123 mises. Elles se servaient d'un manuel que quelqu'un avait écrit pour montrer
    124 comment étendre Emacs, sans dire qu'il s'agissait de programmation. Donc les
    125 secrétaires, qui croyaient être incapables de programmer, n'ont pas eu peur
    126 d'essayer. Elles ont lu le manuel, découvert qu'elles pouvaient faire des
    127 choses utiles, et ont appris à programmer.</p>
    128 
    129 <p>Bernie a vu ainsi qu'une application (un programme qui fait quelque chose
    130 d'utile pour vous) contenant Lisp, qu'on pouvait étendre en réécrivant les
    131 programmes Lisp, était vraiment une très bonne manière pour les gens
    132 d'apprendre à programmer. Cela leur donnait l'occasion d'écrire de petits
    133 programmes qui leur étaient utiles, ce qui est impossible dans la plupart
    134 des situations. L'utilité pratique qu'ils en retiraient leur servait
    135 d'encouragement (au stade le plus difficile) quand ils ne croyaient pas
    136 pouvoir programmer, jusqu'à ce qu'ils en arrivent au point où ils étaient
    137 devenus programmeurs.</p>
    138 
    139 <p>À ce moment-là, les gens ont commencé à se demander comment ils pouvaient
    140 obtenir quelque chose de ce genre sur une plateforme sur laquelle ils ne
    141 disposaient pas de l'implémentation des services complets de Lisp. Le
    142 MacLisp de Multics avait un compilateur aussi bien qu'un interpréteur
    143 (c'était un système Lisp complet) mais les gens voulaient implémenter
    144 quelque chose comme ça sur d'autres systèmes où il n'y avait pas encore de
    145 compilateur Lisp. Car sans compilateur Lisp on ne pouvait écrire l'éditeur
    146 entier en Lisp : cela aurait été trop lent, en particulier l'affichage, s'il
    147 avait fallu faire tourner du Lisp interprété. Donc nous avons développé une
    148 technique hybride. L'idée était d'écrire ensemble l'interpréteur Lisp et les
    149 parties bas niveau de l'éditeur, de telle sorte que certaines parties de
    150 l'éditeur soient des méthodes intégrées Lisp. Ces parties étaient celles
    151 dont nous pensions qu'elles avaient besoin d'être optimisées. C'est une
    152 technique que nous avions déjà consciemment pratiquée dans l'Emacs original,
    153 puisqu'il y avait certaines fonctionnalités de relativement haut niveau que
    154 nous réimplémentions en langage machine, les transformant en primitives
    155 TECO. Par exemple, il y avait une primitive TECO pour remplir un paragraphe
    156 (en fait, pour faire le gros du travail de remplir un paragraphe, parce que
    157 certaines des parties du travail les moins exigeantes en temps étaient
    158 faites à un niveau supérieur par un programme TECO). On aurait pu faire tout
    159 le travail en écrivant un programme TECO, mais c'était trop lent, donc nous
    160 l'avons optimisé en en mettant une partie en langage machine. C'est cette
    161 idée que nous avons utilisée dans la technique hybride : la plus grosse
    162 partie de l'éditeur serait écrite en Lisp, mais certaines parties ayant
    163 besoin d'une vitesse d'exécution particulièrement rapide seraient écrites à
    164 un niveau inférieur.</p>
    165 
    166 <p>Par conséquent, j'ai suivi le même concept pour écrire ma deuxième
    167 implémentation d'Emacs. Le langage de bas niveau n'était plus du langage
    168 machine mais du C. C'était un bon langage, efficace pour des programmes
    169 portables fonctionnant dans un système d'exploitation de type Unix. Il y
    170 avait un interpréteur Lisp, mais j'ai implémenté des méthodes pour les
    171 tâches spéciales d'édition directement en C : manipuler les piles de
    172 l'éditeur, insérer des interlignes, lire et écrire des fichiers, réafficher
    173 la pile à l'écran, gérer les fenêtres de l'éditeur.</p>
    174 
    175 <p>Cela dit, ce n'était pas le premier Emacs écrit en C et fonctionnant sous
    176 Unix. Le premier a été écrit par James Gosling et s'appelait GosMac. Une
    177 chose étrange est arrivée à Gosling. Au début, il semblait être influencé
    178 par le même esprit de partage et de coopération que celui de l'Emacs
    179 original. J'ai d'abord distribué l'Emacs original aux gens du MIT. Quelqu'un
    180 voulait le porter sur Twenex – il fonctionnait à l'origine sur
    181 l'<i>Incompatible Timesharing System</i> <a id="TransNote1-rev"
    182 href="#TransNote1"><sup>a</sup></a> que nous utilisions au MIT. Ils l'ont
    183 porté sur Twenex, ce qui signifiait qu'il y avait quelques centaines
    184 d'installations dans le monde qui pouvaient éventuellement l'utiliser. Nous
    185 avons commencé à le leur distribuer, en posant comme règle que « vous deviez
    186 renvoyer toutes vos améliorations » pour que tout le monde en
    187 bénéficie. Personne n'a jamais essayé de faire appliquer cette règle, mais
    188 autant que je sache les gens coopéraient effectivement.</p>
    189 
    190 <p>Au début, Gosling avait vraiment l'air de collaborer dans cet esprit. Il a
    191 écrit dans un manuel qu'il appelait le programme « Emacs » en espérant que
    192 d'autres dans la communauté l'amélioreraient jusqu'à ce qu'il soit digne de
    193 ce nom. C'est la bonne approche pour créer une communauté : demander aux
    194 gens de se joindre à vous pour participer à l'amélioration du
    195 programme. Mais après cela il a apparemment changé d'état d'esprit et vendu
    196 le programme à une entreprise.</p>
    197 
    198 <p>À ce moment-là, je travaillais sur le système GNU (un système d'exploitation
    199 libre de type Unix que beaucoup de gens nomment par erreur « Linux »). Il
    200 n'y avait pas d'éditeur Emacs libre fonctionnant sur Unix. J'avais en
    201 revanche un ami qui avait participé au développement de l'Emacs de
    202 Gosling. Gosling lui avait donné, par courriel, la permission de distribuer
    203 sa propre version. Il m'a proposé d'utiliser cette version. Puis j'ai
    204 découvert que l'Emacs de Gosling n'avait pas réellement de Lisp. Il avait un
    205 langage de programmation connu sous le nom de « mocklisp », qui ressemblait
    206 pour la syntaxe à Lisp, mais n'avait pas ses structures de données. Donc les
    207 programmes n'étaient pas des données et des éléments vitaux de Lisp
    208 manquaient. Ses structures de données étaient les chaînes de caractères, les
    209 nombres et quelques autres choses spécialisées.</p>
    210 
    211 <p>J'en ai conclu que je ne pouvais pas l'utiliser et qu'il me fallait tout
    212 reprendre à zéro, à commencer par l'écriture d'un véritable interpréteur
    213 Lisp. J'ai progressivement adapté toutes les parties de l'éditeur aux
    214 structures de données du vrai Lisp plutôt qu'à des structures de données ad
    215 hoc, de manière à permettre aux programmes Lisp des utilisateurs d'accéder
    216 aux structures de données des parties internes de l'éditeur pour les
    217 manipuler.</p>
    218 
    219 <p>L'unique exception était le réaffichage. Pendant longtemps, le réaffichage a
    220 été une sorte d'autre planète. L'éditeur arrivait sur cette planète, et les
    221 choses continuaient avec des structures de données très spéciales qui
    222 pouvaient être corrompues par le « ramasse-miette »,<a id="TransNote2-rev"
    223 href="#TransNote2"><sup>b</sup></a> ou par les interruptions, et vous ne
    224 pouviez exécuter aucun programme Lisp pendant ce temps-là. Nous avons changé
    225 ça depuis ; il est maintenant possible d'exécuter du code Lisp pendant le
    226 réaffichage. C'est quelque chose de très pratique.</p>
    227 
    228 <p>Ce second programme Emacs était du « logiciel libre » dans le sens moderne
    229 du terme ; il faisait partie d'une campagne politique explicite pour libérer
    230 le logiciel. L'essence de cette campagne était que chacun devait être libre
    231 de faire les choses que nous faisions au temps du MIT, travailler ensemble
    232 sur du logiciel et travailler avec qui voulait travailler avec nous. C'est
    233 la base du mouvement du logiciel libre – l'expérience que j'ai eue, la vie
    234 que j'ai vécue au labo d'IA du MIT : travailler sur le savoir de l'humanité,
    235 sans empêcher qui que ce soit de le réutiliser et de le disséminer.</p>
    236 
    237 <p>À cette époque, on pouvait fabriquer un ordinateur dans le même ordre de
    238 prix que d'autres qui n'étaient pas conçus pour Lisp, à part qu'il faisait
    239 fonctionner Lisp beaucoup plus rapidement qu'eux, avec en plus une
    240 vérification complète de type. Les ordinateurs ordinaires vous forçaient
    241 typiquement à choisir entre vitesse d'exécution et bonne vérification de
    242 type. Donc oui, vous pouviez avoir un compilateur Lisp et faire fonctionner
    243 vos programmes rapidement, mais quand ils essayaient d'exécuter
    244 <code>car</code> sur un nombre, ils sortaient des résultats insensés et
    245 finissaient par planter au bout d'un moment.</p>
    246 
    247 <p>La machine Lisp était capable d'exécuter des instructions presque aussi vite
    248 que ces autres machines, mais à chaque instruction une instruction
    249 <code>car</code> faisait une vérification de type ; par conséquent, lorsque
    250 vous essayiez d'obtenir le <code>car</code> d'un nombre dans un programme
    251 compilé, vous obteniez immédiatement une erreur. Nous avons construit la
    252 machine et fait un système d'exploitation Lisp pour elle. Il était presque
    253 entièrement écrit en Lisp, à la seule exception des parties écrites dans le
    254 microcode. Certaines personnes ont porté de l'intérêt à la fabrication de la
    255 machine Lisp, ce qui voulait dire qu'elles allaient lancer une entreprise.</p>
    256 
    257 <p>Il y avait deux conceptions différentes du type de société que ça devait
    258 être. Greenblatt voulait lancer ce qu'il appelait une « entreprise de
    259 hacker ». Cela signifie qu'il voulait une entreprise dirigée par des hackers
    260 et qui fonctionnerait d'une manière favorable aux hackers. Elle aurait
    261 également pour but de maintenir la culture du labo d'IA <a id="foot-3-rev"
    262 href="#foot-3">[3]</a>. Malheureusement, comme Greenblatt n'avait aucune
    263 expérience des affaires, d'autres personnes du groupe de la machine Lisp ont
    264 émis des doutes sur ses chances de réussite. Elles pensaient que son plan
    265 pour éviter les investissements extérieurs ne marcherait pas.</p>
    266 
    267 <p>Pourquoi voulait-il éviter les investissements extérieurs ? Parce que,
    268 lorsqu'une entreprise a des investisseurs extérieurs, ils prennent le
    269 contrôle et ne vous laissent pas avoir le moindre scrupule. Et si vous
    270 finissez par avoir des scrupules, ils vous remplacent également à la
    271 direction.</p>
    272 
    273 <p>Greenblatt a donc eu l'idée de chercher un client prêt à payer d'avance pour
    274 acheter les composants. Ils construiraient les machines et les livreraient ;
    275 avec le bénéfice réalisé, ils seraient en mesure d'acheter les composants
    276 pour quelques machines de plus, de les vendre, d'acheter des composants pour
    277 plus de machines, etc., etc. Les autres personnes du groupe ne pensaient pas
    278 que cela puisse fonctionner.</p>
    279 
    280 <p>Greenblatt a ensuite recruté Russel Noftsker, la personne qui m'avait
    281 engagé, et qui avait entre-temps quitté le labo d'IA pour monter une
    282 entreprise florissante. Russel passait pour avoir des capacités pour les
    283 affaires. Il l'a démontré en disant aux autres membres du groupe : « Jetons
    284 Greenblatt, oublions son idée et créons une autre entreprise. » Poignarder
    285 dans le dos&hellip; un véritable homme d'affaires en effet. Ces personnes
    286 ont décidé de former une société nommée Symbolics. Elles chercheraient des
    287 investissements extérieurs, n'auraient aucun scrupule et feraient tout leur
    288 possible pour gagner.</p>
    289 
    290 <p>Mais Greenblatt n'a pas abandonné. Lui et les quelques personnes qui lui
    291 étaient restées loyales ont décidé de lancer tout de même <i>Lisp Machines
    292 Inc.</i> et de poursuivre leur projet initial. Et devinez quoi, ils ont
    293 réussi ! Ils ont trouvé leur premier client et ont été payés d'avance. Ils
    294 ont construit leurs machines, les ont vendues, et ont construit de plus en
    295 plus de machines. Ils ont effectivement réussi alors même qu'ils n'avaient
    296 pas l'aide de la plupart des personnes du groupe. Symbolics a eu un bon
    297 départ également ; il y avait donc deux entreprises concurrentes de machines
    298 Lisp. Quand Symbolics a vu que <abbr title="Lisp Machines Inc.">LMI</abbr>
    299 n'allait pas s'écrouler, ils ont commencé à chercher des moyens de la
    300 détruire.</p>
    301 
    302 <p>Il y a donc eu l'abandon de notre labo, suivi par une « guerre » dans notre
    303 labo. L'abandon s'est fait quand Symbolics a débauché tous les hackers, à
    304 l'exception de moi et de quelques autres qui travaillaient chez LMI à temps
    305 partiel. Puis, pour éliminer les gens qui travaillaient à temps partiel pour
    306 le MIT, ils ont invoqué une règle qui les a forcés à le quitter
    307 complètement, ce qui m'a laissé seul. Le labo d'IA était maintenant
    308 impuissant. Et le MIT a passé un arrangement absurde avec ces deux
    309 entreprises. C'était un contrat entre eux trois dans lequel chaque
    310 entreprise donnait des licences pour utiliser les sources des systèmes de
    311 machine Lisp. Ces entreprises étaient obligées de laisser le MIT utiliser
    312 leurs modifications. Mais le contrat ne contenait rien disant que le MIT
    313 avait le droit de les utiliser dans les systèmes de machine Lisp pour
    314 lesquels les deux entreprises lui avaient donné des licences. Personne
    315 n'avait imaginé que le groupe de hackers du labo d'IA disparaîtrait, mais ce
    316 fut le cas.</p>
    317 
    318 <p> Les gens de Symbolics ont trouvé une combine <a id="foot-4-rev"
    319 href="#foot-4">[4]</a>. Ils ont dit au labo : « Nous continuerons à mettre à
    320 votre disposition nos modifications du système pour votre usage, mais vous
    321 ne pourrez pas les installer dans le système de machine Lisp du MIT. À la
    322 place, nous vous donnerons accès à celui de Symbolics et vous pourrez le
    323 faire fonctionner, mais c'est tout ce que vous pourrez faire. »</p>
    324 
    325 <p>En pratique, cela voulait dire qu'ils nous obligeaient à choisir un camp :
    326 utiliser la version du MIT, ou la version de Symbolics. Quel que soit notre
    327 choix, cela déterminait à quel système iraient nos améliorations. Si nous
    328 travaillions sur la version de Symbolics pour l'améliorer, nous
    329 soutiendrions uniquement Symbolics. Si nous utilisions la version MIT du
    330 système, nos améliorations seraient à la disposition des deux entreprises,
    331 mais Symbolics verrait que nous soutenions LMI puisque nous les aidions à
    332 exister. Donc nous ne pouvions plus rester neutres.</p>
    333 
    334 <p>Jusque-là, je n'avais pris parti pour aucune des deux entreprises, bien que
    335 cela me rendît malheureux de voir ce qui était arrivé à notre communauté et
    336 au logiciel. Mais maintenant, Symbolics m'avait forcé la main. Alors, pour
    337 essayer d'aider LMI à poursuivre son activité <a id="foot-5-rev"
    338 href="#foot-5">[5]</a>, j'ai commencé à dupliquer toutes les améliorations
    339 que Symbolics avait faites au système de machine Lisp. Je réécrivais des
    340 améliorations équivalentes moi-même (c'est-à-dire avec mon propre code).</p>
    341 
    342 <p>Au bout d'un moment <a id="foot-6-rev" href="#foot-6">[6]</a>, je suis
    343 arrivé à la conclusion que cela irait mieux si je ne regardais même pas leur
    344 code. Dans les annonces de versions bêta qui donnaient les notes de version,
    345 je pouvais voir quelles allaient être les fonctionnalités et les implémenter
    346 moi-même. Au moment où ils avaient une version publiable, j'avais la mienne
    347 également.</p>
    348 
    349 <p>De cette façon, et pendant deux ans, je les ai empêchés d'écraser LMI et les
    350 deux entreprises ont continué d'exister. Mais je ne voulais pas passer des
    351 années et des années à punir quelqu'un, dans le seul but de contrer une
    352 mauvaise action. J'imagine qu'ils avaient été assez punis parce qu'ils
    353 étaient coincés avec de la concurrence qui n'allait pas laisser tomber ni
    354 disparaître <a id="foot-7-rev" href="#foot-7">[7]</a>. De toute manière, il
    355 était temps de commencer à bâtir une nouvelle communauté pour remplacer
    356 celle que leurs actions, ainsi que d'autres, avaient rayée de la carte.</p>
    357 
    358 <p>La communauté Lisp des années 70 ne se limitait pas au labo d'IA du MIT et
    359 les hackers n'étaient pas tous au MIT. La guerre lancée par Symbolics est ce
    360 qui a déclenché la disparition du groupe du MIT, mais il y avait d'autres
    361 événements en cours au même moment. Il y avait des gens qui abandonnaient la
    362 coopération ; tout cela a détruit la communauté et il n'en est pas resté
    363 grand-chose.</p>
    364 
    365 <p>Après avoir arrêté de punir Symbolics, il m'a fallu réfléchir à la suite. Il
    366 fallait que je fasse un système d'exploitation libre, c'était clair ; la
    367 seule façon de faire travailler des gens ensemble et de les faire partager
    368 était d'avoir un système d'exploitation libre.</p>
    369 
    370 <p>Au début, j'ai pensé faire un système basé sur Lisp, mais j'ai réalisé que
    371 techniquement ce n'était pas une très bonne idée. Pour avoir quelque chose
    372 comme le système de la machine Lisp, on avait besoin de microcode à but
    373 spécifique. C'est ce qui permettait d'exécuter des programmes aussi
    374 rapidement que les autres ordinateurs exécutaient les leurs, en ayant tout
    375 de même le bénéfice de la vérification de type. Sans cela, on en était
    376 réduit à quelque chose comme les compilateurs Lisp pour les autres
    377 machines. Les programmes étaient plus rapides, mais instables. Ça va bien si
    378 on exécute un programme sur un système en temps partagé ; si un programme
    379 plante, ce n'est pas un désastre, c'est quelque chose que les programmes
    380 font occasionnellement. Mais cela ne convenait pas pour l'écriture d'un
    381 système d'exploitation ; j'ai donc rejeté l'idée de prendre comme modèle le
    382 système comme la machine Lisp.</p>
    383 
    384 <p>Au lieu de ça, j'ai décidé de faire un système d'exploitation de type Unix
    385 qui aurait des implémentations Lisp fonctionnant en tant que programmes
    386 utilisateur. Le noyau ne serait pas écrit en Lisp, mais nous aurions
    387 Lisp. Le développement de ce système d'exploitation, le système
    388 d'exploitation GNU, est ce qui m'a amené à écrire GNU Emacs. Ce faisant,
    389 j'ai cherché à faire le strict minimum d'implémentation Lisp. La taille des
    390 programmes était un souci énorme.</p>
    391 
    392 <p>Il y avait des gens à cette époque, en 1985, qui avaient des machines d'un
    393 mégaoctet sans mémoire virtuelle. Ils voulaient pouvoir utiliser GNU
    394 Emacs. Cela voulait dire que je devais garder le programme aussi réduit que
    395 possible.</p>
    396 
    397 <p>Par exemple, à ce moment-là, la seule construction de boucle était
    398 <code>while</code>, et elle était extrêmement simple. Il n'existait aucun
    399 moyen de sortir de cette boucle <code>while</code> ; vous ne pouviez faire
    400 qu'un <code>catch</code> et un <code>throw</code>, ou tester une variable
    401 dans la boucle. Cela montre à quel point j'essayais de réduire le
    402 programme. Nous n'avions pas de <code>caar</code>, de <code>cadr</code>,
    403 etc. ; simplifier au maximum était l'esprit de GNU Emacs, l'esprit du Lisp
    404 d'Emacs, depuis l'origine.</p>
    405 
    406 <p>Évidemment les machines sont plus grosses maintenant et nous ne travaillons
    407 plus de cette façon. Nous utilisons <code>caar</code> et <code>cadr</code>,
    408 etc., et nous pourrions intégrer une autre construction de boucle un de ces
    409 jours. Nous avons envie de l'étendre un peu maintenant, mais nous ne voulons
    410 pas l'étendre au niveau du Common Lisp. Il m'est arrivé une fois
    411 d'implémenter le Common Lisp sur la machine Lisp, mais je n'en ai pas été
    412 vraiment satisfait. Ce que je n'aime pas trop, ce sont les arguments
    413 mots-clefs <a id="foot-8-rev" href="#foot-8">[8]</a>. Ils ne me semblent pas
    414 très « Lisp » ; je le fais de temps à autre, mais le moins possible.</p>
    415 
    416 <p>L'implication du projet GNU avec Lisp ne s'est pas arrêtée là. Plus tard
    417 vers 1995, nous pensions lancer un projet de bureau graphique. Il était
    418 clair que pour les programmes du bureau, nous voulions un langage de
    419 programmation qui permette d'en écrire une grande partie et de le rendre
    420 facilement extensible, comme l'éditeur. La question était lequel choisir.</p>
    421 
    422 <p>À ce moment-là, <abbr title="Tool Command Language">TCL</abbr> était
    423 largement mis en avant pour ce genre d'applications. J'avais une très
    424 mauvaise opinion de TCL, avant tout parce que ce n'était pas du Lisp. Cela
    425 ressemblait un peu à Lisp, mais pas au niveau sémantique, et ce n'était pas
    426 aussi propre. Puis quelqu'un m'a montré une publicité dans laquelle Sun
    427 essayait de recruter quelqu'un pour travailler sur TCL afin d'en faire le
    428 « langage d'extension standard de facto » au niveau mondial. Et j'ai pensé :
    429 « Nous devons empêcher cela. » C'est ainsi que nous avons commencé à faire
    430 de Scheme le langage d'extension standard pour GNU. Pas Common Lisp parce
    431 qu'il était trop gros. L'idée était d'avoir un interpréteur Scheme conçu
    432 pour être lié à des applications à la manière de TCL. Nous recommanderions
    433 ensuite de donner la préférence à Scheme pour les extensions à tous les
    434 programmes GNU.</p>
    435 
    436 <p>Il y a un avantage intéressant à utiliser comme langage d'extension primaire
    437 un langage aussi puissant qu'une version de Lisp. On peut implémenter
    438 d'autres langages en les traduisant en langage primaire. Si le langage
    439 primaire est TCL, on ne peut pas implémenter facilement Lisp en le
    440 traduisant en TCL. Mais si le langage primaire est Lisp, il n'est pas
    441 difficile d'implémenter d'autres choses en les traduisant. Nous sommes
    442 partis de l'idée que si chaque application extensible était compatible avec
    443 Scheme, on pourrait écrire une implémentation de TCL, Python ou Perl en
    444 Scheme, qui traduirait ce programme en Scheme. Puis on pourrait charger cela
    445 dans n'importe quelle application et la configurer dans votre langage
    446 favori, et cela marcherait également avec d'autres configurations.</p>
    447 
    448 <p>Tant que l'extensibilité des langages est faible, les utilisateurs doivent
    449 utiliser uniquement le langage qu'on leur fournit. Ce qui signifie que les
    450 gens qui préfèrent un langage particulier doivent concourir pour le choix
    451 des développeurs d'application : « S'il vous plaît, monsieur le développeur
    452 d'applications, mettez mon langage dans votre application, pas le sien. »
    453 Ensuite, les autres utilisateurs n'ont plus le choix ; quelle que soit
    454 l'application qu'ils utilisent, elle arrive avec un langage et ils sont
    455 limités à ce langage. Mais quand vous avez un langage puissant qui peut
    456 implémenter les autres en les traduisant, alors vous donnez le choix aux
    457 utilisateurs et vous éliminez la guerre des langages. Nous espérons que
    458 c'est ce que fera « Guile », notre interpréteur Scheme. Nous avions une
    459 personne l'été dernier qui travaillait à terminer un traducteur de Python
    460 vers Scheme. Je ne sais pas s'il est entièrement fini maintenant, mais si
    461 quelqu'un est intéressé par ce projet, contactez-moi. Voilà donc notre
    462 projet pour l'avenir.</p>
    463 
    464 <p>Je n'ai pas parlé de logiciel libre, mais laissez-moi vous dire rapidement
    465 un petit peu de ce que cela signifie. « Logiciel libre » ne se réfère pas au
    466 prix, cela ne veut pas dire que vous l'obtiendrez gratuitement (vous pouvez
    467 avoir à payer les copies, ou bien vous pouvez les obtenir gratuitement).<a
    468 id="TransNote3-rev" href="#TransNote3"><sup>c</sup></a> Cela signifie que
    469 vous êtes libre en tant qu'utilisateur. L'essentiel, c'est que vous êtes
    470 libre d'utiliser le programme, libre d'étudier ce qu'il fait, libre de le
    471 modifier pour l'adapter à vos besoins, libre de redistribuer des copies aux
    472 autres et libre de publier des versions améliorées ou étendues. Voilà ce que
    473 signifie « logiciel libre ». Si vous utilisez des logiciels non libres, vous
    474 perdez cette liberté capitale, donc ne le faites jamais.</p>
    475 
    476 <p>Le but du projet GNU est de faciliter aux gens le rejet des logiciels non
    477 libres qui dominent les utilisateurs, qui piétinent leur liberté, en mettant
    478 à leur disposition des logiciels libres pour les remplacer. À ceux qui n'ont
    479 pas le courage moral de rejeter les logiciels non libres quand cela signifie
    480 quelque inconvénient pratique, nous essayons de donner une alternative libre
    481 pour qu'ils puissent se libérer avec moins de complications et un sacrifice
    482 moindre en termes pratiques. Plus le sacrifice est petit, mieux c'est. Nous
    483 voulons leur faciliter la vie libre, la coopération.</p>
    484 
    485 <p>Il s'agit de la liberté de coopérer. Nous avons l'habitude de penser à la
    486 liberté et à la coopération avec la société comme si ces notions
    487 s'opposaient. Mais ici elles sont dans le même camp. Avec le logiciel libre
    488 vous êtes libre de coopérer avec d'autres personnes et vous êtes libre de
    489 vous aider vous-même. Avec le logiciel non libre, quelqu'un vous domine et
    490 garde les gens divisés. Vous n'êtes pas autorisé à partager avec eux, vous
    491 n'êtes pas libre de coopérer avec la société ni de l'aider, pas plus que
    492 vous n'êtes autorisé à vous aider vous-même. Divisés et impuissants, voilà
    493 l'état des utilisateurs de logiciel non libre.</p>
    494 
    495 <p>Nous avons produit une variété énorme de logiciels libres. Nous avons fait
    496 ce que les gens disaient que nous n'arriverions jamais à faire ; nous avons
    497 deux systèmes d'exploitation constitués de logiciel libre. Nous avons de
    498 nombreuses applications, mais évidemment nous avons encore beaucoup à
    499 faire. C'est pourquoi nous avons besoin de votre aide. J'aimerais vous
    500 demander de faire du bénévolat pour le projet GNU ; aidez-nous à développer
    501 le logiciel libre pour qu'il y ait plus d'emplois. Allez voir sur <a
    502 href="/help/help.html">gnu.org/help</a> pour trouver des idées sur la
    503 manière de nous aider. Si vous voulez commander des choses, il y a un lien
    504 pour cela sur cette page. Si vous voulez des articles sur des questions
    505 philosophiques, allez voir dans /philosophy. Si vous cherchez des logiciels
    506 libres, allez voir dans /directory, qui actuellement répertorie environ
    507 1900 logiciels (ce qui représente une fraction de tout les logiciels libres
    508 existants). S'il vous plaît, écrivez-en d'autres et offrez-les au projet
    509 GNU. Mon livre d'essais, <cite>Free Software, Free Society</cite> (Logiciel
    510 libre, société libre), est en vente et peut être acheté sur
    511 www.gnu.org&#8239;<a id="foot-9-rev" href="#foot-9" >[9]</a>. <i>Happy
    512 hacking!</i> (Codez joyeusement !)</p>
    513 <div class="column-limit"></div>
    514 
    515 <h3 class="footnote">Notes</h3>
    516 <ol>
    517 <li id="foot-1"><a href="#foot-1-rev" class="nounderline">&#8593;</a> Guy Steele a conçu la
    518 bibliothèque symétrique originale de commandes d'Emacs, puis lui et moi
    519 avons commencé à implémenter Emacs (au-dessus de TECO), mais après une
    520 longue session de développement conjointe, Steele a commencé à
    521 s'éloigner. J'ai donc terminé Emacs. D'autres, en particulier Eugene
    522 C. Cicciarelli et Mike McMahon, ont par la suite contribué de manière
    523 substantielle.</li>
    524 
    525 <li id="foot-2"><a href="#foot-2-rev" class="nounderline">&#8593;</a> Bernie Greenberg dit
    526 que l'implémentation d'Emacs de Dan Weinberg pour la machine Lisp est
    527 arrivée avant celle de Greenberg pour Multics. Je lui présente mes excuses
    528 pour cette erreur.</li>
    529 
    530 <li id="foot-3"><a href="#foot-3-rev" class="nounderline">&#8593;</a> Le plan de Greenblatt,
    531 d'après ce que j'ai compris, était d'engager les gens du laboratoire à temps
    532 partiel afin qu'ils puissent continuer à travailler au labo d'IA. Au lieu de
    533 cela, Symbolics les a engagés à temps plein, et donc ils ont arrêté de
    534 travailler au MIT.</li>
    535 
    536 <li id="foot-4"><a href="#foot-4-rev" class="nounderline">&#8593;</a> L'arrière-pensée de ce
    537 plan, que je n'ai pas explicitée dans le discours, était que durant cette
    538 période initiale les ex-hackers du labo d'IA, que ce soit chez Symbolics ou
    539 chez LMI, continuent à apporter leurs modifications au système pour machine
    540 Lisp du MIT, bien que le contrat ne l'exige pas. Le plan de Symbolics était
    541 de briser cette coopération unilatéralement.</li>
    542 
    543 <li id="foot-5"><a href="#foot-5-rev" class="nounderline">&#8593;</a> Ce n'est pas que le
    544 sort de LMI m'intéressait particulièrement, mais plutôt que je ne voulais
    545 pas laisser Symbolics gagner grâce à son agression contre le labo d'IA.</li>
    546 
    547 <li id="foot-6"><a href="#foot-6-rev" class="nounderline">&#8593;</a> Cette phrase a été mal
    548 interprétée ; je n'aurais, paraît-il, jamais, à aucun moment jeté un œil sur
    549 le code de Symbolics. En réalité, cette phrase dit que je l'ai bel et bien
    550 regardé, au début. Le code source de Symbolics était disponible au MIT où
    551 j'étais en droit de le lire, et au début c'est ainsi que je me suis rendu
    552 compte de leurs modifications.
    553 
    554 <p>Mais cela signifiait que je devais faire un effort particulier pour résoudre
    555 chaque problème différemment, de manière à éviter de copier le code de
    556 Symbolics. Après un moment, j'ai conclu que c'était mieux de ne pas le
    557 regarder du tout. De cette façon, je pouvais écrire le code de la meilleure
    558 façon, sans me soucier de ce qui était dans le code de Symbolics.</p></li>
    559 
    560 <li id="foot-7"><a href="#foot-7-rev" class="nounderline">&#8593;</a> Symbolics s'est plaint
    561 au MIT que mon travail, en contrant leur plan, avait coûté à Symbolics un
    562 million de dollars.</li>
    563 
    564 <li id="foot-8"><a href="#foot-8-rev" class="nounderline">&#8593;</a> Cela ne me dérange pas
    565 si une mégafonction très complexe prend des arguments mots-clés. Ce qui me
    566 dérange, c'est de les mettre dans des fonctions simples et basiques comme
    567 « member ».</li>
    568 
    569 <li id="foot-9"> <a href="#foot-9-rev" class="nounderline">&#8593;</a>En 2021, on peut
    570 acheter ce livre sur <a
    571 href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition">GNU
    572 Press</a>.</li>
    573 </ol>
    574 </div>
    575 
    576 <div class="translators-notes">
    577 
    578 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
    579 <hr /><b>Notes de traduction</b><ol id="translator-notes-alpha">
    580 <li><a id="TransNote1" href="#TransNote1-rev"
    581 class="nounderline">&#8593;</a>
    582 <i>Incompatible Timesharing System</i> (ITS) : « système à temps partagé
    583 incompatible », conçu par l'équipe du laboratoire d'intelligence
    584 artificielle et nommé en opposition avec CTSS <i>(Compatible Time Sharing
    585 System)</i>, système d'exploitation utilisé précédemment au MIT.</li>
    586 <li><a id="TransNote2" href="#TransNote2-rev"
    587 class="nounderline">&#8593;</a>
    588 <i>Garbage collection</i> : mise à jour de tables d'allocation de mémoire
    589 (d'après <cite>Le Jargon Français</cite>).</li>
    590 <li><a id="TransNote3" href="#TransNote3-rev"
    591 class="nounderline">&#8593;</a>
    592 En anglais, le mot <i>free</i> veut dire libre, mais aussi gratuit, d'où la
    593 confusion possible.</li>
    594 </ol></div>
    595 </div>
    596 
    597 <!-- for id="content", starts in the include above -->
    598 <!--#include virtual="/server/footer.fr.html" -->
    599 <div id="footer" role="contentinfo">
    600 <div class="unprintable">
    601 
    602 <p>Veuillez envoyer les requêtes concernant la FSF et GNU à &lt;<a
    603 href="mailto:gnu@gnu.org">gnu@gnu.org</a>&gt;. Il existe aussi <a
    604 href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens
    605 orphelins et autres corrections ou suggestions peuvent être signalés à
    606 &lt;<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>&gt;.</p>
    607 
    608 <p>
    609 <!-- TRANSLATORS: Ignore the original text in this paragraph,
    610         replace it with the translation of these two:
    611 
    612         We work hard and do our best to provide accurate, good quality
    613         translations.  However, we are not exempt from imperfection.
    614         Please send your comments and general suggestions in this regard
    615         to <a href="mailto:web-translators@gnu.org">
    616 
    617         &lt;web-translators@gnu.org&gt;</a>.</p>
    618 
    619         <p>For information on coordinating and contributing translations of
    620         our web pages, see <a
    621         href="/server/standards/README.translations.html">Translations
    622         README</a>. -->
    623 Merci d'adresser vos commentaires sur les pages en français à &lt;<a
    624 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>&gt;, et sur les
    625 traductions en général à &lt;<a
    626 href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>&gt;. Si
    627 vous souhaitez y contribuer, vous trouverez dans le <a
    628 href="/server/standards/README.translations.html">guide de traduction</a>
    629 les infos nécessaires.</p>
    630 </div>
    631 
    632 <!-- Regarding copyright, in general, standalone pages (as opposed to
    633      files generated as part of manuals) on the GNU web server should
    634      be under CC BY-ND 4.0.  Please do NOT change or remove this
    635      without talking with the webmasters or licensing team first.
    636      Please make sure the copyright date is consistent with the
    637      document.  For web pages, it is ok to list just the latest year the
    638      document was modified, or published.
    639      
    640      If you wish to list earlier years, that is ok too.
    641      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    642      years, as long as each year in the range is in fact a copyrightable
    643      year, i.e., a year in which the document was published (including
    644      being publicly visible on the web or in a revision control system).
    645      
    646      There is more detail about copyright years in the GNU Maintainers
    647      Information document, www.gnu.org/prep/maintain. -->
    648 <p>Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p>
    649 
    650 <p>Cette page peut être utilisée suivant les conditions de la licence <a
    651 rel="license"
    652 href="http://creativecommons.org/licenses/by-nd/4.0/deed.fr">Creative
    653 Commons attribution, pas de modification, 4.0 internationale (CC BY-ND
    654 4.0)</a>.</p>
    655 
    656 <!--#include virtual="/server/bottom-notes.fr.html" -->
    657 <div class="translators-credits">
    658 
    659 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
    660 Traduction : Marc de Maillard.<br /> Révision : <a
    661 href="mailto:trad-gnu&#64;april.org">trad-gnu&#64;april.org</a></div>
    662 
    663 <p class="unprintable"><!-- timestamp start -->
    664 Dernière mise à jour :
    665 
    666 $Date: 2022/05/04 15:02:13 $
    667 
    668 <!-- timestamp end -->
    669 </p>
    670 </div>
    671 </div>
    672 <!-- for class="inner", starts in the banner include -->
    673 </body>
    674 </html>