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 < >. 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… 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 <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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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">↑</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 à <<a 603 href="mailto:gnu@gnu.org">gnu@gnu.org</a>>. 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 <<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>>.</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 <web-translators@gnu.org></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 à <<a 624 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>>, et sur les 625 traductions en général à <<a 626 href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>>. 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 © 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@april.org">trad-gnu@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>