stallman-kth - en to fr translation catalogue (167 entries)

note: type: Content of: <title>
en: RMS lecture at KTH (Sweden), 1986 - GNU Project - Free Software Foundation
fr: Conférence de RMS au KTH (Suède, 1986) - Projet GNU - Free Software Foundation

note: type: Content of: <div><h2>
en: RMS lecture at KTH (Sweden), 1986
fr: Conférence de RMS au KTH (Suède, 1986)

note: type: Content of: <div><div><p>
en: Transcript of Richard Stallman's speech at the <i>Kungliga Tekniska H&ouml;gskolan</i> (Royal Institute of Technology) in Stockholm, Sweden, arranged by the student society <i>Datorf&ouml;reningen Stacken</i> on 30&nbsp;October&nbsp;1986.
fr: Transcription d'une conférence de Richard Stallman au <i>Kungliga Tekniska Högskolan</i> (Institiut royal de technologie), à Stockholm (Suède), organisée par l'association des étudiants, <i>Datorföreningen Stacken</i>, le 30 octobre 1986.

note: type: Content of: <div><div><p>
en: <i>Note: This is a slightly edited transcript of the talk.  As such it contains false starts, as well as locutions that are natural in spoken English but look strange in print.  It is not clear how to correct them to written English style without doing violence to the original speech.</i>
fr: <i>[Note : Ce texte est une transcription légèrement révisée de la conférence. La version originale contient des faux départs ainsi que des locutions naturelles en anglais parlé mais qui paraissent bizarres dans une publication. Il n'est pas évident de la transformer en anglais écrit correct sans faire violence au discours original.]</i>

note: type: Content of: <div><p>
en: <b>Rms:</b> It seems that there are three things that people would like me to talk about.  On the one hand I thought that the best thing to talk about here for a club of hackers, was what it was like at the <abbr title="Massachusetts Institute of Technology">MIT</abbr> in the old days.  What made the Artificial Intelligence Lab such a special place.  But people tell me also that since these are totally different people from the ones who were at the conference Monday and Tuesday that I ought to talk about what's going on in the GNU Project and that I should talk about why software and information can not be owned, which means three talks in all, and since two of those subjects each took an hour it means we're in for a rather long time.  So I had the idea that perhaps I could split it in to three parts, and people could go outside for the parts they are not interested in, and that then when I come to the end of a part I can say it's the end and people can go out and I can send Jan Rynning out to bring in the other people.
fr: <b>RMS :</b> Il semble qu'il y ait trois choses dont les gens voudraient que je parle. Tout d'abord, j'ai pensé que le meilleur sujet ici pour un club de hackers était de dire comment ça se passait au <abbr title="Massachusetts Institute of Technology">MIT</abbr> autrefois, ce qui faisait du labo d'intelligence artificielle (labo d'IA) un endroit si particulier. Mais d'un autre côté on m'a suggéré, étant donné que les personnes qui sont ici ne sont pas celles qui étaient aux conférences de lundi et mardi, de raconter ce qui se passe dans le projet GNU, et de dire pourquoi le logiciel et l'information ne peuvent pas être considérés comme des propriétés. Cela fait un total de trois conférences. Et puisque deux de ces sujets prennent chacun une heure, nous y sommes pour un bon moment. Aussi je me suis dit que je pourrais éventuellement diviser la conférence en trois parties. Comme ça les gens pourraient sortir quand ça ne les intéresse pas. Une fois arrivé à la fin d'un sujet, je peux signaler que c'est fini, les gens peuvent sortir et je peux envoyer Jan Rynning dehors pour appeler les autres.

note: type: Content of: <div><p>
en: <span>[Someone else says: &ldquo;<i>Janne, han trenger ingen mike.</i>&rdquo; (Translation: &ldquo;Janne, he doesn't need a mike.&rdquo;)]</span>
fr: <span>[Quelqu'un : « <i>Janne, han trenger ingen mike.</i> » (Janne, il n'a pas besoin de micro.)]</span>

note: type: Content of: <div><p>
en: Jan, are you prepared to go running out to fetch the other people?
fr: Jan, tu es prêt à courir chercher les autres ?

note: type: Content of: <div><p>
en: <b>Jmr:</b> I am looking for a microphone, and someone tells me it is inside this locked box.
fr: <b>JMR :</b> Je suis à la recherche d'un micro et quelqu'un me dit qu'il est dans ce casier fermé à clé.

note: type: Content of: <div><p>
en: <b>Rms:</b> Now in the old days at the AI lab we would have taken a sledgehammer and cracked it open, and the broken door would be a lesson to whoever had dared to lock up something that people needed to use.  Luckily however I used to study Bulgarian singing, so I have no trouble managing without a microphone.
fr: <b>RMS :</b> Autrefois au labo d'IA, on l'aurait ouvert à coup de masse et la porte défoncée aurait servi de leçon à celui qui avait osé mettre sous clé quelque chose dont tout le monde avait besoin. Mais heureusement j'ai étudié le chant bulgare, donc je peux très bien me débrouiller sans micro.

note: type: Content of: <div><p>
en: Anyway, should I set up this system to notify you about the parts of the talk, or do you just like to sit through all of it? <span>[Answer: Yeaaah]</span>
fr: Bon, est-ce que je dois vous signaler les différentes parties de la conférence ou vous avez juste envie de la suivre jusqu'au bout ? <span>[Réponse : Yeaaah !]</span>

note: type: Content of: <div><p>
en: When I started programming, it was 1969, and I did it in an IBM laboratory in New York.  After that I went to a school with a computer science department that was probably like most of them.  There were some professors that were in charge of what was supposed to be done, and there were people who decided who could use what.  There was a shortage of terminals for most people, but a lot of the professors had terminals of their own in their offices, which was wasteful, but typical of their attitude. When I visited the Artificial Intelligence lab at MIT I found a spirit that was refreshingly different from that.  For example: there, the terminals were thought of as belonging to everyone, and professors locked them up in their offices on pain of finding their doors broken down.  I was actually shown a cart with a big block of iron on it, that had been used to break down the door of one professors office, when he had the gall to lock up a terminal.  There were very few terminals in those days, there was probably something like five display terminals for the system, so if one of them was locked up, it was a considerable disaster.
fr: Quand j'ai commencé à programmer, c'était en 1969, dans un laboratoire d'IBM à New York. Ensuite, je suis allé dans une école qui avait un département d'informatique probablement semblable à la plupart des autres. Il y avait quelques professeurs responsables de ce qu'on était censé y faire et il y avait des gens qui décidaient de qui pouvait se servir de quoi. Il y avait pénurie de terminaux pour la plupart d'entre nous. Or pas mal de professeurs en avaient un personnellement dans leur bureau, ce qui était du gaspillage, mais typique de leur attitude. Quand j'ai visité le labo d'intelligence artificielle au MIT, j'ai trouvé une atmosphère qui était une bouffée d'air pur par rapport à ça. Par exemple : là, on considérait que les terminaux étaient à tout le monde et les professeurs qui les enfermaient à clef dans leurs bureaux couraient le risque de voir leurs portes défoncées. On m'a montré une fois un chariot avec un gros bloc de fer dessus. C'était celui qui avait été utilisé pour défoncer la porte du bureau d'un des professeurs quand il avait eu le culot d'y enfermer un terminal. Il y en avait très peu à cette époque. Il y avait probablement quelque chose comme cinq terminaux à écran pour tout le système ; donc, si l'un d'entre eux était sous clé c'était une vraie catastrophe.

note: type: Content of: <div><p>
en: In the years that followed I was inspired by that ideas, and many times I would climb over ceilings or underneath floors to unlock rooms that had machines in them that people needed to use, and I would usually leave behind a note explaining to the people that they shouldn't be so selfish as to lock the door.  The people who locked the door were basically considering only themselves.  They had a reason of course, there was something they thought might get stolen and they wanted to lock it up, but they didn't care about the other people they were affecting by locking up other things in the same room.  Almost every time this happened, once I brought it to their attention, that it was not up to them alone whether that room should be locked, they were able to find a compromise solution: some other place to put the things they were worried about, a desk they could lock, another little room.  But the point is that people usually don't bother to think about that.  They have the idea: &ldquo;This room is Mine, I can lock it, to hell with everyone else,&rdquo; and that is exactly the spirit that we must teach them not to have.
fr: Dans les années qui ont suivi, j'ai été guidé par ces idées et il m'est souvent arrivé de crapahuter au-dessus des plafonds ou sous les planchers pour déverrouiller les salles qui contenaient des machines dont les gens avaient besoin. Et je laissais généralement un mot qui expliquait aux gens qu'il ne fallait pas fermer la porte à clé de manière aussi égoïste. Les gens qui fermaient la porte à clé, au fond, ne pensaient qu'à eux. Ils avaient une raison de le faire, bien sûr. Il y avait un truc qui, pensaient-ils, pouvait tenter les voleurs, et ils voulaient l'enfermer à clef. Mais ils ne s'occupaient pas des autres, que cela gênait de ne pas avoir accès au reste du matériel qui était dans la même salle. Presque à chaque fois que cela s'est produit – après avoir porté à leur attention qu'il ne leur appartenait pas de décider du verrouillage de la porte – ils étaient capables de trouver un compromis. Mais le problème, c'est que les gens ne prennent pas la peine d'y penser. Ils se disent : « Cette salle est à moi, je peux la fermer à clé, que les autres aillent au diable ! » C'est précisément cette attitude que nous devons leur désapprendre.

note: type: Content of: <div><p>
en: But this spirit of unlocking doors wasn't an isolated thing, it was part of an entire way of life.  The hackers at the AI lab were really enthusiastic about writing good programs, and interesting programs.  And it was because they were so eager to get more work done, that they wouldn't put up with having the terminals locked up, or lots of other things that people could do to obstruct useful work.  The differences between people with high morale who really care about what they're trying to do, and people who think of it as just a job.  If it's just a job, who cares if the people who hired you are so stupid they make you sit and wait, it's their time, their money but not much gets done in a place like that, and it's no fun to be in a place like that.
fr: Mais cette habitude de déverrouiller les portes n'était pas un comportement isolé, il faisait partie d'une façon de vivre à part entière. Les hackers du labo d'IA étaient vraiment passionnés par l'écriture de bons programmes, de programmes intéressants. Ils étaient à ce point impatients de faire avancer le travail qu'ils ne supportaient pas la mise sous clé des terminaux, ni un tas d'autres comportements qui faisaient obstacle au travail utile. C'est la différence entre des personnes très motivées qui se préoccupent vraiment de ce qu'elles sont en train de faire et des personnes qui prennent ça juste pour un boulot. Si c'est juste un boulot, qu'importe si les gens qui vous ont embauché sont assez stupides pour vous obliger à attendre sans rien faire. C'est leur temps, leur argent, mais pas grand-chose ne se fait dans un endroit comme ça ; ce n'est pas drôle d'être dans un endroit comme ça.

note: type: Content of: <div><p>
en: Another thing that we didn't have at the AI lab was file protection.  There was no security at all on the computer.  And we very consciously wanted it that way.  The hackers who wrote the Incompatible Timesharing System decided that file protection was usually used by a self-styled system manager to get power over everyone else.  They didn't want anyone to be able to get power over them that way, so they didn't implement that kind of a feature.  The result was, that whenever something in the system was broken, you could always fix it.  You never had to sit there in frustration because there was NO WAY, because you knew exactly what's wrong, and somebody had decided they didn't trust you to do it.  You don't have to give up and go home, waiting for someone to come in in the morning and fix the system when you know ten times as well as he does what needs to be done.
fr: Une autre chose que nous n'avions pas au labo d'IA, c'était la protection des fichiers. Il n'y avait aucune sécurité sur l'ordinateur, et c'était une décision mûrement réfléchie. Les hackers qui ont écrit ITS<a id="TransNote1-rev" href="#TransNote1"><sup>1</sup></a> ont jugé que la protection des fichiers n'était qu'un moyen comme un autre, pour un administrateur système autoproclamé, d'avoir du pouvoir sur tout le monde. Ils ont refusé que quiconque puisse avoir du pouvoir sur eux de cette façon. Aussi, ils n'ont pas implémenté ce genre de dispositif. Résultat, chaque fois que quelque chose était cassé dans le système, vous pouviez toujours le réparer. Vous n'étiez jamais obligé de rester planté là, frustré, parce qu'il n'y avait RIEN À FAIRE, alors que vous saviez parfaitement quoi faire mais que quelqu'un avait décidé de ne pas vous faire confiance. Vous n'étiez pas obligé de laisser tomber et de rentrer à la maison en attendant le lendemain matin que quelqu'un vienne réparer le système, alors que vous saviez dix fois mieux que lui ce qu'il fallait faire.

note: type: Content of: <div><p>
en: And we didn't let any professors or bosses decide what work was going to be done either, because our job was to improve the system! We talked to the users of course; if you don't do that you can't tell what's needed.  But after doing that, we were the ones best able to see what kind of improvements were feasible, and we were always talking to each other about how we'd like to see the system changed, and what sort of neat ideas we'd seen in other systems and might be able to use.  So the result is that we had a smoothly functioning anarchy, and after my experience there, I'm convinced that that is the best way for people to live.
fr: Et nous ne laissions pas non plus de professeur, ni de patron, décider quel devait être notre prochain travail, parce que notre travail c'était d'améliorer le système ! Nous parlions aux utilisateurs évidemment ; si vous ne faites pas ça, vous ne pouvez pas savoir ce dont ils ont besoin. Mais ensuite, nous étions les seuls, les plus aptes à savoir quelles sortes d'améliorations étaient possibles. Et nous discutions toujours entre nous pour savoir comment nous voulions voir le système évoluer, quelles idées astucieuses nous avions vues dans d'autres systèmes et pourrions utiliser. Ainsi au final, nous avions une anarchie qui fonctionnait sans à-coups ; d'après mon expérience là-bas, je suis convaincu que c'est la meilleure façon de vivre.

note: type: Content of: <div><p>
en: Unfortunately the AI lab in that form was destroyed.  For many years we were afraid the AI lab would be destroyed by another lab at MIT, the Lab for Computer Science, whose director was a sort of empire builder type, doing everything he could to get himself promoted within MIT, and make his organization bigger, and he kept trying to cause the AI lab to be made a part of his lab, and nobody wanted to do things his way because he believed that people should obey orders and things like that.
fr: Malheureusement le labo d'IA, tel qu'il était à cette époque, a été détruit. Pendant des années nous avions craint qu'il ne soit détruit par un autre labo du MIT, le labo d'informatique, dont le directeur était le genre de type à construire un empire. Il faisait tout ce qu'il pouvait pour avoir une promotion au MIT et faire grossir son organisation. Il essayait continuellement d'annexer le labo d'IA. Personne ne voulait faire les choses à sa manière parce qu'il croyait que les gens devaient obéir aux ordres et d'autres choses dans le style.

note: type: Content of: <div><p>
en: But that danger we managed to defend against, only to be destroyed by something we had never anticipated, and that was commercialism.  Around the early 80's the hackers suddenly found that there was now commercial interest in what they were doing.  It was possible to get rich by working at a private company.  All that was necessary was to stop sharing their work with the rest of the world and destroy the MIT-AI lab, and this is what they did despite all the efforts I could make to prevent them.
fr: Mais ce danger, nous avons réussi à le repousser pour être en fin de compte détruits par une chose que nous n'avions pas prévue : l'esprit commercial. Vers le début des années 80, les hackers ont soudain compris que ce qu'ils faisaient avait désormais un intérêt commercial. Il était possible de devenir riche en travaillant pour une société privée. Il leur suffisait de cesser de partager leur travail avec le reste du monde et de détruire le labo d'IA du MIT. Et c'est ce qu'ils ont fait, malgré tous mes efforts pour les en empêcher.

note: type: Content of: <div><p>
en: Essentially all the competent programmers except for me, at the AI lab were hired away, and this caused more than a momentary change, it caused a permanent transformation because it broke the continuity of the culture of hackers.  New hackers were always attracted by the old hackers; there were the most fun computers and the people doing the most interesting things, and also a spirit which was a great deal of fun to be part of.  Once these things were gone, there is nothing to recommend the place to anyone new, so new people stopped arriving.  There was no-one they could be inspired by, no-one that they could learn those traditions from.  In addition no-one to learn how to do good programming from.  With just a bunch of professors and graduate students, who really don't know how to make a program work, you can't learn to make good programs work.  So the MIT AI lab that I loved is gone and after a couple of years of fighting against the people who did it to try to punish them for it I decided that I should dedicate my self to try to create a new community with that spirit.
fr: Presque tous les programmeurs compétents du labo d'IA, excepté moi, ont été embauchés ailleurs et cela a causé bien plus qu'un changement provisoire. Cela a causé une métamorphose définitive, parce que ça a brisé la continuité de la culture des hackers. Les nouveaux hackers sont toujours attirés par les anciens. Il y avait là les ordinateurs les plus amusants et les gens qui faisaient les choses les plus intéressantes avec. Et aussi une atmosphère qu'il était très amusant de partager. Une fois cela disparu, il ne restait rien pour attirer les nouveaux venus. Ils ont donc cessé d'arriver. Il n'y avait plus personne pour les inspirer, personne pour leur enseigner les traditions. Qui plus est, personne de qui apprendre à bien programmer. Avec juste un tas de professeurs et de doctorants qui ne savent pas vraiment comment faire marcher un programme, on ne peut pas apprendre à faire fonctionner de bons programmes. Ainsi le labo d'IA du MIT que j'aimais a disparu. Et après deux années passées à me battre contre les gens qui avaient fait ça, pour essayer de les punir, j'ai décidé de me consacrer à créer une nouvelle communauté ayant cet état d'esprit.

note: type: Content of: <div><p>
en: But one of the problems I had to face was the problem of <a href="/philosophy/categories.html#ProprietarySoftware">proprietary software</a>.  For example one thing that happened at the lab, after the hackers left, was that the machines and the software that we had developed could no longer be maintained.  The software of course worked, and it continued to work if nobody changed it, but the machines did not.  The machines would break and there would be no-one who could fix them and eventually they would be thrown out. In the old days, yes we had service contracts for the machines, but it was essentially a joke.  That was a way of getting parts after the expert hackers from the AI lab fixed the problem.  Because if you let the field-service person fix it it would take them days, and you didn't want to do that, you wanted it to work.  So, the people who knew how to do those things would just go and fix it quickly, and since they were ten times as competent as any field service person, they could do a much better job.  And then they would have the ruined boards, they would just leave them there and tell the field service person &ldquo;take these back and bring us some new ones.&rdquo;
fr: Mais un des problèmes auxquels j'ai dû faire face était celui des logiciels <a href="/philosophy/categories.html#ProprietarySoftware">propriétaires</a>.<a id="TransNote2-rev" href="#TransNote2"><sup>2</sup></a> Par exemple, ce qui s'est passé au labo une fois les hackers partis, c'est que les machines et les logiciels que nous avions développés ne pouvaient plus être maintenus. Bien sûr Les logiciels fonctionnaient et continuaient de fonctionner si personne ne les modifiait, mais pas les machines. Les machines tombaient en panne et personne ne pouvait les réparer, et ensuite on les mettait au rebut. Autrefois, il y avait bien des contrats d'entretien pour les machines, mais pour l'essentiel c'était du bidon. C'était une manière d'obtenir des pièces détachées une fois que les hackers experts du labo d'IA avaient réparé. Parce que si on avait attendu que les techniciens de maintenance le fassent, ça aurait pris des jours. Et on ne voulait pas de ça. On voulait que ça marche. Aussi, les gens qui savaient faire ce genre de chose réparaient très vite, puisqu'ils étaient dix fois plus compétents que n'importe quel technicien. Ils pouvaient faire un bien meilleur travail. Et une fois qu'ils avaient démonté les circuits défectueux, il leur suffisait de les mettre de côté et d'appeler le technicien : « Reprenez-les et ramenez-nous-en des neufs. »

note: type: Content of: <div><p>
en: In the real old days our hackers used to modify the machines that came from Digital also.  For example, they built paging-boxes to put on the PDP-10's.  Nowadays I think there are some people here [in Stockholm] who do such things too, but it was a pretty unusual thing in those days.  And the really old days, the beginning of the 1960's people used to modify computers adding all sorts of new instructions and new fancy timesharing features, so that the PDP-1 at MIT by the time it was retired in the mid-seventies had something like twice as many instructions as it had when it was delivered by Digital in the early sixties, and it had special hardware scheduler assisting features and strange memory-mapping features making it possible to assign individual hardware devices to particular timesharing jobs and lots of things that I hardly really know about.  I think they also built in some kind of extended addressing modes they added index registers and indirect addressing, and they turned it essentially from a weak machine into a semi-reasonable one.
fr: À la belle époque, nos hackers avaient également l'habitude de modifier les machines qui venaient de Digital. Par exemple, ils ont construit des boîtes de radiomessagerie <i>[paging]</i> pour les PDP-10. De nos jours, je pense qu'il y en a certains ici [à Stockholm] qui le font aussi. Mais ce n'était pas courant en ce temps-là. Et encore avant, au début des années 60, les gens modifiaient les ordinateurs en ajoutant toutes sortes de nouvelles instructions et de nouvelles fonctionnalités sophistiquées en temps partagé. De sorte que le PDP-1 du MIT, avant qu'il ne parte à la retraite dans les années 70, avait quelque chose comme deux fois plus d'instructions qu'il n'en avait lors de sa livraison par Digital au début des années 60. Il avait des fonctionnalités spéciales complétant l'ordonnanceur <i>[scheduler]</i> matériel, d'étranges fonctionnalités de mappage de la mémoire qui permettaient d'affecter individuellement chaque périphérique matériel à une tâche en temps partagé, et des tas d'autres trucs dont j'ai à peine entendu parler. Je pense qu'ils ont également rajouté une sorte de mode d'adressage étendu, des registres d'indexation ainsi que l'adressage indirect ; en somme ils ont transformé une toute petite machine en une machine à peu près correcte.

note: type: Content of: <div><p>
en: I guess it is one of the disadvantages of VLSI that it's no longer so feasible to add instructions to your machines.
fr: Je suppose que c'est l'un des inconvénients de la <abbr title="Very Large Scale Integration">VLSI</abbr> (intégration à très grande échelle) : il n'est plus vraiment pratique d'ajouter des instructions sur vos machines.

note: type: Content of: <div><p>
en: The PDP-1 also had a very interesting feature, which is that it was possible to write interesting programs in very few instructions.  Fewer than any other machine since then.  I believe for example that the famous display hack &ldquo;munching squares&rdquo; which made squares that get bigger and break up into lots of smaller squares which gets bigger and break up into smaller squares.  That was written in something like five instructions on the PDP-1.  And many other beautiful display programs could be written in few instructions.
fr: Le PDP-1 avait une caractéristique très intéressante : il était possible d'écrire des programmes intéressants avec un très petit nombre d'instructions, moins qu'aucune autre machine construite depuis. Je crois par exemple que le célèbre hack d'affichage <i>munching squares</i> (lit. : grignotage de carrés) – qui traçait des carrés qui grandissaient puis se brisaient en une multitude de petits carrés qui devenaient plus grands et se brisaient en petits carrés – cela a été écrit en quelque chose comme cinq instructions sur le PDP-1. Et beaucoup d'autres beaux programmes d'affichage ont pu être écrits ainsi avec un très petit nombre d'instructions.

note: type: Content of: <div><p>
en: So, that was the AI lab.  But what was the culture of hackers like aside from their anarchism? In the days of the PDP-1 only one person could use the machine, at the beginning at least.  Several years later they wrote a timesharing system, and they added lots of hardware for it.  But in the beginning you just had to sign up for some time.  Now of course the professors and the students working on official projects would always come in during the day.  So, the people who wanted to get lots of time would sign up for time at night when there were less competition, and this created the custom of hackers working at night.  Even when there was timesharing it would still be easier to get time, you could get more cycles at night, because there were fewer users.  So people who wanted to get lots of work done, would still come in at night.  But by then it began to be something else because you weren't alone, there were a few other hackers there too, and so it became a social phenomenon.  During the daytime if you came in, you could expect to find professors and students who didn't really love the machine, whereas if during the night you came in you would find hackers.  Therefore hackers came in at night to be with their culture.  And they developed other traditions such as getting Chinese food at three in the morning.  And I remember many sunrises seen from a car coming back from Chinatown.  It was actually a very beautiful thing to see a sunrise, cause' that's such a calm time of day.  It's a wonderful time of day to get ready to go to bed.  It's so nice to walk home with the light just brightening and the birds starting to chirp, you can get a real feeling of gentle satisfaction, of tranquility about the work that you have done that night.
fr: Voilà donc ce qu'était le labo d'IA. Mais c'était quoi la culture des hackers, hormis leur anarchisme ? Au temps du PDP-1, la machine ne pouvait être utilisée que par une personne à la fois, du moins au début. Plusieurs années après, ils ont écrit un système fonctionnant en temps partagé et ils ont rajouté pas mal de matériel pour ça. Mais au début, on pouvait seulement s'inscrire pour une période donnée. Naturellement les professeurs et les étudiants qui travaillaient sur des projets officiels venaient toujours pendant la journée. Alors, les gens qui voulaient avoir plus de temps s'inscrivaient pour la nuit quand il y avait moins d'affluence. Voilà l'origine de la coutume hacker de travailler la nuit. Même lorsqu'il y eut le temps partagé, il était toujours plus facile d'avoir du temps la nuit, on pouvait avoir plus de cycles parce qu'il y avait peu d'utilisateurs. Aussi ceux qui voulaient abattre beaucoup de travail continuaient à venir la nuit. Mais ça a commencé à changer parce qu'on n'était pas seul, il y avait là quelques autres hackers ; ainsi c'est devenu un phénomène social. Si vous entriez pendant la journée, vous pouviez vous attendre à trouver des professeurs et des étudiants qui n'étaient pas des fans de la machine, alors que si vous veniez la nuit vous trouviez des hackers. Par conséquent, les hackers sont venus la nuit pour partager leur culture. Et ils ont développé d'autres traditions, comme d'aller se ravitailler au Chinois à trois heures du matin. Je me rappelle avoir vu beaucoup de levers de soleil alors que je revenais en voiture de Chinatown. C'était tellement beau de voir le lever de soleil, c'est une heure tellement calme de la journée. C'est une heure merveilleuse pour se préparer à aller dormir. Il est si agréable de rentrer à pied chez soi dans une lumière qui commence juste à poindre avec les oiseaux qui se mettent à gazouiller. On a une sensation de douce satisfaction, de tranquillité, en pensant au travail accompli pendant la nuit.

note: type: Content of: <div><p>
en: Another tradition that we began was that of having places to sleep at the lab.  Ever since I first was there, there was always at least one bed at the lab.  And I may have done a little bit more living at the lab than most people because every year of two for some reason or other I'd have no apartment and I would spend a few months living at the lab.  And I've always found it very comfortable, as well as nice and cool in the summer.  But it was not at all uncommon to find people falling asleep at the lab, again because of their enthusiasm; you stay up as long as you possibly can hacking, because you just don't want to stop.  And then when you're completely exhausted, you climb over to the nearest soft horizontal surface.  A very informal atmosphere.
fr: Une autre tradition que nous avons initiée était celle d'avoir des endroits pour dormir au labo. Depuis le jour où j'y suis entré, il y a toujours eu au moins un lit. Et j'ai probablement habité au labo un peu plus longtemps que la plupart des autres car, tous les ans ou tous les deux ans, pour une raison ou une autre, je n'avais pas d'appartement et j'y habitais quelques mois. Et j'ai toujours trouvé que c'était très confortable, sans compter que c'était sympa et frais en été. Mais il n'était pas rare du tout de tomber sur des gens qui s'étaient endormis au labo, toujours à cause de leur enthousiasme : vous restez le plus longtemps possible à hacker parce que vous ne voulez pas vous arrêter, et une fois que vous êtes complètement épuisé, vous escaladez la surface horizontale souple la plus proche. Une ambiance vraiment sans cérémonie.

note: type: Content of: <div><p>
en: But when the hackers all left the lab this caused a demographic change, because the professors and the students who didn't really love the machine were just as numerous as before, so they were now the dominant party, and they were very scared.  Without hackers to maintain the system, they said, &ldquo;we're going to have a disaster, we must have commercial software,&rdquo; and they said &ldquo;we can expect the company to maintain it.&rdquo; It proved that they were utterly wrong, but that's what they did.
fr: Mais quand les hackers sont tous partis du labo, ça a causé un changement démographique parce que les professeurs et les étudiants qui n'étaient pas vraiment des fans de la machine étaient aussi nombreux qu'auparavant ; maintenant ils représentaient la majorité. Et ils ont vraiment eu peur. Sans hacker pour entretenir le système, ils se sont dit : « Ça va être un désastre, il nous faut du logiciel commercial. Comme ça, nous pourrons compter sur la maintenance de l'entreprise. » La suite prouva qu'ils avaient absolument tort, mais c'est ce qu'ils ont fait.

note: type: Content of: <div><p>
en: That was exactly when a new KL-10 system was supposed to arrive, and the question was, would it run the Incompatible Timesharing System or would it run Digital's Twenex system.  Once the hackers were gone who probably would have supported using ITS, the academic types chose to run the commercial software, and this had several immediate effects.  Some of them weren't actually so immediate but they followed inevitably as anyone who thought about it would see.
fr: C'était exactement au moment où ils devaient recevoir un nouvel ordinateur, le KL-10, et la question s'est alors posée : faut-il qu'il fonctionne avec ITS ou bien Twenex, le système de Digital ? Une fois les hackers partis – ils auraient sans doute poussé à utiliser le leur – les universitaires ont choisi d'utiliser le logiciel commercial et cela eut plusieurs effets immédiats. Certains n'ont pas été vraiment immédiats, mais ils en ont découlé inévitablement comme l'aurait prévu n'importe qui avec un peu de réflexion.

note: type: Content of: <div><p>
en: One thing was that that software was much more poorly written, and harder to understand; therefore making it harder for people to make the changes that were in fact needed.  Another was, that that software came with security, which had the inevitable effect of causing people to cooperate with each other less.  In the old days on ITS it was considered desirable that everyone could look at any file, change any file, because we had reasons to.  I remember one interesting scandal where somebody sent a request for help in using Macsyma.  Macsyma is a symbolic algebra program that was developed at MIT.  He sent to one of the people working on it a request for some help, and he got an answer a few hours later from somebody else.  He was horrified, he sent a message &ldquo;so-and-so must be reading your mail, can it be that mail files aren't properly protected on your system?&rdquo; &ldquo;Of course, no file is protected on our system.  What's the problem? You got your answer sooner; why are you unhappy? Of course we read each other's mail so we can find people like you and help them.&rdquo; Some people just don't know when they're well off.
fr: Le premier problème était que ce logiciel était beaucoup plus mal écrit et plus difficile à comprendre qu'ITS, rendant donc plus difficiles les modifications nécessaires. L'autre était que le logiciel était sécurisé, ce qui eut pour effet inévitable de diminuer la collaboration entre les uns et les autres. Dans le passé, sur ITS, nous trouvions souhaitable d'avoir accès à tous les fichiers et de pouvoir modifier n'importe lequel, parce que nous avions des raisons pour cela. Je me rappelle un scandale intéressant où quelqu'un a envoyé une demande d'assistance en utilisant Macsyma. Macsyma est un programme d'algèbre symbolique qui a été développé au MIT. Il a envoyé une demande d'assistance à l'une des personnes qui travaillait dessus et a obtenu une réponse quelques heures plus tard de la part de quelqu'un d'autre. Il était horrifié. Il a envoyé le message suivant : « Untel doit lire votre courrier, les fichiers de courrier ne sont peut-être pas correctement protégés sur votre système ? » – « Naturellement, aucun dossier n'est protégé sur notre système. Où est le problème ? Vous avez obtenu votre réponse plus tôt, de quoi vous plaignez-vous ? Évidemment nous lisons le courrier de tout le monde, comme ça nous pouvons tomber sur des personnes comme vous et les aider. » Certains ne connaissent pas leur bonheur.

note: type: Content of: <div><p>
en: But of course Twenex not only has security, and by default turns on security, but it's also designed with the assumption that security is in use.  So there are lots of things that are very easy to do that can cause a lot of damage, and the only thing that would stop you from doing them by accident, is security.  On ITS we evolved other means of discouraging people from doing those things by accident, but on Twenex you didn't have them because they assumed that there was going to be be strict security in effect and only the bosses were going to have the power to do them.  So they didn't put in any other mechanism to make it hard to do by accident.  The result of this is that you can't just take Twenex and turn off the security and have what you'd really like to have, and there were no longer the hackers to make the changes to put in those other mechanisms, so people were forced to use the security.  And about six months after the machine was there they started having some coups d'etat.  That is, at first we had the assumption that everyone who worked for the lab was going to have the wheel bit which gave full powers to override all security measures, but some days you'd come in some afternoon and find out that the wheel bits of just about everybody had been turned off.
fr: Bien sûr, Twenex n'est pas seulement muni d'une sécurité – et par défaut la sécurité est activée – mais il est également conçu en partant de l'hypothèse que la sécurité est active. Or il y a un bon nombre de trucs très faciles à faire qui peuvent causer pas mal de dégâts et la seule chose qui vous empêche de les faire par accident, c'est la sécurité. Sur ITS, nous avions développé d'autres moyens d'éviter que les gens fassent ces trucs par accident, mais sur Twenex on ne les avait pas, étant donné que des mesures de sécurité strictes étaient censées être opérationnelles et que les chefs étaient les seuls à avoir la possibilité de faire des erreurs. Donc, ils n'avaient mis aucun autre mécanisme de sécurité pour éviter les accidents. Le résultat, c'est qu'on ne pouvait plus se contenter de désactiver la sécurité de Twenex pour avoir ce qu'on voulait. Et il n'y avait plus les hackers pour faire les changements nécessaires à l'introduction de ces autres mécanismes. Aussi les gens ont-ils été obligés de travailler avec la sécurité. Et la machine était là depuis six mois à peu près, quand il a commencé à y avoir quelques « coups d'État ». Au début nous avons supposé que tous ceux qui travaillaient pour le labo allaient avoir le <i>wheel bit</i><a id="TransNote3-rev" href="#TransNote3"><sup>3</sup></a> qui leur donnerait les pleins pouvoirs pour désactiver la sécurité, mais certains jours vous veniez dans l'après-midi pour découvrir que les <i>wheel bits</i> d'à peu près tout le monde avaient été supprimés.

note: type: Content of: <div><p>
en: When I found out about those, I overthrew them.  The first time, I happened to know the password of one of the people who was included among the elite, so I was able to use that to turn everyone back on.  The second time he had changed his password, he had now changed his sympathies, he was now part of the aristocratic party.  So, I had to bring the machine down and use non-timeshared DDT to poke around.  I poked around in the monitor for a while, and eventually figured out how to get it to load itself in and let me patch it, so that I could turn off password checking and then I turned back on a whole bunch of people's wheel bits and posted a system message.  I have to explain that the name of this machine was OZ, so I posted a system message saying: &ldquo;There was another attempt to seize power.  So far the aristocratic forces have been defeated&mdash;Radio Free OZ.&rdquo; Later I discovered that &ldquo;Radio Free OZ&rdquo; is one of the things used by Firesign Theater.  I didn't know that at the time.
fr: Quand je m'en suis rendu compte, j'ai rectifié la situation. La première fois, il se trouve que je connaissais le mot de passe d'un des membres de l'élite et que j'ai pu l'utiliser pour redonner à chacun ses privilèges. La deuxième fois, il avait changé son mot de passe, il avait changé de relations sociales, il appartenait désormais au parti aristocrate. Alors j'ai dû arrêter la machine et utiliser le système DDT<a id="TransNote4-rev" href="#TransNote4"><sup>4</sup></a> en temps non partagé pour fouiller un peu partout. J'ai fouillé dans le moniteur pendant un moment et j'ai compris à la fin comment faire pour qu'il se charge et que je puisse le patcher. De sorte que j'ai pu bloquer le contrôle des mots de passe et ainsi redonner leur <i>wheel bit</i> à plein de gens. Puis j'ai laissé un message système. Le nom de cette machine était OZ et le message disait : « Il y a eu une nouvelle tentative de prise du pouvoir, jusqu'ici les forces aristocratiques sont battues – <i>Radio Free OZ</i> (la radio libre d'Oz). » Plus tard j'ai découvert que <i>Radio Free OZ</i> est l'une des expressions utilisées par le <i>Firesign Theater</i>. Je ne le savais pas à ce moment-là.

note: type: Content of: <div><p>
en: But gradually things got worse and worse, it's just the nature of the way the system had been constructed forced people to demand more and more security.  Until eventually I was forced to stop using the machine, because I refused to have a password that was secret.  Ever since passwords first appeared at the MIT-AI lab I had come to the conclusion that to stand up for my belief, to follow my belief that there should be no passwords, I should always make sure to have a password that is as obvious as possible and I should tell everyone what it is.  Because I don't believe that it's really desirable to have security on a computer, I shouldn't be willing to help uphold the security regime.  On the systems that permit it I use the &ldquo;empty password,&rdquo; and on systems where that isn't allowed, or where that means you can't log in at all from other places, things like that, I use my login name as my password.  It's about as obvious as you can get.  And when people point out that this way people might be able to log in as me, I say &ldquo;yes that's the idea, somebody might have a need to get some data from this machine.  I want to make sure that they aren't screwed by security.&rdquo;
fr: Mais petit à petit les choses ont empiré – c'est juste la façon dont le système avait été construit qui forçait les gens à exiger de plus en plus de sécurité – jusqu'à ce que, finalement, je sois obligé d'arrêter d'utiliser la machine parce que je refusais d'avoir un mot de passe secret. Depuis que les mots de passe étaient apparus pour la première fois au labo d'IA du MIT, j'en étais venu à la conclusion que pour respecter mes convictions, pour agir en accord avec mes convictions, il ne devait y avoir aucun mot de passe. Je dois toujours veiller à avoir un mot de passe aussi évident que possible et le dire à tout le monde. Puisque je ne crois pas qu'il soit vraiment souhaitable d'avoir une sécurité sur un ordinateur, je ne dois pas aider au maintien du régime de sécurité. Sur les systèmes qui le permettent, j'utilise un « mot de passe vide » et sur des systèmes où cela n'est pas permis (où cela signifie que vous ne pouvez pas ouvrir de session de l'extérieur, des choses comme ça), j'utilise mon nom d'utilisateur comme mot de passe. C'est aussi évident que possible. Et quand les gens me font remarquer que de cette manière on peut ouvrir une session sous mon nom, je réponds : « Oui, c'est ça l'idée, quelqu'un pourrait avoir besoin de certaines données sur cette machine. Je veux m'assurer qu'elles ne se feront pas avoir par la sécurité. »

note: type: Content of: <div><p>
en: And an other thing that I always do is I always turn of all protection on my directory and files, because from time to time I have useful programs stored there and if there's a bug I want people to be able to fix it.
fr: Et une autre chose que je fais toujours, c'est de désactiver la protection sur mon répertoire et mes dossiers. Parce que de temps en temps j'y stocke des programmes utiles et s'il y a un bogue je veux que les gens puissent le corriger.

note: type: Content of: <div><p>
en: But that machine wasn't designed also to support the phenomenon called &ldquo;tourism.&rdquo; Now &ldquo;tourism&rdquo; is a very old tradition at the AI lab, that went along with our other forms of anarchy, and that was that we'd let outsiders come and use the machine.  Now in the days where anybody could walk up to the machine and log in as anything he pleased this was automatic: if you came and visited, you could log in and you could work.  Later on we formalized this a little bit, as an accepted tradition specially when the Arpanet began and people started connecting to our machines from all over the country.  Now what we'd hope for was that these people would actually learn to program and they would start changing the operating system.  If you say this to the system manager anywhere else he'd be horrified.  If you'd suggest that any outsider might use the machine, he'll say &ldquo;But what if he starts changing our system programs?&rdquo; But for us, when an outsider started to change the system programs, that meant he was showing a real interest in becoming a contributing member of the community.  We would always encourage them to do this.  Starting, of course, by writing new system utilities, small ones, and we would look over what they had done and correct it, but then they would move on to adding features to existing, large utilities.  And these are programs that have existed for ten years or perhaps fifteen years, growing piece by piece as one craftsman after an other added new features.
fr: Mais cette machine n'avait pas non plus été conçue pour gérer un phénomène appelé « tourisme ». Le tourisme était une très vieille tradition du labo d'IA qui allait avec nos autres conceptions de l'anarchie. Elle disait que nous devions laisser les gens de l'extérieur utiliser la machine. À l'époque où n'importe qui pouvait venir se connecter à ce qui lui plaisait, c'était automatique : comme visiteur, vous pouviez ouvrir une session pour travailler. Plus tard nous avons plus ou moins formalisé ça comme une tradition établie, particulièrement quand l'Arpanet s'est mis en place et que les gens ont commencé à se connecter à nos machines à partir de n'importe quel coin du pays. Ce que nous espérions, c'était que ces personnes apprendraient vraiment à programmer et qu'elles commenceraient à modifier le système d'exploitation. Si vous disiez ça à un administrateur système n'importe où ailleurs, il serait horrifié. Si vous lui proposiez l'idée que n'importe quel étranger puisse utiliser la machine, il répondrait : « Et s'il commence à modifier nos programmes ? » Mais pour nous, si un étranger commençait à modifier les programmes, cela signifiait qu'il montrait un intérêt réel à devenir un membre contributif de la communauté. Nous encouragions toujours les gens à le faire ; à commencer, naturellement, par écrire de nouveaux utilitaires, des petits. Nous jetions un œil sur ce qu'ils avaient fait et nous le corrigions. Ils en arrivaient alors à ajouter des fonctionnalités à de grands utilitaires existants. Et ce sont des programmes qui existent depuis une dizaine ou peut-être une quinzaine d'années, et grandissent petit à petit à mesure que les artisans, l'un après l'autre, ajoutent de nouvelles fonctionnalités.

note: type: Content of: <div><p>
en: Sort of like cities in France you might say, where you can see the extremely old buildings with additions made a few hundred years later all the way up to the present.  Where in the field of computing, a program that was started in 1965 is essentially that.  So we would always hope for tourists to become system maintainers, and perhaps then they would get hired, after they had already begun working on system programs and shown us that they were capable of doing good work.
fr: C'est pour ainsi dire comme certaines villes de France, où l'on peut voir des bâtiments extrêmement anciens avec des rajouts construits des centaines d'années plus tard, jusqu'à aujourd'hui. Dans le domaine de l'informatique, un programme qui a été commencé en 1965, c'est à peu près ça. Ainsi nous espérions toujours que des touristes deviendraient mainteneurs du système ; et peut-être qu'ensuite ils allaient être embauchés, après avoir commencé à travailler sur les programmes du système et nous avoir montré qu'ils étaient capables de faire du bon travail.

note: type: Content of: <div><p>
en: But the ITS machines had certain other features that helped prevent this from getting out of hand, one of these was the &ldquo;spy&rdquo; feature, where anybody could watch what anyone else was doing.  And of course tourists loved to spy, they think it's such a neat thing, it's a little bit naughty you see, but the result is that if any tourist starts doing anything that causes trouble there's always somebody else watching him.  So pretty soon his friends would get very mad because they would know that the continued existence of tourism depended on tourists being responsible.  So usually there would be somebody who would know who the guy was, and we'd be able to let him leave us alone. And if we couldn't, then what we would do was we would turn off access from certain places completely, for a while, and when we turned it back on, he would have gone away and forgotten about us.  And so it went on for years and years and years.
fr: Mais il y avait sur les machines ITS certains autres dispositifs qui aidaient à éviter que ça nous échappe. L'un d'entre eux était un dispositif « espion » où tout le monde pouvait observer ce que chacun faisait. Et naturellement les touristes adoraient espionner. Ils pensaient que c'était super. C'était un peu méchant, voyez-vous, mais le résultat, c'était que si un touriste commençait à faire un truc à problème, il y avait toujours quelqu'un pour le voir. Donc assez vite ses amis étaient furieux parce qu'ils savaient que pour que le tourisme continue à exister, il fallait des touristes responsables. Aussi y avait-il forcément quelqu'un qui savait qui c'était et nous pouvions lui dire de nous laisser tranquilles. Et si nous ne pouvions pas, alors ce que nous faisions, c'était d'interdire les connexions provenant de certains endroits pendant un moment, et quand nous les autorisions à nouveau il était parti et nous avait oubliés. Et cela a continué comme ça pendant des années, des années&hellip; et des années.

note: type: Content of: <div><p>
en: But the Twenex system wasn't designed for this sort of thing, and eventually they wouldn't tolerate me with my password that everybody knew, tourists always logging in as me two or three at a time, so they started flushing my account.  And by that time I was mostly working on other machines anyway, so eventually I gave up and stopped ever turning it on again.  And that was that.  I haven't logged in on that machine as myself &hellip; <span>[At this point RMS is interrupted by tremendous applause.]</span> &hellip; for.
fr: Mais le système Twenex n'avait pas été conçu pour ce genre de chose et par la suite ils ne m'ont plus toléré, moi et mon mot de passe que tout le monde connaissait. Les touristes n'arrêtaient pas d'ouvrir des sessions sous mon nom, à deux ou trois à la fois, et ont commencé à vider mon compte. À ce moment-là de toute façon, je travaillais le plus souvent sur d'autres machines ; si bien que finalement je l'ai abandonné et cessé à tout jamais de le réactiver. C'est tout. Je ne me suis pas connecté sur cette machine sous mon nom pendant&hellip; <span>[À ce moment-là, RMS est interrompu par un tonnerre d'applaudissements.]</span>

note: type: Content of: <div><p>
en: But when they first got this Twenex system they had several changes in mind that they wanted to make.  Changes in the way security worked.  They also wanted to have the machine on both the ARPA network and the MIT-chaos network, and it turns out that they were unable to do this, that they couldn't get anyone who was sufficiently competent to make such changes.  There was no longer talent available to do it, and it was too hard to change.  That system was much harder to understand, because it was too poorly written, and of course, Digital wouldn't do these things, so their ideas that a commercial system would essentially maintain itself, proved to be mistaken.  They had just as much need for system hackers, but they had no longer the means to entice system hackers.  And nowadays at MIT there are more people interested in hacking on ITS than there are interested in hacking on Twenex.
fr: Quand ils ont installé le système Twenex, ils avaient à l'esprit d'y faire plusieurs changements, des changements dans le fonctionnement de la sécurité. Ils voulaient aussi mettre la machine sur le réseau <abbr title="Advanced Research Projects Agency">ARPA</abbr> ainsi que sur le réseau Chaos du MIT. Et il se trouve qu'ils n'ont pas pu le faire, qu'il n'y avait personne d'assez compétent pour ça. Il n'y avait plus de talent disponible et il était trop difficile de changer ça. Ce système était beaucoup plus difficile à comprendre qu'ITS parce qu'il était trop mal écrit, et naturellement Digital ne voulait pas faire ce genre de chose. Ainsi l'idée d'un système commercial qui se maintenait tout seul s'est révélée erronée. Ils avaient absolument besoin de hackers mais n'avaient plus les moyens de les attirer. Et de nos jours au MIT, il y a davantage de gens que ça intéresse de hacker ITS que Twenex.

note: type: Content of: <div><p>
en: And the final reason why this is so, is that Twenex can't be shared.  Twenex is a proprietary program and you're only allowed to have the sources if you keep them secret in certain nasty ways, and this gives them a bad flavor.  Unless a person is oblivious (which some people in computers are, there's some people who'll do anything if it's fun for them, and won't think for a minute whether they're cooperating with anyone else, but you'd have to be pretty oblivious to not to notice what a sad thing it is to work on a program like that, and that is a further discouragement).  And if that isn't enough there is the fact that every year or so they're going to give you a new release full of 50 000 additional lines of code all written by monkeys.  Because they generally follow the &ldquo;million monkeys typing, and eventually they'll come up with something useful&rdquo; school of system development.
fr: La dernière raison de cet état de fait, c'est que Twenex ne pouvait pas être partagé. Twenex est un programme propriétaire : vous n'avez le droit d'avoir les sources que si vous les gardez secrètes par des moyens très déplaisants. Et ça leur donne mauvais goût, à moins d'être inconscient comme le sont certains en informatique (il y en a qui feront n'importe quoi si c'est amusant pour eux et ne penseront pas une minute à coopérer avec qui que ce soit ; mais il faut être franchement ailleurs pour ne pas remarquer à quel point c'est triste de travailler comme ça sur un programme, comme c'est décourageant). Et comme si ce n'était pas suffisant, chaque année ils vous donnent une nouvelle version remplie d'une cinquantaine de milliers de lignes de code supplémentaires, toutes écrites par des singes. Parce qu'ils suivent généralement une école de programmation système du genre « un million de singes tapant sur une machine à écrire finiront bien un jour par sortir quelque chose d'utile ».

note: type: Content of: <div><p>
en: It was clear to me from what I saw happening to these proprietary systems that the only way we could have the spirit of the old AI lab was to have a free operating system.  To have a system made up of free software which could be shared with anyone.  So that we could invite everyone to join in improving it.  And that's what led up to the GNU project.  So I guess we've arrived at the second part of the talk.
fr: Il était clair pour moi, après avoir vu ce qui arrivait à ces systèmes propriétaires, que la seule façon de conserver l'esprit du vieux labo d'IA était d'avoir un système d'exploitation libre ; d'avoir un système fait de logiciel libre pouvant être partagé avec n'importe qui, de façon à pouvoir inviter tout le monde à collaborer à son amélioration. Et c'est ce qui a conduit au projet GNU. Ainsi j'estime que nous sommes arrivés à la deuxième partie de la conférence.

note: type: Content of: <div><p>
en: About three and a half year ago it was clear to me that I should start developing a <a href="/philosophy/free-sw.html">free software</a> system.  I could see two possible kinds of systems to develop: One: A LISP-machine-like system, essentially a system just like the MIT LISP machine system that had just been developed, except free, and running on general purpose hardware, not on special LISP machines.  And the other possibility was a more conventional operating system, and it was clear to me that if I made a conventional operating system, I should make it compatible with Unix, because that would make it easy for people all around to switch to it.  After a little while, I concluded I should do the latter and the reason was, that I saw that you can't have something really like the LISP machine system on general purpose hardware.  The LISP machine system uses special hardware plus special writable microcode to gain both good execution speed and robust detection of errors at runtime, specially data-type errors.  In order to make a LISP system run fast enough on ordinary hardware, you have to start making assumptions.  Assuming that a certain argument is the right type, and then if it isn't the system just crashes.
fr: Il y a environ trois ans et demi, il m'est apparu comme une évidence que je devais commencer à développer un système constitué de <a href="/philosophy/free-sw.html">logiciel libre</a>. J'envisageais deux types de systèmes : le premier, pratiquement identique au système de machine Lisp du MIT, mais libre et fonctionnant sur tout type de matériel, pas seulement sur les machines Lisp spécialisées, et l'autre, un logiciel d'exploitation plus conventionnel. Et il était clair pour moi que si je faisais un logiciel d'exploitation conventionnel, je devais le rendre compatible avec Unix parce que ça rendait la migration plus facile aux gens de tous horizons. Après quelque temps, j'ai choisi la deuxième solution. Et la raison, c'était qu'il n'était pas possible d'obtenir quelque chose de vraiment comparable au système de machine Lisp sur du matériel polyvalent. Le système de machine Lisp utilise du matériel spécial, avec un microcode spécial réinscriptible, pour obtenir à la fois une bonne vitesse d'exécution et une détection robuste des erreurs pendant le temps d'exécution, en particulier les erreurs sur le type des données. Pour qu'un système Lisp puisse fonctionner assez rapidement sur du matériel ordinaire, on doit commencer par faire des suppositions, supposer que tel argument est du type voulu ; ensuite, si ce n'est pas le cas, le système se plante.

note: type: Content of: <div><p>
en: Of course you can put in explicit checks, you can write a robust program if you want, but the fact is that you are going to get things like memory addressing errors when you feed a function an argument of the wrong type if you did NOT put in things to check for it.
fr: Naturellement on peut mettre des contrôles explicites, on peut écrire un programme robuste si on veut, mais le fait est qu'on va obtenir des trucs comme des erreurs d'adressage de mémoire si l'on fournit à une fonction un argument de type inapproprié sans RIEN prévoir pour faire la vérification.

note: type: Content of: <div><p>
en: So the result is then that you need something running underneath the LISP system to you catch these errors, and give the user the ability to keep on running, and debug what happened to him.  Finally I concluded that if I was going to have to have a operating system at a lower level, I might as well make a good operating-system&mdash;that it was a choice between an operating system and the lisp, or just an operating system; therefore I should do the operating system first, and I should make it compatible with Unix.  Finally when I realized that I could use the most amusing word in the English language as a name for this system, it was clear which choice I had to make.  And that word is of course GNU, which stands for &ldquo;Gnu's Not Unix.&rdquo; The recursive acronym is a very old tradition among the hacker community around MIT.  It started, I believe, with an editor called TINT, which means: &ldquo;Tint Is Not Teco,&rdquo; and later on it went through names such as &ldquo;SINE&rdquo; for &ldquo;SINE Is Not Emacs,&rdquo; and FINE for &ldquo;Fine Is Not Emacs,&rdquo; and EINE for &ldquo;Eine Is Not Emacs,&rdquo; and ZWEI for &ldquo;Zwei Was Eine Initially,&rdquo; and ultimately now arrives at GNU.
fr: Le résultat, c'est qu'il fallait que quelque chose fonctionne en dessous du système Lisp pour détecter ces erreurs et permettre à l'utilisateur de garder le système en état de marche et de déboguer les problèmes éventuels. J'en suis arrivé à la conclusion que si je devais avoir un système d'exploitation de bas niveau, je pouvais tout aussi bien faire un bon système d'exploitation – le choix était entre un système d'exploitation plus le Lisp, et juste un système d'exploitation ; donc je devais faire le système d'exploitation d'abord et le rendre compatible avec Unix. Enfin, quand j'ai réalisé que je pouvais utiliser le plus drôle des mots anglais pour nommer ce système, le choix était clair. Et ce mot est bien sûr GNU, qui signifie <i>GNU's Not Unix</i> (GNU N'est pas Unix). L'acronyme récursif est une très vieille tradition dans la communauté de hackers qui gravite autour du MIT. Il a commencé je crois, avec un éditeur appelé TINT, ce qui signifie <i>Tint Is Not <abbr title="Text Editor and COrrector">Teco</abbr></i>, et plus tard c'est passé par des noms comme SINE pour <i>Sine Is Not Emacs</i>, et FINE pour <i>Fine Is Not Emacs</i>, et EINE pour <i>Eine Is Not Emacs</i>, et ZWEI pour <i>Zwei Was Eine Initially</i>, et finalement on est arrivé à GNU.

note: type: Content of: <div><p>
en: I would say that since the time about two and a half years ago when I actually started working on GNU, I've done more than half of the work.  When I was getting ready to start working on the project, I first started looking around for what I could find already available free.  I found out about an interesting portable compiler system which was called &ldquo;the free university compiler kit,&rdquo; and I thought, with a name like that, perhaps I could have it.  So, I sent a message to the person who had developed it asking if he would give it to the GNU Project, and he said &ldquo;No, the university might be free, but the software they develop isn't,&rdquo; but he then said that he wanted to have a Unix compatible system too, and he wanted to write a sort of kernel for it, so why didn't I then write the utilities, and they could both be distributed with his proprietary compiler, to encourage people to buy that compiler.  And I thought that this was despicable and so I told him that my first project would be a compiler.
fr: Je dirais que depuis le moment, il y a environ deux ans et demi, où j'ai commencé à travailler vraiment sur GNU, j'ai déjà fait plus de la moitié du travail. Au moment où j'étais prêt à démarrer le projet, j'ai d'abord regardé autour de moi ce qu'il y avait de libre déjà disponible. J'ai découvert un système de compilation portable appelé <i>the Free University Compiler Kit</i>, qui était intéressant, et j'ai pensé qu'avec un nom pareil je pourrais peut-être l'avoir.<a id="TransNote5-rev" href="#TransNote5"><sup>5</sup></a> Alors j'ai envoyé un message à son développeur en lui demandant s'il acceptait de le donner au projet GNU. Et il a dit « Non, l'université est peut-être libre, mais le logiciel qu'elle développe ne l'est pas », mais il a ajouté qu'il voulait aussi avoir un système compatible avec Unix et qu'il voulait écrire une sorte de noyau pour lui, alors pourquoi est-ce que je n'écrirais pas les utilitaires, comme ça les deux pourraient être distribués avec son compilateur propriétaire ? Ça encouragerait les gens à l'acheter. J'ai pensé que c'était ignoble, alors je lui ai dit que mon premier projet serait de faire un compilateur.

note: type: Content of: <div><p>
en: I didn't really know much about optimizing compilers at the time, because I'd never worked on one.  But I got my hands on a compiler, that I was told at the time was free. It was a compiler called PASTEL, which the authors say means &ldquo;off-color PASCAL.&rdquo;
fr: Je ne savais pas vraiment grand-chose au sujet de l'optimisation des compilateurs à cette époque parce que je n'avais jamais travaillé dessus. Mais j'ai mis la main sur un compilateur dont on m'avait dit qu'il était libre. C'était un compilateur appelé Pastel dont les auteurs disaient que c'était du « Pascal mal fichu ».

note: type: Content of: <div><p>
en: Pastel was a very complicated language including features such as parametrized types and explicit type parameters and many complicated things.  The compiler was of course written in this language, and had many complicated features to optimize the use of these things.  For example: the type &ldquo;string&rdquo; in that language was a parameterized type; you could say <code>string(n)</code> if you wanted a string of a particular length; you could also just say <code>string</code>, and the parameter would be determined from the context.  Now, strings are very important, and it is necessary for a lot of constructs that use them to run fast, and this means that they had to have a lot of features to detect such things as: when the declared length of a string is an argument that is known to be constant throughout the function, to save to save the value and optimize the code they're going to produce, many complicated things.  But I did get to see in this compiler how to do automatic register allocation, and some ideas about how to handle different sorts of machines.
fr: Le Pastel est un langage très compliqué comprenant des fonctionnalités comme des types paramétrés et des paramètres de types explicites et beaucoup de choses compliquées. Le compilateur naturellement était écrit dans ce langage et comportait nombre de fonctionnalités compliquées pour optimiser l'utilisation de ces éléments. Par exemple : le type <i>string</i> dans ce langage était un type paramétré ; vous pouviez dire <code>string(n)</code> si vous vouliez une chaîne d'une longueur particulière ; vous pouviez également juste dire <code>string</code>, et le paramètre était déterminé à partir du contexte. Cela dit, les chaînes sont très importantes et sont nécessaires à beaucoup de constructions qui les utilisent pour fonctionner rapidement. Et ça veut dire qu'on avait besoin de beaucoup de fonctionnalités pour détecter des choses comme : lorsque la longueur déclarée d'une chaîne est un argument dont on sait qu'il est constant dans toute la fonction, sauvegarder la valeur et optimiser le code qu'elle va produire ; beaucoup de choses compliquées. Mais j'ai pu voir dans ce compilateur comment procéder à l'allocation automatique de registre et glaner quelques idées sur la façon de gérer différents types de machines.

note: type: Content of: <div><p>
en: Well, since this compiler already compiled PASTEL, what I needed to do was add a front-end for C, which I did, and add a back-end for the 68000 which I expected to be my first target machine.  But I ran into a serious problem.  Because the PASTEL language was defined not to require you to declare something before you used it, the declarations and uses could be in any order, in other words: Pascal's <code>forward</code> declaration was obsolete, because of this it was necessary to read in an entire program, and keep it in core, and then process it all at once.  The result was that the intermediate storage used in the compiler, the size of the memory needed, was proportional to the size of your file.  And this also included stack-space, you needed gigantic amounts of stack space, and what I found as a result was: that the 68000 system available to me could not run the compiler.  Because it was a horrible version of Unix that gave you a limit of something like 16K words of stack, this despite the existence of six megabytes in the machine, you could only have 16Kw of stack or something like that.  And of course to generate its conflict matrix to see which temporary values conflicted, or was alive at the same time as which others, it needed a quadratic matrix of bits, and that for large functions that would get it to hundreds of thousands of bytes.  So I managed to debug the first pass of the ten or so passes of the compiler, cross compiled on to that machine, and then found that the second one could never run.
fr: Bon, puisque ce compilateur avait déjà compilé Pastel, tout ce que j'avais à faire était de rajouter une interface pour le C, ce que je fis, puis d'ajouter une sortie pour le 68000 qui devait être ma première cible. Mais j'allais vers un sérieux problème. Puisque le langage Pastel était conçu de manière à ne pas avoir besoin de déclarer quoi que ce soit avant de l'utiliser, la déclaration d'une variable et son usage pouvaient se faire dans n'importe quel ordre ; en d'autres termes, la déclaration <code>forward</code> du Pascal était obsolète. Pour cette raison il fallait lire le programme dans son intégralité, le garder en mémoire centrale <i>[core]</i> et le compiler d'une traite. Le résultat, c'était que le stockage intermédiaire utilisé par le compilateur, ou plutôt la taille de la mémoire requise, était proportionnel à la taille de votre fichier. Et il fallait aussi compter avec l'espace de pile ; vous aviez besoin d'une quantité gigantesque d'espace de pile. J'en ai conclu que le système 68000 dont je disposais ne pouvait pas faire fonctionner ce compilateur. Car c'était une horrible version d'Unix qui vous limitait à quelque chose comme 16 000 mots de pile, ceci en dépit de l'existence de six mégaoctets dans la machine. Et naturellement, pour générer la matrice des conflits afin de voir quelles valeurs temporaires étaient en conflit ou quel groupe de valeurs étaient actives en même temps, il était nécessaire d'avoir une matrice quadratique de bits. Et pour les grandes fonctions cela pouvait prendre des centaines de milliers d'octets. Ainsi je suis parvenu à déboguer la première des quelque dix passes du compilateur en compilation croisée sur cette machine et j'ai constaté alors que la seconde ne pourrait jamais fonctionner.

note: type: Content of: <div><p>
en: While I was thinking about what to do about these problems and wondering whether I should try to fix them or write entirely new compiler, in a roundabout fashion I began working on GNU Emacs.  GNU Emacs is the main distributed portion of the GNU system.  It's an extensible text editor a lot like the original emacs which I developed ten years ago, except that this one uses actual LISP as its extension language.  The editor itself is implemented in C, as is the LISP interpreter, so the LISP interpreter is completely portable, and you don't need a LISP system external to the editor.  The editor contains its own LISP system, and all of the editing commands are written in LISP so that they can provide you with examples to look at for how to write your own editing commands, and things to start with, so you can change them into the editing commands that you really want.
fr: Pendant que je réfléchissais à ces problèmes en me demandant si je devais essayer de les corriger ou bien écrire entièrement un nouveau compilateur, j'ai commencé de manière indirecte à travailler sur GNU Emacs. GNU Emacs est la partie principale de la distribution du système GNU. C'est un éditeur de texte extensible qui ressemble de près à l'Emacs original que j'ai développé il y a dix ans, sauf que celui-ci emploie le véritable Lisp comme langage d'extension. L'éditeur lui-même est implémenté en C, de même que l'interpréteur Lisp. Ainsi l'interpréteur Lisp est entièrement portable et vous n'avez pas besoin de système Lisp externe à l'éditeur. L'éditeur contient son propre système Lisp et toutes les commandes d'édition sont écrites en Lisp de manière à pouvoir vous donner des exemples sur la façon d'écrire vos propres commandes et des éléments à utiliser comme point de départ. Il vous suffit de les modifier pour obtenir les commandes que vous voulez.

note: type: Content of: <div><p>
en: In the summer of that year, about two years ago now, a friend of mine told me that because of his work in early development of Gosling Emacs, he had permission from Gosling in a message he had been sent to distribute his version of that.  Gosling originally had set up his Emacs and distributed it free and gotten many people to help develop it, under the expectation based on Gosling's own words in his own manual that he was going to follow the same spirit that I started with the original Emacs.  Then he stabbed everyone in the back by putting copyrights on it, making people promise not to redistribute it and then selling it to a software-house.  My later dealings with him personally showed that he was every bit as cowardly and despicable as you would expect from that history.
fr: L'été de cette année-là, il y a environ deux ans maintenant, un ami m'a dit qu'en raison de son travail au tout début du développement de l'Emacs de Gosling, il avait la permission écrite de Gosling de distribuer sa propre version. Gosling, à l'origine, avait créé son Emacs. Il l'avait distribué librement et beaucoup de gens aidèrent à son développement, avec l'espoir – selon les propres mots de Gosling dans son manuel – qu'il avait suivi le même état d'esprit que celui que j'avais donné à l'Emacs original. Ensuite il a poignardé tout le monde dans le dos en prenant des copyrights dessus, en faisant promettre aux gens de ne pas le redistribuer puis en le vendant à une maison d'édition de logiciels. Les relations d'affaires que j'ai eues avec lui par la suite m'ont personnellement prouvé qu'il était aussi lâche et méprisable que vous pouvez le voir dans cette histoire.

note: type: Content of: <div><p>
en: But in any case, my friend gave me this program, and my intention was to change the editing commands at the top level to make them compatible with the original Emacs that I was used to.  And to make them handle all the combinations of numerical arguments and so on that one might expect that they would handle and have all the features that I wanted.  But after a little bit of this, I discovered that the extension language of that editor, which is called MOCKLISP, was not sufficient for the task.  I found that that I had to replace it immediately in order to do what I was planning to do.  Before I had had the idea of someday perhaps replacing MOCKLISP with real LISP, but what I found out was that it had do be done first.  Now, the reason that MOCKLISP is called MOCK, is that it has no kind of structure datatype: it does not have LISP lists; it does not have any kind of array.  It also does not have LISP symbols, which are objects with names: for any particular name, there is only one object, so that you can type in the name and you always get the same object back.  And this tremendously hampers the writing of many kinds of programs, you have to do things by complicated string-manipulation that don't really go that way.
fr: Mais de toute façon, mon ami m'avait donné le programme et j'avais l'intention de modifier les commandes d'édition du niveau supérieur pour les rendre compatibles avec l'Emacs original dont j'avais l'habitude. Ceci pour qu'elles puissent manipuler toutes les combinaisons d'arguments numériques, etc., tout ce que l'on pouvait s'attendre à ce qu'elles manipulent, en étant pourvues de toutes les fonctionnalités que je voulais. Mais peu après, j'ai découvert que le langage d'extension de cet éditeur, appelé Mocklisp, ne suffisait pas à la tâche. J'ai compris que je devais le remplacer immédiatement pour pouvoir réaliser mon projet. J'avais déjà pensé auparavant à remplacer éventuellement Mocklisp par le vrai Lisp, mais ce que j'ai découvert, c'est qu'il fallait le faire dès le début. Maintenant, la raison pour laquelle Mocklisp s'appelle <i>mock</i> (faux), c'est qu'il n'a aucune sorte de structure pour les types de données : il n'y a pas les listes Lisp ; il n'y a aucune sorte de tableau ; il n'y a pas non plus les symboles Lisp, qui sont des objets nommés (à chaque nom particulier correspond un seul objet de manière que la saisie du nom se rapporte toujours au même objet, sinon ça entrave considérablement l'écriture de pas mal de sortes de programmes en vous obligeant à passer par des manipulations de chaînes compliquées qui ne font pas vraiment avancer les choses).

note: type: Content of: <div><p>
en: So I wrote a LISP interpreter and put it in in place of MOCKLISP and in the process I found that I had to rewrite many of the editor's internal data structures because I wanted them to be LISP objects.  I wanted the interface between the LISP and the editor to be clean, which means that objects such as editor buffers, sub-processes, windows and buffer-positions, all have to be LISP objects, so that the editor primitives that work on them are actually callable as LISP functions with LISP data.  This meant that I had to redesign the data formats of all those objects and rewrite all the functions that worked on them, and the result was that after about six months I had rewritten just about everything in the editor.
fr: Alors j'ai écrit un interpréteur Lisp pour le mettre à la place de Mocklisp. Et ce faisant j'ai constaté que je devais réécrire un certain nombre de structures de données internes à l'éditeur parce que je voulais qu'il s'agisse d'objets Lisp. Je voulais que l'interface entre Lisp et l'éditeur soit propre, c'est-à-dire que des objets comme les tampons d'édition, les sous-processus, les fenêtres et les emplacements des tampons soient tous des objets Lisp, afin que les processus primaires de l'éditeur qui s'en servaient puissent vraiment être appelés en tant que fonctions Lisp avec des données Lisp. Cela voulait dire qu'il fallait recréer entièrement les formats de données de tous les objets et réécrire toutes les fonctions qui s'en servaient. Et cela a eu pour résultat, pendant environ six mois, de me faire réécrire à peu près tout ce qu'il y avait dans l'éditeur.

note: type: Content of: <div><p>
en: In addition, because it is so hard to write things in MOCKLISP, all the things that had been written in MOCKLISP were very unclean and by rewriting them to take advantage of the power of real LISP, I could make them much more powerful and much simpler and much faster.  So I did that, and the result was that when I started distributing this program only a small fraction remained from what I had received.
fr: En outre, du fait qu'il est vraiment difficile d'écrire en Mocklisp, rien n'était écrit proprement. Et en le réécrivant, je pouvais tirer profit de la puissance du vrai Lisp ; je pouvais rendre tout ça beaucoup plus puissant, beaucoup plus simple et rapide. C'est ce que j'ai fait. Et quand j'ai commencé à distribuer le programme, il ne restait qu'une petite partie de ce que j'avais reçu.

note: type: Content of: <div><p>
en: At this point, the company that Gosling thinks he sold the program to challenged my friend's right to distribute it, and the message was on backup tapes, so he couldn't find it.  And Gosling denied having given him permission.  And then a strange thing happened.  He was negotiating with this company, and it seemed that the company mainly was concerned with not having anything distributed that resembled what they were distributing.  See, he was still distributing, and the company where he worked, which is Megatest, was still distributing the same thing he had given me, which really was an old version of Gosling Emacs with his changes, and so he was going to make an agreement with them where he would stop distributing that, and would switch to using GNU Emacs, and they would then acknowledge that he really had the permission after all, and then supposedly everyone would be happy.  And this company was talking to me about wanting to distribute GNU Emacs, free of course, but also sell various sorts of supporting assistance, and they wanted to hire me to help do the work.  So it's sort of strange that they then changed their mind and refused to sign that agreement, and put up a message on the network saying that I wasn't allowed to distribute the program.  They didn't actually say that they would do anything, they just said that it wasn't clear whether they might ever someday do something.  And this was enough to scare people so that no one would use it any more, which is a sad thing.
fr: À ce moment-là, la société à qui Gosling pensait avoir vendu le programme a contesté à mon ami le droit de le distribuer. Le message avait été sauvegardé sur une bande que mon ami n'arrivait plus à retrouver et Gosling a nié lui avoir donné cette permission. Une chose étrange s'est alors produite. Il était en pourparlers avec cette société qui semblait surtout vouloir éviter qu'il ne distribue quelque chose d'analogue à ce qu'elle-même distribuait. Voyez-vous, Gosling continuait à distribuer ce qu'il m'avait donné et la société pour laquelle il travaillait, Megatest, également ; il s'agissait en réalité d'une ancienne version de l'Emacs de Gosling, avec ses modifications. Il allait donc faire un accord avec eux dans lequel il cesserait de le distribuer, et passer ensuite à GNU Emacs. Ils reconnaîtraient alors qu'après tout Gosling avait leur permission, et donc théoriquement tout le monde serait content. De plus cette société m'a entretenu au sujet de leur désir de distribuer GNU Emacs, gratuitement bien sûr, mais aussi de vendre divers services d'assistance. Ils voulaient même m'embaucher pour aider à faire ce travail. Aussi est-il un peu étrange qu'ils aient soudain changé d'avis et refusé de signer cet accord, puis mis une annonce sur le réseau comme quoi je n'avais pas le droit de distribuer le programme. Ils n'ont pas vraiment dit qu'ils feraient quoi que ce soit. Ils ont juste dit qu'il n'était pas improbable qu'ils fassent quelque chose un jour. Cela faisait suffisamment peur aux gens pour que plus personne ne l'utilise. C'est triste.

note: type: Content of: <div><p>
en: (Sometimes I think that perhaps one of the best things I could do with my life is: find a gigantic pile of proprietary software that was a trade secret, and start handing out copies on a street corner so it wouldn't be a trade secret any more, and perhaps that would be a much more efficient way for me to give people new free software than actually writing it myself; but everyone is too cowardly to even take it.)
fr: (Parfois je me dis que peut-être une des meilleures choses que je pourrais faire dans la vie serait de trouver une pile colossale de logiciels propriétaires couverts par le secret industriel et de commencer à en distribuer des copies à tous les coins de rue, ce qui les ferait sortir du secret. Peut-être que ce serait une manière beaucoup plus efficace de fournir aux gens de nouveaux logiciels libres, que de les écrire effectivement moi-même ; mais tout le monde serait trop lâche pour ne serait-ce qu'y toucher.)

note: type: Content of: <div><p>
en: So I was forced to rewrite all the rest that remained, and I did that, it took me about a week and a half.  So they won a tremendous victory.  And I certainly wouldn't ever cooperate with them in any fashion after that.
fr: Donc ça m'a obligé à réécrire tout ce qui restait qui n'était pas de moi, ce que j'ai fait. Il m'a fallu environ une semaine et demie. Quelle victoire pour eux ! Il était certain qu'après ça ils n'obtiendraient jamais plus aucune collaboration de ma part.

note: type: Content of: <div><p>
en: Then after GNU Emacs was reasonably stable, which took all in all about a year and a half, I started getting back to other parts of the system.  I developed a debugger which I called GDB which is a symbolic debugger for C code, which recently entered distribution.  Now this debugger is to a large extent in the spirit of DBX, which is a debugger that comes with Berkeley Unix.  Commands consist of a word that says what you want to do, followed by arguments.  In this debugger, commands can all be abbreviated, and the common commands have single character abbreviations, but any unique abbreviation is always allowed.  There are extensible HELP facilities, you can type HELP followed by any command or even subcommands, and get a lengthy description of how to use that command.  Of course you can type any expression in C, and it will print the value.
fr: Une fois que GNU Emacs a été raisonnablement stable – ce qui m'a pris environ un an et demi tout compris – j'ai commencé à revenir sur d'autres parties du système. J'ai développé un programme de débogage que j'ai appelé GDB. C'est un débogueur symbolique pour le code C dont la distribution vient de commencer, réalisé en grande partie dans l'esprit de DBX, le débogueur de l'Unix de Berkeley. Les commandes se composent d'un mot indiquant ce que vous voulez faire, suivi des arguments. Dans ce programme, toutes les commandes peuvent être abrégées. Les commandes courantes ont des abréviations d'un seul caractère, mais toute abréviation d'un seul caractère est permise. La fonction « aide » est très fournie : vous pouvez taper <code>help</code> suivi de n'importe quelle commande, y compris des commandes secondaires, et vous obtenez une description complète de la façon de l'utiliser. Naturellement vous pouvez taper n'importe quelle expression en C et sa valeur s'affichera.

note: type: Content of: <div><p>
en: You can also do some things that are not usual in symbolic C debuggers, for example: You can refer to any C datatype at any memory address, either to examine the value, or to assign the value.  So for example if you want to store a floating point value in a word at a certain address, you just say: &ldquo;Give me the object of type FLOAT or DOUBLE at this address&rdquo; and then assign that.  Another thing you can do is to examine all the values that have been examined in the past.  Every value examined gets put on the &ldquo;value history.&rdquo; You can refer to any element in the history by its numerical position, or you can easily refer to the last element with just dollar-sign.  And this makes it much easier to trace list structure.  If you have any kind of C structure that contains a pointer to another one, you can do something like <code>PRINT&nbsp;*$.next</code>, which says: &ldquo;Get the next field out of the last thing you showed me, and then display the structure that points at.&rdquo; And you can repeat that command, and each time you'll see then next structure in the list.  Whereas in every other C debugger that I've seen the only way to do that is to type a longer command each time.  And when this is combined with the feature that just typing carriage-return repeats the last command you issued, it becomes very convenient.  Just type carriage-return for each element in the list you want to see.
fr: Vous pouvez également faire des choses inhabituelles pour un débogueur C symbolique. Par exemple, vous pouvez vous référer à n'importe quel type de donnée C à n'importe quelle adresse de mémoire pour en examiner la valeur ou pour lui affecter une valeur. Supposons que vous vouliez stocker un nombre en virgule flottante dans un mot à une certaine adresse. Vous devez juste dire : « Donne-moi l'objet de type <i>float</i> ou <i>double</i> à cette adresse et ensuite affecte-lui cette valeur. » Une autre chose que vous pouvez faire est d'examiner toutes les valeurs qui ont été examinées auparavant. Chaque valeur examinée se place sur la pile de l'« historique des valeurs ». Vous pouvez vous référer à n'importe quel élément par sa position dans l'historique, ou bien vous pouvez facilement vous référer au dernier élément, juste avec le signe dollar. Ça facilite le suivi de la structure des listes. Si une structure C quelconque contient un pointeur vers une autre structure, vous pouvez faire quelque chose comme <code>print*$.next</code> qui veut dire : « Prends le champ suivant dans la dernière chose que tu m'as montrée, puis affiche la structure sur laquelle il pointe ». En répétant cette commande, on voit l'une après l'autre les structures sur lesquelles pointe la liste, alors qu'avec chacun des autres débogueurs C que j'ai vus, la seule manière de faire ça est de taper une commande de plus en plus longue. Et quand c'est combiné à une fonctionnalité qui fait qu'« Entrée » rappelle la dernière commande, ça devient très pratique. Vous avez juste à taper « Entrée » pour chaque élément de la liste que vous voulez voir.

note: type: Content of: <div><p>
en: There are also explicitly settable variables in the debugger, any number of them.  You say dollar-sign followed by a name, and that is a variable.  You can assign these variables values of any C datatype and then you can examine them later.  Among the things that these are useful for are: If there's a particular value that you're going to examine, and you know you are going to refer to it a lot, then rather than remember its number in the history you might give it a name.  You might also find use for them when you set conditional breakpoints.  Conditional breakpoints are a feature in many symbolic debuggers, you say &ldquo;stop when you get to this point in the program, but only if a certain expression is true.&rdquo; The variables in the debugger allow you to compare a variable in the program with a previous value of that variable that you saved in a debugger variable.  Another thing that they can be used for is for counting, because after all, assignments are expressions in C, therefore you can do <code>$foo+=5</code> to increment the value of <code>$foo</code> by five, or just <code>$foo++</code> you can do.  You can even do this in a conditional breakpoint, so that's a cheap way of having it break the tenth time the breakpoint is hit, you can do <code>$foo--==0</code>.  Does everyone follow that? Decrement foo and if it's zero now, break.  And then you set <code>$foo</code> to the number of times you want it to skip, and you let it go.  You can also use that to examine elements of an array.  Suppose you have an array of pointers, you can then do:
fr: Vous pouvez aussi définir des variables de façon explicite dans le débogueur, en nombre illimité. Vous posez le signe dollar suivi d'un nom et c'est une variable. Vous pouvez lui affecter une valeur de n'importe quel type C et vous pourrez l'examiner plus tard. Parmi les choses pour lesquelles c'est utile, s'il y a une valeur particulière que vous voulez examiner, sachant que vous allez vous y référer souvent, plutôt que de vous souvenir de son numéro dans l'historique vous pouvez lui donner un nom. Vous pouvez aussi utiliser ces variables quand vous placez des paliers <i>[breakpoints]</i> conditionnels. Les paliers conditionnels sont une fonctionnalité qui existe dans beaucoup de débogueurs symboliques. Vous dites : « Fais une pause quand tu seras arrivé à cet endroit du programme, mais seulement si une certaine expression est vraie. » Les variables du débogueur vous permettent de comparer une variable du programme à sa précédente valeur sauvegardée dans la variable du débogueur. Une autre chose à laquelle elles peuvent servir, c'est à compter. Parce qu'après tout, les valeurs affectées à ces variables sont des expressions en C, donc on peut faire <code>$foo+=5</code> pour incrémenter la valeur <code>$foo</code> de 5, ou juste <code>$foo++</code>. Vous pouvez également le faire lors d'un palier conditionnel. Une manière économe de faire une pause dans le programme la dixième fois que le palier est atteint, serait de faire <code>$foo--==0</code>. Est-ce que tout le monde suit ? Faire décroître foo et une fois qu'il est à zéro, pause. Vous faites démarrer <code>$foo</code> au nombre de boucles que vous voulez qu'il saute et vous le lâchez. Vous pouvez aussi utiliser ça pour examiner les éléments d'un tableau. Supposez que vous ayez un tableau de pointeurs, vous pouvez faire :

note: type: Content of: <div><p>
en: But first you do
fr: Mais d'abord vous faites

note: type: Content of: <div><p>
en: Okay, when you do that [points at the <code>PRINT</code> expression], you get the zeroth element of X, and then you do it again and it gets the first element, and suppose these are pointers to structures, then you probably put an asterisk there [before the X in the PRINT expression] and each time it prints the next structure pointed to by the element of the array.  And of course you can repeat this command by typing carriage-return.  If a single thing to repeat is not enough, you can create a user-defined-command.  You can say <code>Define Mumble</code>, and then you give some lines of commands and then you say <code>end</code>.  And now there is defined a <code>Mumble</code> command which will execute those lines.  And it's very useful to put these definitions in a command file.  You can have a command file in each directory, that will be loaded automatically when you start the debugger with that as your working directory.  So for each program you can define a set of user defined commands to access the data structures of that program in a useful way.  You can even provide documentation for your user-defined commands, so that they get handled by the <code>help</code> features just like the built-in commands.
fr: OK, quand vous faites ça [il montre l'expression PRINT], vous obtenez l'élément zéro de X et quand vous le faites à nouveau, il atteint le premier élément. Supposez que ce soient des pointeurs vers des structures, alors vous mettez probablement un astérisque là [avant le X dans l'expression PRINT] et à chaque fois, il affiche la structure sur laquelle pointe l'élément suivant du tableau. Et bien sûr vous pouvez répéter cette commande en tapant « Entrée ». Si ce n'est pas suffisant de répéter une seule chose, vous pouvez créer une « commande utilisateur ». Vous pouvez dire <code>define mumble</code>, vous mettez quelques lignes de commandes puis <code>end</code>. Vous venez ainsi de définir une commande <code>mumble</code> qui exécutera ces lignes. Et il est très utile de mettre ces définitions dans un fichier de commandes. Vous pouvez avoir un fichier de commandes dans chaque répertoire qui sera chargé automatiquement en tant que répertoire actif lorsque vous lancerez le débogueur. Ainsi pour chaque programme, vous pouvez définir un ensemble de commandes utilisateur pour accéder efficacement aux structures. Vous pouvez même fournir de la documentation pour vos commandes, de façon qu'elles soient traitées par la fonction <code>help</code> comme des commandes intégrées.

note: type: Content of: <div><p>
en: One other unusual thing in this debugger, is the ability to discard frames from the stack.  Because I believe it's important not just to be able to examine what's happening in the program you're debugging, but also to change it in any way conceivable.  So that after you've found one problem and you know what's wrong, you can fix things up as if that code were correct and find the next bug without having to recompile your program first.  This means not only being able to change the data areas in you program flexibly, but also being able to change the flow of control.  In this debugger you can change the flow of control very directly by saying:
fr: Une autre chose peu habituelle dans ce débogueur, c'est la capacité d'écarter des cadres <i>[frames]</i> de la pile ; parce que je crois que c'est important, non seulement pour pouvoir examiner ce qui se produit dans le programme que vous déboguez, mais aussi pour le modifier de toutes les façons possibles. De sorte qu'après avoir trouvé un problème et avoir compris ce qui n'allait pas, vous pouvez faire comme si le code était correct et trouver le prochain bogue sans avoir d'abord à recompiler le programme. Cela signifie non seulement pouvoir changer en souplesse les zones de données de votre programme, mais également changer le flux de contrôle. Dans ce débogueur, vous pouvez changer le flux de contrôle très directement en disant :

note: type: Content of: <div><pre>
en: <code>SET $PC=&lt;some number&gt;</code>
fr: <code>SET $PC=&lt;un certain nombre&gt;</code>

note: type: Content of: <div><p>
en: So you can set the program counter.  You can also set the stack pointer, or you can say
fr: Ainsi vous pouvez positionner le compteur ordinal <i>[program counter]</i>. Vous pouvez également positionner le pointeur de pile <i>[stack pointer]</i>, ou bien vous pouvez dire

note: type: Content of: <div><pre>
en: <code>SET $SP+=&lt;something&gt;</code>
fr: <code>SET $SP+=&lt;quelque_chose&gt;</code>

note: type: Content of: <div><p>
en: If you want to increment the stack pointer a certain amount.  But in addition you can also tell it to start at a particular line in the program, you can set the program counter to a particular source line.  But what if you find that you called a function by mistake and you didn't really want to call that function at all? Say, that function is so screwed up that what you really want to do is get back out of it and do by hand what that function should have done.  For that you can use the <code>RETURN</code> command. You select a stack frame and you say <code>RETURN</code>, and it causes that stack-frame, and all the ones within it, to be discarded as if that function were returning right now, and you can also specify the value it should return.  This does not continue execution; it pretends that return happened and then stops the program again, so you can continue changing other things.
fr: si vous voulez incrémenter le pointeur de pile d'une certaine quantité. Mais en outre, vous pouvez également lui dire de démarrer sur une ligne particulière du programme ; vous pouvez placer le compteur ordinal à une ligne particulière du code source. Mais que se passe-t-il si vous constatez que vous avez appelé une fonction par erreur et que vous ne vouliez pas appeler cette fonction du tout ? Vous vous dites que cette fonction est trop merdique, que vous voulez vraiment en sortir et faire à la main ce qu'elle devait faire. Pour cela, vous pouvez utiliser la commande <code>RETURN</code>. Vous sélectionnez un cadre de la pile et vous dites <code>RETURN</code>. Et ça va faire que ce cadre, et tous ceux qui sont à l'intérieur, seront abandonnés comme si cette fonction renvoyait instantanément sa valeur. Vous pouvez aussi spécifier la valeur qu'elle doit renvoyer. Ça ne poursuit pas l'exécution ; ça fait comme si la valeur était renvoyée et le programme s'arrête à nouveau ; vous pouvez ainsi continuer de modifier autre chose.

note: type: Content of: <div><p>
en: And with all these things put together you thus have pretty good control over what's going on in a program.
fr: Et si vous combinez tout ça, vous avez pas mal de contrôle sur ce qui se passe dans un programme.

note: type: Content of: <div><p>
en: In addition one slightly amusing thing: C has string constants, what happens if you use a string constant in an expression that you're computing in the debugger? It has to create a string in the program you were debugging.  Well it does.  It sets up a call to MALLOC in that debugged program, lets MALLOC run, and then gets control back.  Thus it invisibly finds a place to put the string constant.
fr: Une autre chose assez amusante : C a des constantes qui sont des chaînes de caractères <i>[string constants]</i> ; que se passe-t-il si vous utilisez une constante de ce type dans une expression que vous calculez dans le débogueur ? Il faut qu'il crée une chaîne dans le programme que vous déboguez. Eh bien, c'est ce qu'il fait. Il crée un appel à <code>malloc</code> dans le programme débogué, laisse tourner <code>malloc</code>, puis reprend la main. Ainsi il trouve de façon transparente un endroit où placer la chaîne constante.

note: type: Content of: <div><p>
en: Eventually when this debugger is running on the real GNU system, I intend to put in facilities in the debugger to examine all of the internal status of the process that is running underneath it.  For example to examine the status of the memory map, which pages exist, which are readable, which are writable, and to examine the inferior program's terminal status.  There already is a bit of a command; this debugger, unlike the debuggers on Unix, keeps the terminal status completely separate for the debugger and the program you're debugging, so that it works with programs that run in raw mode, it works with programs that do interrupt driven input, and there's also a command that enables you to find out something about the terminal settings at the program you're debugging is actually using.  I believe that in general a debugger should allow you to find out everything that's going on in the inferior process.
fr: Quand ce débogueur tournera enfin sur le vrai système GNU, j'ai l'intention d'y installer des fonctionnalités pour examiner l'ensemble des états internes du processus tournant en dessous de lui. Par exemple pour examiner l'état de la topographie mémoire, pour savoir quelles pages existent, si elles sont lisibles, si elles sont inscriptibles, et pour examiner l'état du terminal pour le programme inférieur. Il y a déjà l'ébauche d'une commande ; ce débogueur, à la différence des débogueurs sous Unix, garde l'état du terminal du débogueur et celui du programme que vous déboguez complètement séparés. De sorte que ça marche avec les programmes qui tournent en mode brut et avec ceux qui font des interruptions d'entrées dynamiques <i>[interrupt driven input]</i> ; et il y a également une commande qui vous permet d'apprendre quelque chose sur les réglages des terminaux que le programme que vous déboguez utilise réellement. Je crois qu'en général un débogueur doit vous permettre de découvrir tout qui se passe dans le processus inférieur.

note: type: Content of: <div><p>
en: There are two other main parts of the GNU system that already exist.  One is the new C compiler, and one is the TRIX kernel.
fr: Deux autres parties centrales du système GNU existent déjà. L'un est le nouveau compilateur C et l'autre le noyau Trix.

note: type: Content of: <div><p>
en: The new C compiler is something that I've written this year since last spring.  I finally decided that I'd have to throw out PASTEL.  This C compiler uses some ideas taken from PASTEL, and some ideas taken from the University of Arizona Portable Optimizer.  Their interesting idea was to handle many different kinds of machines by generating simple instructions, and then combining several simple instructions into a complicated instruction when the target machine permits it.  In order to do this uniformly, they represent the instructions in algebraic notation.  For example, an ADD instruction might be represented like this:
fr: J'ai commencé à écrire le nouveau compilateur C cette année, au printemps dernier. J'ai finalement décidé que je devais me passer de Pastel. Ce compilateur utilise quelques idées de Pastel et quelques idées de « l'optimiseur portable de l'université d'Arizona » <i>[University of Arizona Portable Optimizer]</i>. Ce que ce dernier a d'intéressant, c'est de gérer plusieurs types différents de machines par des instructions simples et d'ensuite combiner plusieurs instructions simples dans une seule instruction compliquée quand la machine cible le permet. Pour que cela reste uniforme, ils représentent les instructions en notation algébrique. Par exemple, l'instruction <code>add</code> peut être représentée comme ceci :

note: type: Content of: <div><p>
en: This would be a representation inside their compiler for instruction to take the contents of register two, add four and store it in register three.  In this fashion you can represent any possible instruction for any machine.  So they actually did represent all the instructions this way and then when it came time to try to combine them, they would do this by substituting one expression into another, making a more complicated algebraic expression for the combined instruction.
fr: C'est une représentation interne au compilateur de l'instruction « prendre le contenu du registre n&deg;2, y ajouter 4 et le stocker dans le registre n&deg;3 ». De cette façon vous pouvez représenter n'importe quelle instruction pour n'importe quelle machine. C'est donc comme ça qu'ils représentent toutes les instructions. Quand vient le moment d'essayer de les combiner, ils le font en substituant une expression dans une autre, ce qui donne pour l'instruction combinée une expression algébrique plus compliquée.

note: type: Content of: <div><p>
en: Sometimes depending on whether the result of the first instruction had any further use, it might be necessary to make a combined instruction with two assignment operators.  One for this value [pointing at ???] and another one with this value [pointing at ???] substituted in it with what came from the second instruction.  But if this value was only used that once, you could eliminate it after substituting for it; there'd be no need to compute it any more.  So it's actually somewhat complicated doing the substitution correctly checking that the intervening instructions don't change any of these values and other such things.  When you support such things as auto-increment and auto-decrement addressing, which I do now, you also have to do various checks for those to check for situations where what you're doing is not value preserving.
fr: Quelquefois, suivant que le résultat de la première instruction est utile par la suite, ou pas, il peut être nécessaire de faire une instruction combinée avec deux opérateurs d'affectation <i>[assignment]</i> : un pour cette valeur [il montre un endroit de l'écran] et un autre pour cette valeur [il montre un autre endroit] à l'intérieur de laquelle est substitué ce qui provient de la deuxième instruction. Si cette valeur n'est utilisée qu'une fois, vous pouvez l'éliminer après l'avoir substituée ; elle n'a pas à entrer dans d'autres calculs. Donc c'est vraiment assez compliqué de faire ces substitutions correctement, en vérifiant bien que les instructions intermédiaires ne vont changer aucune de ces valeurs, ni rien d'autre du même genre. Quand vous gérez des choses comme l'adressage auto-incrémenté et auto-décrémenté, ce que je fais maintenant, vous avez aussi diverses vérifications à faire pour détecter les situations où l'objectif n'est pas de conserver la valeur de la variable.

note: type: Content of: <div><p>
en: But after checking all those things, then you take the substituted combined expression and put it through a pattern matcher, which recognizes all the valid instructions of your chosen target machine.  And if it's recognized, then you replace those two instructions with the combined one, otherwise you leave them alone.  And their technique is to combine two or three instructions related by data flow in this way.
fr: Mais après avoir vérifié tout ça, vous prenez l'expression combinée substituée et vous la passez à travers un filtre de motif <i>[pattern matcher]</i>, qui reconnaît toutes les instructions valides de la machine cible que vous avez choisie. Si le motif est reconnu, vous remplacez les deux instructions par leur instruction combinée, sinon vous les laissez tranquilles. Leur technique est de combiner de cette manière deux ou trois instructions reliées par le flux de données.

note: type: Content of: <div><p>
en: In the Arizona compiler, they actually represent things as text strings like this, and their compiler is horribly slow.  First I had some idea of just using their compiler and making changes in it, but it was clear to me I had to rewrite it entirely to get the speed I wanted, so I have rewritten it to use list structure representations for all these expressions.  Things like this:
fr: Dans le compilateur d'Arizona, les choses sont en fait représentées par des chaînes de caractères comme ceci, et le compilateur est terriblement lent. Au début j'avais l'idée de l'utiliser et d'y apporter des modifications, mais j'ai compris que je devais le réécrire entièrement pour obtenir la rapidité que je voulais. En le réécrivant, j'ai fait en sorte de pouvoir utiliser des représentations de structure de liste pour toutes ces expressions ; des choses comme ceci :

note: type: Content of: <div><p>
en: This looks like Lisp, but the semantics of these are not quite LISP, because each symbol here is one recognized specially.  There's a particular fixed set of these symbols that is defined, all the ones you need.  And each one has a particular pattern of types of arguments, for example: <code>reg</code> always has an integer, because registers are numbered, but <code>+</code> takes two subexpressions, and so on.  And with each of these expressions is also a data type which says essentially whether it's fixed or floating and how many bytes long it is.  It could be extended to handle other things too if you needed to.
fr: Ça ressemble un peu à du Lisp mais la sémantique n'est pas tout à fait la même, parce que chaque symbole est ici identifié individuellement. Un ensemble fixe, particulier de ces symboles est défini, tous ceux dont vous avez besoin, chacun ayant une combinaison particulière de types d'arguments. Pour <code>reg</code> par exemple, c'est toujours un nombre entier, parce que les registres sont numérotés, mais <code>+</code> prend deux sous-expressions, et ainsi de suite. Et chacune de ces expressions a aussi un type de données qui, en gros, indique s'il est fixe ou flottant et combien d'octets il occupe. Ça peut être étendu pour manipuler d'autres choses si vous en avez besoin.

note: type: Content of: <div><p>
en: And the way I do automatic register allocation is that when I initially generate this code, and when I do the combination and all those things, for every variable that conceivably go into a register, I allocate what I call a pseudo register number, which is a number starting at sixteen or whatever is too high to be a real register for your target machine.  So the real registers are numbered zero to fifteen or whatever and above that comes pseudo registers.  And then one of the last parts of the compiler consists of going through and changing all the pseudo registers to real registers.  Again it makes a conflict graph, it sees which pseudo registers are alive at the same point and they of course can't go in the same real register, and then it tries packing pseudo registers into real registers as much as it can, ordering them by priority of how important they are.
fr: Voilà comment je fais l'allocation automatique de registre : au moment où je génère initialement le code, et quand je fais la combinaison et le reste, pour toute variable qui entre théoriquement dans un registre j'alloue ce que j'appelle un pseudo-numéro de registre. C'est un nombre qui commence à seize, ou autre nombre trop élevé pour désigner un vrai registre de la machine cible. Les vrais registres sont numérotés de zéro à quinze (ou autre), et après viennent les pseudo-registres. Et là, une des dernières opérations consiste à examiner tous les pseudo-registres et à les changer en vrais registres. À nouveau, le compilateur fait un schéma des conflits, il voit quels pseudo-registres sont actifs en même temps – ils ne peuvent naturellement pas entrer dans le même vrai registre – et essaie de regrouper les pseudo-registres dans de vrais registres autant que possible, en les rangeant par ordre d'importance.

note: type: Content of: <div><p>
en: And finally it then has to correct the code for various problems, such as happen when there were pseudo registers that don't fit in the real registers, that had to be put into stack slots instead.  When that happens on certain machines, some of the instructions may become invalid.  For example on the 68000 you can add a register into memory and you can add memory into register, but you can't add one memory location into another.  So if you have an ADD instruction, and you're headed for a 68000 and both of the things end up in memory, it's not valid.  So this final pass goes through and copies things into registers and out of registers as needed to correct those problems.
fr: Et à la fin, il doit corriger le code pour différents problèmes, tels qu'il peut s'en produire si des pseudo-registres ne trouvent pas place dans les vrais registres et doivent être mis à la place dans des <i>slots</i> de la pile. Sur certaines machines, des instructions peuvent devenir invalides quand ça arrive. Par exemple sur le 68000, on peut ajouter depuis un registre dans la mémoire et ajouter depuis la mémoire dans un registre mais pas ajouter depuis une adresse mémoire vers une autre. Par exemple, si lors d'une instruction ADD vous sortez vers un 68000 et que les deux éléments se retrouvent dans la mémoire, ce n'est pas valide. Donc ce dernier passage examine le tout et copie au besoin des éléments dans les registres ou en dehors des registres, pour corriger ce genre de problème.

note: type: Content of: <div><p>
en: Problems can also arise with index registers.  If you're trying to index by something, then most of the time that code will become invalid if the index quantity is in memory, except in a few cases on some machines where you can it with indirect addressing.  In the cases when you're doing auto-increment on an index register you may have to copy the value into a register, do the instruction, and then copy the incremented value back to the memory slot where it really lives.
fr: Des problèmes peuvent également survenir avec les registres d'index. Si vous essayez d'indexer par quelque chose, la plupart du temps le code deviendra invalide si cette quantité est en mémoire, sauf dans quelques cas, sur certaines machines où vous pouvez le faire avec un adressage indirect. Lorsque vous procédez à une autoincrémentation sur un registre d'index, vous pouvez avoir à copier la valeur dans un registre, effectuer l'instruction et ensuite recopier la valeur incrémentée dans le <i>slot</i> de mémoire où elle vit vraiment.

note: type: Content of: <div><p>
en: There's got room for a lot of hair, and I've not finished implementing all the hair needed to make really fully efficient.
fr: Il y a encore de la marge pour pas mal de prises de tête, et je n'ai pas fini d'implémenter tout ce qui est nécessaire pour le rendre vraiment pleinement efficace.

note: type: Content of: <div><p>
en: This compiler currently works by having a parser which turns C code into effectively a syntax tree annotated with C datatype information.  Then another pass which looks at that tree and generates code like this [LISP like code].  Then several optimization passes.  One to handle things like jumps across jumps, jumps to jumps, jumps to <code>.+1</code>, all of which can be immediately simplified.  Then a common subexpression recognizer, then finding basic blocks, and performing dataflow-analysis, so that it can tell for each instruction which values are used in that instruction and never used afterward.  And also linking each instruction to the places where the values it uses were generated, so if I have one instruction which generates pseudo register R[28], and then another instruction later which uses R[28] and it's the first place to use R[28], I make the second one point back to the first one, and this pointer is used to control the attempts to combine the instructions.  You don't combine adjacent instructions, you combine an instruction that uses a value with the instruction that produced that value.  Even if there are other instructions in between, they don't matter for this, you just have to check them to make sure they don't do anything to interfere.  Then after the combiner comes the dynamic register allocator, and finally something to convert it into assembly code.
fr: Ce compilateur fonctionne actuellement avec un analyseur syntaxique qui transforme efficacement le code C en arbre syntaxique, annoté d'informations sur le type de données C. Après ça, un autre passage examine cet arbre et produit du code comme celui-là [comme du Lisp]. Ensuite viennent plusieurs passages d'optimisation : un pour traiter par exemple les sauts à travers des sauts, les sauts aboutissant à des sauts, les sauts à <code>.+1</code> et tout ce qui peut être immédiatement simplifié ; puis la reconnaissance des sous-expressions communes ; puis la recherche des blocs de base et l'analyse du flux de données, afin de pouvoir indiquer pour chaque instruction quelles valeurs sont utilisées dans l'instruction et nulle part ailleurs ; et aussi la liaison entre chaque instruction et les endroits où les valeurs utilisées ont été créées. Ainsi, quand j'ai une instruction qui crée un pseudo-registre R[28] et une autre instruction plus tard qui utilise R[28], sachant que c'est le premier endroit qui utilise R[28], je fais pointer la seconde en arrière sur la première et ce pointeur est celui qui servira pour contrôler les essais de combinaison des instructions. Vous ne combinez pas des instructions adjacentes, vous combinez une instruction qui utilise une valeur avec l'instruction qui a produit cette valeur. Même s'il y a d'autres instructions au milieu, elles ne sont pas concernées ; vous avez juste à vous assurer qu'elles n'interviennent pas. Et après le combinateur vient l'allocateur dynamique de registres, et enfin quelque chose pour faire la conversion en code assembleur.

note: type: Content of: <div><p>
en: In the Arizona compiler the instruction recognizer was generated with LEX.  Your machine description was simply a LEX program that LEX would turn into a C function to recognize valid instructions as strings.  What I have is instead a special purpose decision tree that's generated from a machine description written in this syntax as if it were LISP.  And this recognizer is used as a subroutine for many different parts of the compiler.
fr: Dans le compilateur d'Arizona, le système de reconnaissance d'instructions a été créé avec Lex. La description de votre machine est simplement un programme Lex, que Lex transforme en une fonction C pour identifier les instructions valides sous forme de chaînes. À la place, j'ai un arbre de décision particulier, créé à partir d'une description de la machine écrite dans cette syntaxe qui ressemble au Lisp. Et ce système de reconnaissance est utilisé comme sous-programme dans plusieurs parties différentes du compilateur.

note: type: Content of: <div><p>
en: Currently this compiler runs about as fast as PCC.  It runs noticeably faster if you tell it not to do the hairy register allocation, in which case it allocates registers the same way as PCC does.  In its super hairy mode it does a much better job of allocating registers than PCC, and I observe that for the VAX it generates the best code I've seen from any C compiler on the VAX.
fr: Actuellement ce compilateur fonctionne à peu près aussi rapidement que le <abbr title="Portable C Compiler">PCC</abbr>. Il fonctionne sensiblement plus rapidement si vous lui dites de ne pas faire d'allocation de registre limite. Dans ce cas il alloue les registres de la même manière que le PCC. Dans son mode super-limite, il fait un travail d'allocation de registres bien meilleur que le PCC et je constate que pour le VAX, il produit le meilleur code que j'aie vu de tous les compilateurs C sur VAX.

note: type: Content of: <div><p>
en: For the 68000 the code is still not ideal.  I can see places where early stages do things that are not the best, because it can't fully look ahead.  It has a choice in an early stage, and it does the thing that it thinks is going to be best, but really if it did the other one, a later stage is actually smart enough to do something even better.  But the early stage doesn't know what the later stage is going to do, so I have more work to do on some of these things.
fr: Pour le 68000, le code n'est pas encore idéal. Je peux voir par endroits, aux étapes précoces, se passer des choses qui ne sont pas forcément optimales parce qu'il ne peut pas vraiment anticiper. Il a un choix à faire à une étape précoce et il fait ce qu'il pense être le mieux. Or s'il avait fait un autre choix, une étape ultérieure aurait été assez intelligente pour faire encore mieux. Mais l'étape précoce ne sait pas ce que l'étape ultérieure va faire, donc je dois retravailler certaines choses.

note: type: Content of: <div><p>
en: Sometimes this causes it to free up registers unnecessarily.  Because when things wind up in memory and it needs to copy them into registers, it needs to get registers to copy them into.  This means taking registers that it has already allocated to, and kicking those temporary quantities out to stack slots.  Of course this may invalidate more instructions now that those things are in memory, not registers, so it has to check again and again.  Sometimes it thinks it has to copy things to registers and really it isn't going to have to, so it may free up too many things and thus not use all the registers that it could.
fr: Parfois ça lui fait libérer des registres inutilement : quand des choses atterrissent dans la mémoire et qu'il a besoin de les copier dans des registres, il faut qu'il trouve des registres. Cela veut dire prendre des registres déjà alloués et virer les données temporaires des <i>slots</i> de la pile. Évidemment, maintenant que ces choses sont dans la mémoire plutôt que dans les registres, ça peut invalider certaines instructions, donc il lui faut tout le temps vérifier. Parfois il pense à tort qu'il devrait copier des choses dans les registres, alors il arrive qu'il en libère trop et n'utilise pas tous les registres qu'il pourrait.

note: type: Content of: <div><p>
en: <span>[Question: Do you have a code generator for 32000?]</span> Not yet, but again, it's not a code generator it's just a machine description that you need.  A list of all the machine instructions described in this [LISP like] form.  So in fact aside from the work of implementing the idea of constraints on which arguments can be in registers and which kind of registers, which is something which was needed for the 68000 and was not needed for the VAX, the work of porting this compiler from the VAX to the 68000 just took a few days.  So it's very easy to port.
fr: <span>[Question : Avez-vous un générateur de code pour le 32000 ?]</span>Pas encore, mais je le répète, ce n'est pas un générateur de code dont vous avez besoin, juste une description de machine, une liste de toutes les instructions de la machine décrites sous cette forme [comme du Lisp]. En fait, hormis le travail d'implémenter l'idée des contraintes qui déterminent quels arguments peuvent aller dans les registres et dans quelles sortes de registres ils iront – travail nécessaire pour le 68000, mais pas pour le VAX – le portage de ce compilateur du VAX au 68000 a juste pris quelques jours. Donc il est très facile à porter.

note: type: Content of: <div><p>
en: The compiler currently generates assembler code and it can generate debugging information either in the format that DBX wants, or in the special internal format of GDB.  I'd say the only work needed on this compiler is in three areas.  One: I have to add a &ldquo;profiling&rdquo; feature, like the one that the Unix compilers have.  Two: I have to make these register allocation things smarter, so that I can stop seeing stupid things appearing in the output.  And three: There are various bugs, things that doesn't handle correctly yet, although it has compiled itself correctly.  I expect this will just take a few months, and then I will release the compiler.
fr: Le compilateur produit actuellement du code assembleur et il peut produire de l'information de débogage, soit dans le format voulu par DBX, soit dans le format interne spécial à GDB. Je dirais que le seul travail qui reste à faire sur ce compilateur se situe à trois niveaux. Un : Je dois ajouter un dispositif de « profilage » comme celui des compilateurs d'Unix. Deux : Je dois rendre les allocations de registre plus intelligentes pour ne plus voir de choses stupides apparaître en sortie. Trois : Il y a divers bogues, des choses qu'il ne traite pas encore correctement bien qu'il se soit compilé correctement. Je pense que ça ne prendra que quelques mois, ensuite je le publierai.

note: type: Content of: <div><p>
en: The other sizable part of the system that exist, is the kernel.  <span>[Question: A pause?]</span> Ah, yeah I guess we've forgotten about breaks.  Why don't I finish talking about the kernel, which should only take about five minutes, and then we can take a break.
fr: L'autre partie importante du système existant, c'est le noyau. <span>[Question : Une pause ?]</span> Ah, ouais, je suppose que nous avons oublié les coupures. Pourquoi est-ce que je ne finirais pas de parler du noyau, ce qui ne devrait pas prendre plus de cinq minutes ? Ensuite nous pourrons faire une coupure.

note: type: Content of: <div><p>
en: Now, for the kernel I am planning to use a system called TRIX (it doesn't stand for anything that I know of) which was developed as a research project at MIT.  This system is based on Remote Procedure Call.  Thus programs are called domains.  Each domain is a address space and various capabilities, and a capability is none other than the ability to call a domain.  Any domain can create &ldquo;capability ports&rdquo; to call it, and then it can pass these ports to other domains, and there is no difference between calling the system and calling another user domain.  In fact you can't tell which you have.  Thus it is very easy to have devices implemented by other user programs.  A file system could be implemented by a user program, transparently.  It's also transparent to communicate across networks.  You think that you're directly calling another domain, but really you're calling the network server domain. It takes the information that you gave in the call, and passes this over the network to another server program which then calls the domain that you're trying to talk to.  But you and that other domain see this as happening invisibly.
fr: Donc, pour le noyau je projette d'utiliser un système appelé TRIX (cela ne signifie rien de spécial, que je sache) qui a été développé comme projet de recherche au MIT. Ce système est basé sur l'appel de procédure à distance <i>[Remote Procedure Call]</i>. Les programmes sont appelés domaines. Chaque domaine est un espace d'adressage et a diverses capacités, une capacité n'étant rien d'autre que l'aptitude à appeler un domaine. Tout domaine peut créer des « ports de capacité » <i>[capability ports]</i> pour l'appeler et peut passer ces ports aux autres domaines. Et il n'y a aucune différence entre appeler le système et appeler un autre domaine utilisateur. En fait vous ne pouvez pas dire lequel vous avez. Ainsi il est très facile de faire implémenter des dispositifs par d'autres programmes utilisateur. Un système de fichiers pourrait être implémenté de façon transparente par ce moyen. Il est également transparent de communiquer à travers des réseaux. Vous pensez que vous appelez directement un autre domaine, mais en réalité vous appelez le domaine du serveur réseau. Il prend l'information que vous avez donnée dans l'appel et la passe par le réseau à un autre programme serveur qui appelle alors le domaine auquel vous essayez de parler. Mais pour vous et cet autre domaine, cela se passe de manière transparente.

note: type: Content of: <div><p>
en: The TRIX kernel runs, and it has a certain limited amount of Unix compatibility, but it needs a lot more.  Currently it has a file system that uses the same structure on disk as the ancient Unix file system does.  This made it easier to debug the thing, because they could set up the files with Unix, and then they could run TRIX, but that file system doesn't have any of the features that I believe are necessary.
fr: Le noyau TRIX fonctionne et il a une compatibilité limitée avec Unix, mais il lui en faut beaucoup plus. Actuellement son système de fichiers utilise la même structure sur disque que l'ancien système de fichiers d'Unix. Ça rendait plus facile le débogage parce qu'ils pouvaient installer les fichiers avec Unix et donc faire fonctionner TRIX, mais ce système de fichiers n'a aucune des fonctionnalités que je trouve nécessaires.

note: type: Content of: <div><p>
en: Features that I believe must be added include: Version numbers, undeletion, information on when and how and where the file was backed up on tape, atomic superseding of files.  I believe that it is good that in Unix when a file is being written, you can already look at what's going there, so for example, you can use <code>tail</code> to see how far the thing got, that's very nice.  And if the program dies, having partly written the file, you can see what it produced.  These things are all good, but, that partly written output should not ever be taken for the complete output that you expected to have eventually.  The previous version of that should continue to be visible and used by everyone who tries to use it, until the new version is completely and correctly made.  This means that the new version should be visible in the file system but not under the name it is supposed to have.  It should get renamed when it's finished.  Which is by the way what happens in ITS, although there each user program has to do this explicitly.  For Unix compatibility with the user programs, it has to happen invisibly.
fr: Voilà les fonctionnalités qui, je pense, devraient être rajoutées : des numéros de version, la restauration des fichiers effacés, les informations sur quand, comment et où le dossier a été sauvegardé sur bande, le remplacement nucléaire des fichiers. Ce qui est bien dans Unix, d'après moi, c'est que lorsqu'un fichier est en cours d'écriture, on peut déjà regarder ce qui se passe. Ainsi par exemple, vous pouvez utiliser <code>tail</code> pour voir où ça en est ; c'est vraiment sympa. Et si le programme se plante après avoir écrit le fichier partiellement, vous pouvez voir ce qu'il a fait. Tout ça c'est très bien, mais le résultat partiellement écrit ne doit jamais être considéré comme le résultat final escompté. La version précédente doit continuer d'être visible et utilisée par tous ceux qui tentent de l'utiliser jusqu'à ce qu'une nouvelle version soit entièrement et correctement réalisée. Cela signifie que la nouvelle version devra être visible dans le système de fichiers, mais pas sous le nom qu'elle est censée avoir. Elle devra être renommée quand c'est fini. C'est d'ailleurs ce qui se passe avec ITS, bien que chaque programme utilisateur doive le faire de façon explicite. Pour la compatibilité d'Unix avec les programmes utilisateur, ça doit se passer de façon transparente.

note: type: Content of: <div><p>
en: I have a weird hairy scheme to try to make version numbers fit with the existing Unix user programs.  And this is the idea that you specify a file name leaving the version number implicit, if you just specify the name in the ordinary way.  But if you wish to specify a name exactly, either because you want to state explicitly what version to use, or because you don't want versions at all, you put a point at the end of it.  Thus if you give the filename <code>FOO</code> it means &ldquo;Search the versions that exists for FOO and take the latest one.&rdquo; But if you say <code>FOO.</code> it means &ldquo;use exactly the name FOO and none other.&rdquo; If you say <code>FOO.3.</code> it says &ldquo;use exactly the name FOO.3&rdquo; which of course is version three of FOO and none other.  On output, if you just say <code>FOO</code>, it will eventually create a new version of FOO, but if you say <code>FOO.</code> it will write a file named exactly FOO.
fr: J'ai un plan bizarre et plutôt coton pour essayer de faire coller les numéros de version avec les programmes utilisateur existant sous Unix. Il s'agit de spécifier le nom de fichier, en laissant implicite le numéro de version si vous le spécifiez normalement. Et si vous souhaitez le faire de façon explicite – soit parce que vous voulez déclarer explicitement quelle version utiliser, soit parce que vous ne voulez pas de version du tout – vous mettez un point à son extrémité. Ainsi, si vous donnez le nom de fichier <code>FOO</code> cela signifie « cherche les versions qui existent pour FOO et prends la dernière ». Mais si vous dites <code>FOO.</code> cela signifie « utilise exactement le nom FOO et aucun autre ». Si vous dites <code>FOO.3. » cela veut dire « utilise exactement le nom FOO.3</code>, qui naturellement est la version trois de FOO et aucune autre. En sortie, si vous dites juste <code>FOO</code>, ça va créer une nouvelle version de FOO, mais si vous dites <code>FOO.</code>, ça va écrire un fichier nommé exactement « FOO ».

note: type: Content of: <div><p>
en: Now there's some challenges involved in working out all the details in this, and seeing whether there are any lingering problems, whether some Unix software actually breaks despite feeding them names with points in them and so on, to try to make it get the same behavior.
fr: Maintenant c'est un défi de mettre au point tous ces détails et de voir s'il persiste des problèmes, si vraiment certains logiciels Unix se plantent bien qu'on leur ait fourni des noms avec des points et ainsi de suite, pour tenter de leur faire garder le même comportement.

note: type: Content of: <div><p>
en: I would expect that when you open a file for output whose name ends in a point, you should actually open that name right away, so you get the so you get the same Unix behavior, the partially written output is immediately visible, whereas when you output a name that doesn't end in a point, the new version should appear when you close it, and only if you close it explicitly. If it gets closed because the job dies, or because the system crashes or anything like that, it should be under a different name.
fr: Je m'attends à ce que, si on ouvre un fichier dont le nom finit par un point, on ouvre en fait immédiatement un fichier avec ce nom-là ; on obtient ainsi le même comportement qu'Unix : le résultat partiellement écrit est immédiatement visible. Tandis que, si on l'ouvre avec un nom qui ne finit pas par un point, la nouvelle version ne doit apparaître qu'à la fermeture du fichier, et seulement si on le ferme explicitement. S'il a été fermé parce que la tâche a échoué ou à cause du plantage du système ou de n'importe quoi du genre, il doit être sous un nom différent.

note: type: Content of: <div><p>
en: And this idea can be connected up to &ldquo;star matching,&rdquo; by saying that a name that doesn't end in a point is matched against all the names without their version numbers, so if a certain directory has files like this:
fr: Et cette idée peut être rapprochée de l'utilisation de l'astérisque comme joker <i>[star matching]</i> : un nom qui ne finit pas par un point équivaut à tous les noms sans leur numéro de version. Supposons qu'un certain répertoire ait des fichiers comme ceci :

note: type: Content of: <div><p>
en: If I say <code>*</code>, that's equivalent to
fr: Si je dis <code>*</code>, ça équivaut à

note: type: Content of: <div><p>
en: because it takes all the names and gets rid of their versions, and takes all the distinct ones.  But if I say <code>*.</code> then it takes all the exact names, puts a point after each one, and matches against them.  So this gives me all the names for all the individual versions that exist.  And similar, you can see the difference between <code>*.c</code> and <code>*.c.</code> this [the first] would give you essentially versionless references to all the <code>.c</code> files, whereas this [the second] will give you all the versions &hellip; well this actually wouldn't, you'd have to say <code>*.c.*.</code>; I haven't worked out the details here.
fr: parce que ça prend tous les noms, les débarrasse de leurs versions et conserve tous ceux qui sont distincts. Mais si je dis <code>*.</code>, alors ça prend tous les noms exacts, met un point après chaque nom et cherche les équivalences. Ça me donne tous les noms avec toutes les différentes versions qui existent. Et de la même façon, vous pouvez voir la différence entre <code>*.c</code> et <code>*.c.</code>. Ceci [le premier] vous donnera essentiellement les références sans version de tous les fichiers <code>.c</code>, tandis que cela [le second] vous donnera toutes les versions&hellip; Bon, pas vraiment, vous devriez dire <code>*.c.*.</code>, mais ici je ne tiens pas compte des détails.

note: type: Content of: <div><p>
en: Another thing, that isn't a user visible feature and is certainly compatible to put in, is failsafeness in the file system.  Namely, by writing all the information on disk in the proper order, arranging that you can press &ldquo;<kbd>halt</kbd>&rdquo; at any time without ever corrupting thereby the file system on disk.  It is so well known how to do this, I can't imagine why anyone would neglect it.  Another idea is further redundant information.  I'm not sure whether I'll do this or not, but I have ideas for how to store in each file all of its names, and thus make it possible if any directory on disk is lost, to reconstruct it from the rest of the contents of the disk.
fr: Une autre chose qu'on pourrait ajouter, qui est transparente pour l'utilisateur et est certainement compatible, c'est la tolérance du système de fichiers aux défaillances de la machine. À savoir, écrire toutes les informations sur le disque dans l'ordre approprié, en s'arrangeant pour qu'on puisse presser le bouton <kbd>Arrêt</kbd> à tout moment sans endommager le système de fichiers du disque. C'est tellement connu que je ne peux pas imaginer qu'on puisse le négliger. Une autre idée, c'est d'augmenter la redondance de l'information. Je ne sais pas si je le ferai, mais j'ai des idées sur la façon de stocker dans chaque fichier tous ses noms, ce qui permettrait, si l'un des répertoires du disque est perdu, de le reconstruire à partir du reste du contenu du disque.

note: type: Content of: <div><p>
en: Also I think I know how to make it possible to atomically update any portion of a file.  Thus if you want to replace a certain subrange of a file with new data in such a fashion that any attempt to read the file will either see only the old data, or only the new data.  I believe I can do that, without any locking even.
fr: En outre, je pense savoir comment rendre possible la mise à jour nucléaire de n'importe quelle partie d'un fichier – c'est-à-dire pouvoir remplacer un sous-bloc particulier d'un fichier par de nouvelles données de manière que si on essaie de le lire, on voie, ou bien les nouvelles données, ou bien les anciennes. Je crois que je peux faire ça, sans même de verrouillage.

note: type: Content of: <div><p>
en: For network support, I intend eventually to implement TCP/IP for this system.  I also think it's possible to use KERMIT to get something effectively equivalent to UUCP.
fr: Pour la gestion du réseau, j'ai l'intention par la suite d'implémenter TCP/IP pour ce système. Je pense également qu'il est possible d'utiliser KERMIT pour obtenir quelque chose de pratiquement équivalent à UUCP.

note: type: Content of: <div><p>
en: A shell I believe has already been written.  It has two modes, one imitating the BOURNE shell, and one imitating the C-shell in the same program.  I have not received a copy of it yet, and I don't know how much work I'll have to do on it.  Also many other utilities exists.  A MAKE exists, LS, there's a YACC replacement called BISON which is being distributed.  Something pretty close to a LEX exists, but it's not totally compatible, it needs some work.  And, in general what remains to be done is much less that what's been done, but we still need lots of people to help out.
fr: Un <i>shell</i> a déjà été écrit, je crois. Il a deux modes, l'un imitant le <i>Bourne shell</i> et l'autre imitant le <i>C-shell</i>,<a id="TransNote6-rev" href="#TransNote6"><sup>6</sup></a> dans le même programme. Je n'en ai pas reçu de copie et je ne sais pas combien de travail j'aurai à faire dessus. Il y a encore beaucoup d'autres utilitaires. Un MAKE existe, LS également ; il y a BISON qui remplace YACC et qui est déjà distribué. Il existe quelque chose d'assez proche de LEX, mais qui n'est pas totalement compatible et a besoin d'être retravaillé. Et en général, ce qui reste à faire est beaucoup moins important que ce qui a été fait mais on a toujours besoin de beaucoup de gens pour aider.

note: type: Content of: <div><p>
en: People always ask me &ldquo;When is it going to be finished?&rdquo; Of course I can't know when it's going to be finished, but that's the wrong question to ask me.  If you were planning to pay for it, it would make sense for you to want to know exactly what are you going to get and when.  But since you're not going to pay for it, the right question for you to ask is &ldquo;how can you help make it get finished sooner?&rdquo; I have a list of projects, it is on a file at MIT, and people who are interested in helping could send me mail at this Internet address, and I will send back a list of projects.  (I wonder if this is will work (looking at the chalk)).  Is this readable? This is &ldquo;RMS@GNU.ORG&rdquo; (just follow the bouncing ball.)  And now let's take a break, and after the break, I will say some really controversial things.  So don't leave now.  If you leave now, you're going to miss the real experience.
fr: Les gens me demandent toujours « Quand est-ce que ça sera fini ? » Naturellement je ne peux pas le savoir, mais c'est une mauvaise question. Si vous comptiez payer pour ça, je comprendrais que vous vouliez savoir exactement ce que vous allez obtenir, et quand. Mais puisque vous n'allez pas payer, la bonne question à vous poser est : « Comment peut-on aider pour que ça soit fini plus tôt ? » J'ai une liste de projets dans un dossier au MIT. Les gens qui souhaitent apporter leur aide peuvent m'envoyer un courrier à cette adresse internet et je leur enverrai en retour une liste de projets (je me demande si ça va marcher [en regardant la craie]). Est-ce que c'est lisible ? C'est « RMS@GNU.ORG » (suivez juste la balle magique<a id="TransNote7-rev" href="#TransNote7"><sup>7</sup></a>). Et maintenant faisons une pause, et après la pause, je vais dire des choses vraiment controversées, alors ne partez pas maintenant. Si vous partez maintenant, vous allez rater le clou de la conférence.

note: type: Content of: <div><p>
en: <strong> [Here we had a 15 min. break] </strong>
fr: <strong>[Ici, nous avons eu 15 minutes de pause]</strong>

note: type: Content of: <div><p>
en: I've been asked to announce how you can get copies of GNU software.  Well, one way of course is if you know a friend who has a copy, you can copy it, but if you don't know a friend who has a copy, and you're not on the Internet, you can't FTP it, then you can always order a distribution tape, and send some money to the Free Software Foundation.  Of course free programs is not the same thing as free distribution.  I'll explain this in detail later.
fr: On m'a demandé de faire connaître le moyen d'obtenir des copies des logiciels GNU. Eh bien, un des moyens est évidemment de connaître un ami qui en a un exemplaire. Mais si ce n'est pas le cas et que vous n'êtes pas sur Internet pour le télécharger, alors vous pouvez toujours commander une distribution sur bande et envoyer une certaine somme à la <i>Free Software Foundation</i> (Fondation pour le logiciel libre). Naturellement les programmes libres <i>[free programs]</i>, ce n'est pas la même chose que la distribution gratuite <i>[free distribution]</i>. Je l'expliquerai en détail plus tard.

note: type: Content of: <div><p>
en: Here I have an EMACS manual, of the nicely printed variety.  It has been phototypeset and then offset printed.  Although you can also print it yourself from the sources that come in the EMACS distribution, you can get these copies from the Free Software Foundation.  You can come afterwards and look at this and also this contains an order for you might copy some information from, and this [front] picture has also sometimes been enjoyed.  This [pointing at a figure being chased by RMS riding a gnu] is a scared software hoarder, I'll be talking about him in a moment.
fr: J'ai ici un manuel d'Emacs, du genre bien imprimé. Il a été phototypé puis imprimé en offset. Bien que vous puissiez également l'imprimer vous-même à partir des sources de la distribution d'Emacs, vous pouvez en obtenir des copies de la <i>Free Software Foundation</i>. Vous pouvez venir après pour le regarder. Il contient également un bulletin de commande dont vous pouvez copier les renseignements, de même que ce dessin [de la page de garde] qui a quelquefois du succès : [montrant du doigt un personnage chassé par RMS à cheval sur un gnou] c'est un accapareur de logiciel effrayé, je parlerai de lui dans un moment.

note: type: Content of: <div><p>
en: Software is a relatively new phenomenon.  People started distributing software perhaps thirty years ago.  It was only about twenty years ago that someone had the idea of making a business about it.  It was an area with no tradition about how people did things, or what rights anybody had.  And there were several ideas for what other areas of life you might bring traditions from by analogy.
fr: Le logiciel est un phénomène relativement nouveau. Les gens ont commencé à distribuer du logiciel il y a peut-être trente ans. Il y a seulement vingt ans à peu près que quelqu'un a eu l'idée de faire du commerce avec ça. C'était un secteur sans a-priori sur la façon de faire ou sur les droits que l'on pouvait avoir, mais on avait quelques idées sur les autres domaines de la vie auxquels on pouvait emprunter leurs traditions, par analogie.

note: type: Content of: <div><p>
en: One analogy that is liked by a lot of professors in Europe, is that between programs and mathematics.  A program is sort of a large formula.  Now, traditionally nobody can own a mathematical formula.  Anybody can copy them and use them.
fr: Une analogie appréciée par un bon nombre de professeurs en Europe est celle des mathématiques. Un programme est une sorte de grande formule. Par tradition, personne ne peut posséder une formule mathématique. N'importe qui peut la copier et s'en servir.

note: type: Content of: <div><p>
en: The analogy that's most meaningful to ordinary people is with recipes.  If you think about it, the thing that you have in ordinary life that's most like program is a recipe, it's instructions for doing something.  The differences come because a recipe is followed by a person, not by a machine automatically.  It's true there's no difference between source code and object code for a recipe, but it's still the closest thing.  And no-one is allowed to own a recipe.
fr: L'analogie qui a le plus de sens pour les gens ordinaires, c'est celle des recettes. Si vous y réfléchissez, ce qui ressemble le plus à un programme dans la vie ordinaire, c'est une recette – des instructions pour faire quelque chose. La différence, c'est qu'une recette est suivie par une personne, pas par une machine de façon automatisée. Il est vrai que pour la recette il n'y a pas de différence entre le code source et le code objet, mais cela reste ce qu'il y a de plus proche. Et personne n'est autorisé à posséder une recette.

note: type: Content of: <div><p>
en: But the analogy that was chosen was the analogy with books, which have copyright.  And why was this choice made? Because the people that had the most to gain from making that particular choice were allowed to make the decision.  The people who wrote the programs, not the people who used the programs, were allowed to decide, and they decided in a completely selfish fashion, and as a result they've turned the field of programming into an ugly one.
fr: Mais l'analogie qui a été choisie fut celle des livres, sur lesquels s'applique le copyright. Pourquoi ce choix a-t-il été fait ? Parce que les gens qui avaient le plus à gagner à faire ce choix particulier ont été autorisés à prendre la décision. Les gens qui écrivaient les programmes ont eu le droit de décider, pas ceux qui les utilisaient. Cela a été fait d'une façon totalement égoïste, en transformant le domaine de la programmation en quelque chose de sinistre.

note: type: Content of: <div><p>
en: When I entered the field, when I started working at MIT in 1971, the idea that programs we developed might not be shared was not even discussed.  And the same was Stanford and CMU, and everyone, and even Digital.  The operating system from Digital at that time was free.  And every so often I got pieces of program from Digital system such as a PDP-11 cross assembler, and I ported it to run on ITS, and added lots of features.  It was no copyright on that program.
fr: Quand je suis entré dans ce secteur d'activité, quand j'ai commencé à travailler au MIT en 1971, l'idée que les programmes que nous développions pourraient ne pas être partagés n'était même pas discutée. Même chose à Stanford et à <abbr title="Carnegie Mellon University">CMU</abbr>, et partout ailleurs y compris chez Digital. À cette époque-là, le système d'exploitation de Digital était libre. J'en ai de temps en temps récupéré des morceaux, comme un assembleur multi-compatible pour PDP-11 que j'ai porté sur ITS et auquel j'ai ajouté de nombreuses fonctionnalités. Il n'y avait aucun copyright sur ce programme.

note: type: Content of: <div><p>
en: It was only in the late seventies that this began to change.  I was extremely impressed by the sharing spirit that we had.  We were doing something that we hoped was useful and were happy if people could use it.  So when I developed the first EMACS, and people wanted to start use it outside of MIT, I said that it belongs to the EMACS &ldquo;Commune,&rdquo; that in order to use EMACS you had to be a member of the commune, and that meant that you had the responsibility to contribute all the improvements that you made.  All the improvements to the original EMACS had to be sent back to me so that I could incorporate them into newer versions of EMACS, so that everyone in the community could benefit from them.
fr: C'est seulement vers la fin des années 70 que ça a commencé à changer. J'étais extrêmement marqué par l'esprit de partage que nous avions jusque-là. Nous espérions faire quelque chose d'utile et nous étions heureux si les gens pouvaient s'en servir. Ainsi, quand j'ai développé le premier Emacs et que les gens ont commencé à vouloir l'utiliser en dehors du MIT, j'ai dit qu'il appartenait à la « communauté » Emacs. Pour utiliser Emacs vous deviez être membre de la communauté et ça voulait dire que vous deviez lui apporter en contribution toutes les améliorations que vous aviez faites. Toutes les améliorations de l'Emacs original devaient m'être renvoyées pour que je puisse les incorporer à de nouvelles versions d'Emacs, de manière que chacun dans la communauté puisse en bénéficier.

note: type: Content of: <div><p>
en: But this started to be destroyed when SCRIBE was developed at CMU, and then was sold to a company.  This was very disturbing to a lot of us at many universities, because we saw that this was a temptation placed in front of everyone, that it was so profitable to be uncooperative and those of us who still believed in cooperation had no weapon to try to compel people to cooperate with us.  Clearly, one after another, people would defect and stop cooperating with the rest of society, until only those of us with very strong consciences would still cooperate.  And that's what happened.
fr: Mais ça a commencé à se dégrader quand Scribe a été développé à CMU, puis vendu à une entreprise. Cela a dérouté beaucoup d'entre nous, dans de nombreuses universités, parce que nous avons vu quelle tentation c'était pour chacun et à quel point il était profitable d'être peu coopératif. Et ceux d'entre nous qui y croyaient toujours n'avaient aucune arme pour tenter de convaincre les autres de coopérer avec nous. Sans aucun doute, les uns après les autres, ils allaient déserter et cesser de coopérer avec le reste de la société, jusqu'à ce qu'il ne reste plus que ceux d'entre nous qui avaient des consciences très fortes. Et c'est ce qui s'est passé.

note: type: Content of: <div><p>
en: The field of programming has now become an ugly one, where everyone cynically thinks about how much money he is going to get by not being nice to the other people in the field, and to the users.
fr: La programmation est maintenant devenue un domaine sinistre, où chacun pense de façon cynique à combien il va gagner à ne pas être sympa avec les autres programmeurs, ni avec les utilisateurs.

note: type: Content of: <div><p>
en: I want to establish that the practice of owning software is both materially wasteful, spiritually harmful to society and evil.  All these three things being interrelated.  It's spiritually harmful because it involves every member of society who comes in contact with computers in a practice that is obviously materially wasteful to other people.  And every time you do something for your own good, which you know is hurting other people more that it helps you, you have to become cynical in order to support such a thing in your mind.  And it's evil because it is deliberately wasting the work done in society and causing social decay.
fr: Je veux montrer que la pratique de posséder le logiciel est à la fois matériellement inutile, moralement nuisible à la société, et malfaisante, ces trois choses étant interdépendantes. C'est moralement nocif parce que ça engage chaque membre de la société qui entre en contact avec l'informatique dans une pratique qui est manifestement du gaspillage pour les autres. Et chaque fois que vous faites pour votre bien personnel une chose dont savez qu'elle fait plus de mal aux autres qu'elle ne vous aide, vous êtes obligé de devenir cynique pour pouvoir en supporter la pensée. Et c'est malfaisant parce que ça gaspille délibérément le travail effectué sur la société, en affaiblissant le lien social.

note: type: Content of: <div><p>
en: First I want to explain the kinds of harm that are done by attempts to own software and other information that's generally useful, then I'll go on to rebut the arguments made to support that practice, and then I want to talk about how to fight that phenomenon, and how I'm fighting it.
fr: D'abord je veux expliquer les différentes nuisances causées par les tentatives de posséder le logiciel ou, plus généralement, toute autre information utile, puis je m'appliquerai à réfuter les arguments des défenseurs de cette pratique, ensuite je voudrais parler de la façon de combattre ce phénomène et dire comment je m'y prends moi-même.

note: type: Content of: <div><p>
en: The idea of owning information is harmful in three different levels.  Materially harmful on three different levels, and each kind of material harm has a corresponding spiritual harm.
fr: L'idée de posséder l'information est nocive à trois niveaux différents. Matériellement nocive à trois niveaux différents. Et à chaque type de nocivité matérielle correspond une nocivité morale.

note: type: Content of: <div><p>
en: The first level is just that it discourages the use of the program, it causes fewer people to use the program, but in fact it takes no less work to make a program for fewer people to use.  When you have a price on the use of a program this is an incentive, that's the word these software hoarders love to use, the price is an incentive for people not to use the program, and this is a waste.  If for example only half as many people use the program because it has a price on it, the program has been half wasted.  The same amount of work has produced only half as much wealth.
fr: Au premier niveau, c'est juste que ça décourage l'utilisation du programme. Il y a moins de gens qui utilisent le programme, mais ça ne demande pas moins de travail pour l'élaborer. Quand on met un prix sur l'utilisation d'un programme en tant qu'« incitation », c'est le mot que ces accapareurs de logiciel aiment à employer, c'est une incitation pour les gens à ne pas l'utiliser et c'est du gâchis. Si par exemple il y a deux fois moins de gens qui utilisent le programme à cause de son prix, le programme a été à moitié gaspillé. La même quantité de travail a produit moitié moins de richesse.

note: type: Content of: <div><p>
en: Now in fact, you don't have to do anything special to cause a program to get around to all the people who want to use it, because they can copy it themselves perfectly well, and it will get to everyone.  All you have to do after you've written the program is to sit back and let people do what they want to do.  But that's not what happens; instead somebody deliberately tries to obstruct the sharing of the program, and in fact, he doesn't just try to obstruct it, he tries to pressure other people into helping.  Whenever a user signs a nondisclosure agreement he has essentially sold out his fellow users.  Instead of following the golden rule and saying, &ldquo;I like this program, my neighbor would like the program, I want us both to have it,&rdquo; instead he said, &ldquo;Yeah, give it to me.  To hell with my neighbor! I'll help you keep it away from my neighbor, just give it to me!&rdquo; and that spirit is what does the spiritual harm.  That attitude of saying, &ldquo;To hell with my neighbors, give ME a copy.&rdquo;
fr: En fait, vous n'avez rien de spécial à faire pour qu'un programme soit diffusé vers tous ceux qui veulent l'utiliser, parce qu'ils peuvent parfaitement le copier eux-mêmes et qu'il finit par atteindre tout le monde. Tout ce que vous avez à faire, après avoir écrit le programme, c'est de vous asseoir tranquillement et de laisser les gens faire ce qu'ils veulent. Mais ce n'est pas ce qu'il se passe. Au lieu de ça, quelqu'un essaye délibérément d'entraver le partage du programme. Mais il ne tente pas simplement de l'entraver, il essaie de pousser les autres à l'aider. Toutes les fois qu'un utilisateur signe un accord de confidentialité, c'est comme s'il trahissait ses camarades utilisateurs. Au lieu de suivre la règle d'or et de dire « J'apprécie ce programme, mon voisin le voudrait aussi, je veux que nous l'ayons tous les deux », il dit « Ouais, donnez-le-moi. Au diable mon voisin ! Je vous aiderai à le maintenir hors de sa portée. Ne le donnez qu'à moi ! » C'est cet état d'esprit qui est source de nuisance morale, cette attitude qui consiste à dire : « Au diable mes voisins, donnez-m'en, à MOI, une copie. »

note: type: Content of: <div><p>
en: After I ran into people saying they wouldn't let me have copies of something, because they had signed some secrecy agreement, then when somebody asked me to sign a thing like that I knew it was wrong.  I couldn't do to somebody else the thing that had made me so angry when it was done to me.
fr: Après être tombé sur des gens qui disaient qu'ils ne me laisseraient pas avoir de copies parce qu'ils avaient signé un accord de confidentialité, quand quelqu'un me demandait de signer un truc comme ça je savais que c'était mal. Je ne pouvais pas faire à quelqu'un d'autre ce qui m'avait tant exaspéré quand on me l'avait fait à moi.

note: type: Content of: <div><p>
en: But this is just one of the levels of harm.  The second level of harm comes when people want to change the program, because no program is really right for all the people who would like to use it.  Just as people like to vary recipes, putting in less salt say, or maybe they like to add some green peppers, so people also need to change programs in order to get the effects that they need.
fr: Mais ce n'est que le premier niveau de nocivité. Le deuxième niveau se manifeste quand les gens veulent modifier le programme, parce qu'un programme ne satisfait jamais vraiment tous ceux qui voudraient l'utiliser. Tout comme ils aiment varier les recettes, disons, en mettant moins de sel – ou peut-être aiment-ils rajouter des poivrons verts – les gens doivent également pouvoir modifier les programmes pour obtenir les résultats dont ils ont besoin.

note: type: Content of: <div><p>
en: Now, the software owners don't really care whether people can change the program or not, but it's useful for their ends to prevent people.  Generally when software is proprietary you can't get the sources, you can't change it, and this causes a lot of wasted work by programmers, as well as a lot of frustration by users.  For example: I had a friend who told me how she worked for many months at a bank where she was a programmer, writing a new program.  Now, there was a commercially available program that was almost right, but it was just not quite the thing they needed, and in fact as it was it was useless for them.  The amount of change it would have taken to make it do what they needed was probably small, but because the sources of that program were not available, that was impossible.  She had to start over from scratch and waste a lot of work.  And we can only speculate about what fraction of all the programmers in the world are wasting their time in this fashion.
fr: Les propriétaires de logiciel ne s'inquiètent pas vraiment de savoir si les gens peuvent modifier le programme ou non, mais les en empêcher leur est utile pour parvenir à leurs fins. Généralement, quand un logiciel est propriétaire, vous ne pouvez pas obtenir les sources ; vous ne pouvez pas le modifier et c'est un grand gaspillage de travail pour les programmeurs, aussi bien qu'une grande frustration pour les utilisateurs. Par exemple, une amie m'a dit qu'elle avait travaillé pendant de nombreux mois dans une banque où elle était programmeuse pour écrire un nouveau programme. Or il y avait un programme disponible dans le commerce qui était presque bon, mais qui n'était pas tout à fait ce dont ils avaient besoin. Et tel quel, il leur était inutile. Cela ne demandait probablement qu'un changement minime, mais comme les sources de ce programme n'étaient pas disponibles c'était impossible. Elle a dû repartir de zéro et perdre beaucoup de temps. Et nous ne pouvons que spéculer sur la fraction de l'ensemble des programmeurs, partout dans le monde, qui perdent leur temps de cette façon.

note: type: Content of: <div><p>
en: And then there is also the situation where a program is adequate make do, but it's uncomfortable.  For example: The first time we had a graphics printer at MIT, we wrote the software ourselves, and we put in lots of nice features, for example it would send you a message when your job had finished printing, and it would send you a message if the printer ran out of paper and you had a job in the queue, and lots of other things that were what we wanted.  We then got a much nicer graphic printer, one of the first laser printers, but then the software was supplied by Xerox, and we couldn't change it.  They wouldn't put in these features, and we couldn't, so we had to make do with things that &ldquo;half worked.&rdquo; And it was very frustrating to know that we were ready, willing and able to fix it, but weren't permitted. We were sabotaged.
fr: Il y a aussi le cas où un programme est adéquat, mais peu pratique. Par exemple, la première fois que nous avons eu une imprimante graphique au MIT, nous avons écrit le logiciel nous-mêmes et nous avons installé un bon nombre d'utilitaires sympathiques. Par exemple, il vous envoyait un message quand votre tâche d'impression était finie, ou quand l'imprimante manquait de papier et que vous aviez une tâche en file d'attente, et pas mal d'autres choses qui correspondaient à ce que nous voulions. Puis on nous a donné une imprimante graphique beaucoup plus intéressante, une des premières imprimantes laser, mais le logiciel était fourni par Xerox et nous ne pouvions pas le modifier. Ils n'acceptaient pas d'intégrer ces fonctionnalités et nous ne pouvions pas le faire nous-même. Aussi avons-nous dû nous contenter de choses qui ne « fonctionnaient qu'à moitié ». Et c'était très frustrant de savoir que nous étions prêts à arranger ça, désireux et capables de le faire, mais que nous n'en avions pas le droit. On sabotait notre travail.

note: type: Content of: <div><p>
en: And then there are all the people who use computers and say that the computers are a mystery to them, they don't know [how] they work.  Well how can they possibly know? They can't read the programs they're using.  The only way people learn how programs should be written, or how programs do what they do, is by reading the source code.
fr: Et il y a tous les gens qui utilisent des ordinateurs et qui disent que les ordinateurs sont un mystère pour eux. Ils ne savent pas comment ça fonctionne. Mais comment pourraient-ils le savoir ? Ils ne peuvent pas lire les programmes qu'ils utilisent. La seule manière pour les gens d'apprendre comment les programmes doivent être écrits ou comment ils font ce qu'ils font, c'est de lire le code source.

note: type: Content of: <div><p>
en: So I could only wonder whether the idea of the user who just thinks of the computer as a tool is not actually a self-fulfilling prophecy, a result of the practice of keeping source code secret.
fr: Aussi peut-on se demander si l'idée que l'utilisateur voit l'ordinateur comme un simple outil ne serait pas une prophétie autoréalisatrice, une conséquence de la pratique de garder secret le code source.

note: type: Content of: <div><p>
en: Now the spiritual harm that goes with this kind of material harm, is in the spirit of self-sufficiency.  When a person spends a lot of time using a computer system, the configuration of that computer system becomes the city that he lives in.  Just as the way our houses and furniture are laid out, determines what it's like for us to live among them, so that the computer system that we use, and if we can't change the computer system that we use to suit us, then our lives are really under the control of others.  And a person who sees this becomes in a certain way demoralized: &ldquo;It's no use trying to change those things, they're always going to be bad.  No point even hassling it.  I'll just put in my time and &hellip; when it's over I'll go away and try not to think about it any more.&rdquo; That kind of spirit, that unenthusiasm is what results from not being permitted to make things better when you have feelings of public spirit.
fr: La nocivité morale qui correspond à ce type de nocivité matérielle affecte le sentiment d'autosuffisance. Quand une personne passe une bonne partie de son temps à utiliser un système informatique, la configuration de ce système devient la cité dans laquelle elle vit. L'aménagement de nos maisons et la disposition des meubles déterminent comment nous y vivons, il en est de même pour le système informatique que nous utilisons. Si nous ne pouvons pas le modifier pour qu'il nous convienne, nos vies sont alors vraiment sous le contrôle des autres, et d'une certaine manière la personne qui le constate en est démoralisée : « Ça ne sert à rien d'essayer de changer ça, ce ne sera jamais bien. Ce n'est pas la peine de s'embêter. Je vais juste faire mes heures et&hellip; quand j'aurai fini, je m'en irai en tâchant de ne plus y penser. » Ce genre d'état d'esprit, ce manque d'enthousiasme, est le résultat obtenu quand on n'est pas autorisé à améliorer les choses alors qu'on serait prêt à montrer de l'esprit civique.

note: type: Content of: <div><p>
en: The third level of harm is in the interaction between software developers themselves.  Because any field of knowledge advance most when people can build on the work of others, but ownership of information is explicitly designed to prevent anyone else to doing that.  If people could build on other people's work, then the ownership would become unclear, so they make sure each new entry to the field has to start from the beginning, and thus they greatly slow down the advance of the field.
fr: Le troisième niveau de nocivité se situe dans l'interaction entre les développeurs de logiciel eux-mêmes, car tout domaine de connaissance avance davantage quand les gens peuvent construire à partir du travail des autres. Mais l'appropriation de l'information par une personne est explicitement conçue pour empêcher toutes les autres de faire cela. Si les gens pouvaient construire à partir du travail des autres, alors la propriété deviendrait difficile à cerner, c'est pourquoi ils s'assurent que chaque nouveau venu dans le domaine commence au début, ce qui ralentit considérablement le progrès.

note: type: Content of: <div><p>
en: So we can see: How many spreadsheet systems were made all by different companies, all without any benefit of understanding how it was done before? Yes it's true, the first spreadsheet written wasn't perfect.  It probably only ran on certain kinds of computers, and it didn't do some things in the best possible way.  So there were various reasons why certain people would want to rewrite parts of it.  But if they had only to rewrite the parts that they really wanted to improve, that would have made for a lot less work.  You may see how to make one aspect of a system better, you may not see how to make another aspect of the same system any better, in fact you might have a great deal of trouble doing it as well.  Now if you could take the part that you like and redo only the part that you have an inspiration for, you could have a system that's better in all ways, with much less work than it now takes to write a completely new system.  And we all know that a system can often benefit from being completely rewritten, but that's only if you can read the old one first.
fr: C'est ce que nous pouvons constater : combien y a-t-il de tableurs créés par des entreprises différentes sans qu'aucune ait profité de ce qui avait été fait auparavant ? Oui, c'est vrai, le premier tableur qui a été écrit n'était pas parfait. Il ne fonctionnait probablement que sur certains types d'ordinateurs et il ne faisait pas les choses de la meilleure manière possible. Donc il y avait diverses raisons pour lesquelles certaines personnes voulaient en réécrire des morceaux. Mais si elles avaient seulement dû réécrire les morceaux qu'elles voulaient vraiment améliorer, ça leur aurait donné beaucoup moins de travail. Vous pouvez très bien voir comment améliorer un des aspects d'un système, mais ne pas voir comment en améliorer un autre ; en fait cela pourrait vous être très difficile de le faire aussi bien. Si vous pouviez prendre la partie que vous trouvez bien et refaire seulement le morceau pour lequel vous avez des idées, vous pourriez avoir un système en tout point meilleur, avec beaucoup moins de travail que cela n'en prendrait de le réécrire entièrement. Nous savons tous qu'il peut être avantageux de réécrire un système complètement, mais à condition de pouvoir lire l'ancien d'abord.

note: type: Content of: <div><p>
en: Thus, the people in the programming field have evolved a way of wasting a lot of their time and thus making apparently a need for more programmers than we really need.  Why is there a programmer shortage? Because with intellectual property programmers have arranged to waste half the work they do, so we seem to need twice as many programmers.  And so, when people point to the system of intellectual property and say &ldquo;look at the large employment statistics, look at how big this industry is&rdquo; what that really proves is that people are wasting a lot of money and time.  If they talk about looking for ways to improve programmer productivity, they're happy to do this if it involves superior tools, but to improve programmer productivity by getting rid of the explicit things that is done to reduce programmer productivity, that they're against.  Because that would reduce the number of programmers employed.  There's something a little bit schizophrenic there.
fr: Ainsi, dans le domaine de la programmation, les gens ont développé une manière de perdre une bonne partie de leur temps, créant de ce fait un apparent besoin en programmeurs, plus important qu'en réalité. Pourquoi y a-t-il un manque de programmeurs ? Parce qu'avec la propriété intellectuelle ils se sont organisés pour gaspiller la moitié de leur travail ; il semble ainsi que nous en ayons besoin de deux fois plus. Quand les gens se tournent vers le système de la propriété intellectuelle en disant « Regardez les belles statistiques de l'emploi, regardez l'ampleur de cette industrie », cela ne prouve qu'une chose : l'ampleur du gaspillage de temps et d'argent. Quand ils parlent de chercher des moyens d'améliorer la productivité du programmeur, ils sont ravis de le faire si cela implique des outils plus évolués, mais si cela implique de se débarrasser de choses précises qui sont faites pour la réduire, ils sont contre – puisque cela réduirait le nombre d'emplois en programmation. Il y a comme une contradiction interne là-dedans.

note: type: Content of: <div><p>
en: And the spiritual harm that corresponds to this level of material harm is to the spirit of scientific cooperation, which used to be so strong that scientists even in countries that were at war would continue cooperating, because they knew that what they were doing had nothing to do with the war, it was just for the long term benefit of humanity.  Nowadays, people don't care about the long term benefit of humanity any more.
fr: Et la nocivité morale qui correspond à ce niveau de nocivité matérielle affecte l'esprit de coopération scientifique, qui autrefois était si fort que même les scientifiques de pays en guerre continuaient de coopérer, parce qu'ils savaient que ce qu'ils faisaient n'avait rien à voir avec la guerre. C'était uniquement pour le bénéfice à long terme de l'humanité. De nos jours, personne ne se préoccupe plus de ça.

note: type: Content of: <div><p>
en: To get an idea of what it's like to obstruct the use of a program, let's imagine that we had a sandwich, that you could eat, and it wouldn't be consumed.  You could eat it, and another person could eat it, the same sandwich, any number of times, and it would always remain just as nourishing as originally.
fr: Pour vous représenter ce que c'est que de faire obstacle à l'utilisation d'un programme, imaginez un sandwich que vous pourriez manger mais qui ne serait pas consommé. Vous pourriez le manger, une autre personne pourrait le manger, le même sandwich, autant de fois qu'elle voudrait, et il resterait toujours aussi nourrissant qu'à l'origine.

note: type: Content of: <div><p>
en: The best thing to do, the thing that we ought to do with this sandwich is carry it around to the places where there are hungry people; bringing it to as many mouths as possible, so that it feeds as many people as possible.  By all means, we should not have a price to eat from this sandwich, because then people would not afford to eat it, and it would be wasted.
fr: La meilleure chose à faire, ce que nous devrions faire avec ce sandwich, serait de l'amener partout où les gens ont faim ; de l'amener à autant de bouches que possible, de sorte qu'il alimente autant de personnes que possible. Il est certain que nous ne devons pas mettre de prix sur ce sandwich, parce que sinon les gens ne pourraient pas se permettre de le manger et il serait gaspillé.

note: type: Content of: <div><p>
en: The program is like this sandwich, but even more so because it can be in many different places at once being eaten, used by different people one after the other.  It is as if this sandwich was enough to feed everyone, everywhere, forever, and that were not allowed to happen, because someone believed he should own it.
fr: Un programme est comme ce sandwich, mais en mieux, parce qu'il peut être mangé en même temps dans de nombreux endroits différents, utilisé par des personnes différentes les unes après les autres. C'est comme si ce sandwich suffisait pour alimenter tout le monde, partout, pour toujours, mais que ça lui était interdit parce que quelqu'un croyait qu'il devait le posséder.

note: type: Content of: <div><p>
en: Now, the people who believe that they can own programs, generally put forward two lines of argument for this.  The first one is &ldquo;I wrote it, it is a child of my spirit, my heart, my soul is in this.  How can anyone take it away from me? Wherever it goes it's mine, mine, MINE!!&rdquo; Well, it's sort of strange that most of them signs agreements saying it belongs to the company they work for.
fr: Les gens qui croient pouvoir posséder des programmes proposent généralement deux types d'arguments. Le premier c'est : « Je l'ai écrit, c'est l'enfant de mon esprit, mon cœur, mon âme y est. Comment peut-on me l'enlever ? Où qu'il aille, il est à moi, à moi, À MOI !! » Très bien, mais il est curieux tout de même que la plupart d'entre eux signent des accords stipulant qu'il appartient à l'entreprise pour laquelle ils travaillent.

note: type: Content of: <div><p>
en: So I believe this is one of the things you can easily talk yourself into believing is important, but you can just as easily convince yourself it doesn't matter at all.
fr: Aussi je crois que cela fait partie des choses dont vous pouvez facilement vous persuader qu'elles sont importantes, mais tout aussi aisément, qu'elles n'ont aucune importance.

note: type: Content of: <div><p>
en: Usually, these people use this argument to demand the right to control even how people can change a program.  They say: &ldquo;Nobody should be able to mess up my work of art.&rdquo; Well, imagine that the person who invented a dish that you plan to cook had the right to control how you can cook it, because it's his work of art.  You want to leave out the salt, but he says &ldquo;Oh, no.  I designed this dish, and it has to have this much salt!&rdquo; &ldquo;But my doctor says it's not safe for me to eat salt.  What can I do?&rdquo;
fr: Habituellement, ces personnes usent de cet argument pour exiger le droit de contrôler jusqu'à la façon dont les gens peuvent modifier le programme. Ils disent : « Personne ne doit pouvoir gâcher mon œuvre d'art. » Bien, imaginez que l'inventeur du plat que vous projetez de cuisiner ait le droit de contrôler la façon dont vous le préparez parce que c'est son œuvre d'art. Vous voulez enlever du sel, mais il dit : « Oh, non! J'ai conçu ce plat et il doit y avoir beaucoup de sel ! » – « Mais mon médecin m'a dit qu'il n'était pas bon pour moi de manger salé. Que puis-je faire ? »

note: type: Content of: <div><p>
en: Clearly, the person who is using the program is much closer to the event.  The use of the program affects him very directly, whereas it only has a sort of abstract relation to the person who wrote the program.  And therefore, for the sake of giving people as much control as possible over their own lives, it has to be the user who decides those things.
fr: La personne qui se sert du programme est évidemment bien plus près de l'événement. L'utilisation du programme l'affecte directement tandis que l'auteur a seulement une sorte de relation abstraite avec cette utilisation. Et donc, pour donner aux gens autant de contrôle que possible sur leurs propres vies, c'est l'utilisateur qui doit décider.

note: type: Content of: <div><p>
en: The second line of argument they make is the economic one.  &ldquo;How will people get paid to program?&rdquo; they say, and there's a little bit of real issue in this.  But a lot of what they say is confusion.  And the confusion is, it's not at all the same to say &ldquo;if we want to have a lot of people programming we must arrange for them not to need to make a living in any other fashion&rdquo; on the one hand, and to say &ldquo;We need to have the current system, you need to get rich by programming&rdquo; on the other hand.  There's a big difference between just making a living wage and making the kind of money programmers, at least in the US make nowadays.  They always say: &ldquo;How will I eat?&rdquo; but the problem is not really how &ldquo;Will he eat?&rdquo; but &ldquo;How will he eat sushi?&rdquo; &ldquo;How will I have a roof over my head?&rdquo; but the real problem is &ldquo;How can he afford a condo?&rdquo;
fr: Le deuxième argument est économique. « Comment les gens seront-ils payés pour programmer ? » disent-ils, et il y a un peu de vrai là-dedans. Mais une bonne part de ce qu'ils disent est confus. Et la confusion vient de ce qu'il n'est pas du tout pareil de dire « Si nous voulons avoir beaucoup de gens pour programmer, nous devons nous assurer qu'ils n'auront pas besoin de gagner leur vie d'une autre manière » d'une part, et d'autre part de dire « Nous devons conserver le système actuel, nous devons devenir riches en programmant. » Il y a une grande différence entre juste percevoir un salaire pour vivre et se faire du fric comme le font les programmeurs de nos jours, du moins aux États-Unis. Ils disent toujours : « Comment vais-je manger ? » Mais le problème n'est pas vraiment de savoir « comment il va manger » mais « comment il va manger des sushis ». Ou bien : « Comment ferai-je pour avoir un toit au-dessus de la tête ? » Mais le vrai problème est : « Comment pourra-t-il se payer un appartement dans une copropriété ? »

note: type: Content of: <div><p>
en: The current system were chosen by the people who invest in software development, because it gives them the possibility of making the most possible money, not because it's the only way anyone can ever come up with money to support a system development effort.  In fact, even as recently as ten and fifteen years ago it was common to support software development in other ways.  For example, those Digital operating systems that were free, even in the early seventies, were developed by people who were paid for their work.  Many useful programs has been developed at universities.  Nowadays those programs are often sold, but fifteen years ago they were usually free, yet the people were paid for their work.
fr: Le système actuel a été choisi par les gens qui investissent dans le développement logiciel parce que ça leur donne la possibilité de se faire le plus d'argent possible, et non parce que c'est le seul moyen possible de récolter des fonds pour soutenir l'effort de développement d'un système. En fait, aussi récemment qu'il y a dix ou quinze ans, il était courant de soutenir le développement logiciel autrement. Par exemple, les systèmes d'exploitation de Digital qui étaient libres, même au début des années 70, ont été développés par des personnes payées pour ce travail. Beaucoup de programmes utiles ont été développés dans les universités. De nos jours ces programmes sont souvent vendus, mais il y a quinze ans ils étaient la plupart du temps gratuits, et pourtant les gens étaient payés pour leur travail.

note: type: Content of: <div><p>
en: When you have something like a program, like an infinite sandwich, like a road, which has to be built once, but once it is built it pretty much doesn't matter how much you use it, there's no cost in using it, generally it's better if we don't put any price on using it.  And there are plenty of those things that we develop now, and pay people to build.  For example, all the streets out there.  It's very easy to find people who will program without being paid; it really is impossible to find people who will build streets without being paid.  Building streets is not creative and fun like programming.  But we have plenty of streets out there, we do come up with the money to pay them, and it's much better the way we do it than if if we said: &ldquo;Let's have companies go and build streets and put toll booths up, and then every time you turn another street corner, you pay another toll.  And then the companies that picked the good places to put their streets, they will be profitable, and the others will go bankrupt.&rdquo;
fr: Lorsque vous avez quelque chose comme un programme, comme un sandwich infini ou comme une route qui ne doit être construite qu'une fois, sachant qu'une fois construite il importe assez peu de savoir combien de fois vous l'utilisez, sachant que cela ne coûte rien de l'utiliser, il est généralement bien mieux de ne pas mettre de coût sur cette utilisation. Et il y a des tas de choses comme ça que nous développons aujourd'hui, en payant des gens pour le faire. Par exemple, toutes ces rues par là-bas. Autant il est facile de trouver des gens qui programmeront sans être payés, autant il est vraiment impossible d'en trouver qui construiront des routes sans être payés. La construction des routes n'est pas un travail créatif ni amusant comme la programmation mais il y a plein de rues par là-bas. Nous arrivons parfaitement à trouver de quoi payer ces gens et c'est bien mieux comme ça que d'avoir dit : « Laissons des entreprises privées construire des routes et installer des cabines de péage, et vous paierez un péage à chaque coin de rue. Alors les entreprises qui auront sélectionné les bons endroits pour mettre leurs routes feront des profits et les autres feront faillite. »

note: type: Content of: <div><p>
en: There's a funny thing that happens whenever someone comes up with a way of making lots of money by hoarding something.  Until that time you've probably had lots and lots of people who were really enthusiastic and eager to work in that field, the only sort of question is how can they get any sort of livelihood at all.  If we think of mathematicians for example, there are a lot more people who want to be pure mathematicians than there is funding for anybody to be pure mathematicians.  And even when you do get funding, you don't get very much, they don't live well.  And for musicians it's even worse.  I saw a statistics for how much the average musician, the average person devoting most of his time trying to be a musician, in Massachusetts made; it was something like half the median income or less.  It is barely enough to live on, it's difficult.  But there are lots of them trying to do that.  And then, somehow when it gets generally possible to get very well paid to do something, all those people disappear, and people start saying &ldquo;nobody will do it unless they get paid that well.&rdquo;
fr: Il se produit une chose amusante chaque fois que quelqu'un propose une manière de faire de l'argent en accaparant quelque chose. Jusque-là, vous aviez probablement un bon nombre de gens vraiment enthousiastes et désireux de travailler dans ce domaine. Et la seule question qui se posait était : « Comment peuvent-ils trouver un moyen d'existence ? » Si nous pensons aux mathématiciens par exemple, il y a beaucoup plus de gens qui veulent être des mathématiciens purs que de financement pour que tout le monde le devienne. Et même lorsqu'ils obtiennent des fonds, ils n'en obtiennent pas beaucoup. Et ces gens ne vivent pas bien. Pour les musiciens, c'est encore pire. J'ai vu des statistiques sur ce que gagne le musicien moyen, le péquin moyen qui consacre la majeure partie de son temps à tenter de devenir musicien dans le Massachusetts ; c'est quelque chose comme la moitié du revenu moyen, ou moins. C'est à peine assez pour vivre, c'est dur. Mais il y en a un bon nombre qui essaient. Et puis, d'une façon ou d'une autre, quand il devient possible d'être très bien payé pour faire quelque chose, généralement tous ces gens disparaissent. Et on commence à dire : « Personne ne le fera à moins d'être payé aussi bien. »

note: type: Content of: <div><p>
en: And I saw this happen in the field of programming.  The very same people who used to work at the AI lab and get paid very little and love it, now wouldn't dream of working for less than fifty thousand dollars a year.  What happened? When you dangle before people the possibility of making lots of money, when they see that other people doing similar work are getting paid that much money, they feel that they should get the same, and thus no-one is willing to continue the old way.  And it's easy after this has happened to think that paying people a lot of money is the only way it could be, but that's not so.  If the possibility of making a lots of money did not exist, you would have people who would accept doing it for a little money, specially when it's something that is creative and fun.
fr: J'ai vu cela se produire dans le domaine de la programmation. Les mêmes qui travaillaient au labo d'IA en étant très peu payés et qui trouvaient ça très bien, aujourd'hui n'imagineraient pas travailler pour moins de cinquante mille dollars par an. Que s'est-il passé ? Quand vous faites miroiter aux gens la possibilité de faire de l'argent, quand ils en voient d'autres faire le même travail en étant payés très cher, ils estiment devoir obtenir la même chose et personne n'est alors disposé à continuer comme avant. Il est facile, une fois que cela s'est produit, de penser que la seule option est de payer les gens énormément. Mais ce n'est pas vrai. Si la possibilité de faire de l'argent n'existait pas, vous auriez des gens qui accepteraient de le faire pour pas grand-chose, surtout si c'était créatif et amusant.

note: type: Content of: <div><p>
en: Now I saw the unique world of the AI lab destroyed, and I saw that selling software was an intrinsic part of what had destroyed it, and I saw also, as I explained before, how you need to have free software in order to have a community like that.  But then thinking about it more, I realized all these ways in which hoarding software hurts all of society, most specially by pressuring people to sell out their neighbors and causing social decay.  The same spirit that leads people to watch while somebody in the street is getting stabbed and not tell anyone. The spirit that we can see so many companies all around us displaying all the time.  And it was clear to me I had a choice, I could become part of that world and feel unhappy about what I was doing with my life, or I could decide to fight it.  So I decided to fight it.  I've dedicated my career to try to rebuild the software sharing community, to trying to put an end to the phenomenon of hoarding generally useful information.  And the GNU system is a means to this end.  It is a technical means to a social end.  With the GNU system, I hope to vaccinate the users against the threat of the software hoarders.
fr: J'ai donc vu ce monde unique du labo d'IA se faire détruire, et la vente du logiciel faire partie intégrante de ce qui l'a détruit. J'ai vu également, comme je l'ai expliqué, qu'on a besoin de logiciel libre pour retrouver une communauté comme celle-là. Mais en y réfléchissant davantage, j'ai compris en quoi l'accaparement du logiciel fait du mal à l'ensemble de la société – plus particulièrement en poussant les gens à trahir leurs voisins, ce qui entraîne l'affaiblissement du lien social ; ce même état d'esprit qui conduit les gens à voir quelqu'un se faire poignarder dans la rue et à n'avertir personne ; cet état d'esprit dont nous pouvons voir tant d'entreprises faire preuve autour de nous. Il m'est apparu clairement que j'avais un choix à faire. Je pouvais faire partie de ce monde et me sentir malheureux de voir ce que je faisais de ma vie, ou je pouvais décider de le combattre. Alors j'ai décidé de le combattre. J'ai consacré ma carrière à tenter de reconstruire la communauté de partage du logiciel, à tenter de mettre un terme au phénomène d'accaparement d'information utile à tous. Et le système GNU est un moyen à cet effet. C'est un moyen technique à des fins sociales. Avec le système GNU, j'espère vacciner les utilisateurs contre la menace des accapareurs de logiciel.

note: type: Content of: <div><p>
en: Right now the hoarders essentially claims the power to render a person's computer useless.  There used to be people in the US, most commonly about fifty years ago, they were in the Mafia, they would go up to stores and bars, especially bars when bars were illegal of course.  They would go up and say: &ldquo;A lot of places around here have been burning down lately.  You wouldn't want your place to burn down, would you? Well we can protect you from fires, you just have to pay us a thousand dollars a month, and we'll make sure you don't have a fire here.&rdquo; And this was called &ldquo;the protection racket.&rdquo; Now we have something where a person says &ldquo;You got a nice computer there, and you've got some programs there that you're using.  Well, if you don't want those programs to disappear, if you don't want the police to come after you, you better pay me a thousand dollars, and I'll give you a copy of this program with a license,&rdquo; and this is called &ldquo;the software protection racket.&rdquo;
fr: En ce moment, les accapareurs réclament essentiellement le pouvoir de rendre inutile l'ordinateur personnel. Il y a une cinquantaine d'années, il y avait des gens aux USA, de la Mafia, qui entraient dans les magasins et les bars, surtout les bars quand les bars étaient hors-la-loi, évidemment. Une fois entrés, ils disaient : « Pas mal d'endroits par ici ont brûlé dernièrement. Vous ne voudriez pas que le vôtre subisse le même sort ? Eh bien, nous pouvons vous protéger contre les incendies, vous avez juste à nous payer mille dollars par mois et nous ferons en sorte qu'il n'y ait pas le feu. » Et ça s'appelait « le racket de protection ». Aujourd'hui nous en sommes à quelque chose près à ce qu'une personne nous dise : « Vous avez un joli ordinateur ici et vous utilisez quelques programmes. Eh bien, si vous ne voulez pas que ces programmes disparaissent, si vous ne voulez pas que la police vous poursuive, vous feriez mieux de me payer mille dollars et je vous donnerai un exemplaire de ce programme avec une licence. » Et ça s'appelle « le racket de protection du logiciel ».

note: type: Content of: <div><p>
en: Really all they're doing is interfering with everybody else doing what needs to be done, but they're pretending as much to them selves as to the rest of us, that they are providing a useful function.  Well, what I hope is that when that software Mafia guy comes up and says, &ldquo;You want those programs to disappear on your computer?&rdquo; the user can say &ldquo;I'm not afraid of you any more.  I have this free GNU software, and there's nothing you can do to me now.&rdquo;
fr: En réalité, ils ne font que mettre des bâtons dans les roues de tous ceux qui font ce qui doit être fait, mais ils se prétendent à eux-mêmes, et veulent nous faire croire, qu'ils ont une fonction utile. Bon. Ce que j'espère, c'est que le jour où ce type de la Mafia du logiciel entrera et dira « Vous voulez que ces programmes disparaissent de votre ordinateur ? » l'utilisateur puisse répondre « Je n'ai plus peur de vous. J'ai le logiciel libre GNU et il n'y a rien que vous puissiez me faire désormais. »

note: type: Content of: <div><p>
en: Now, one of the justifications people sometimes offer for owning software, is the idea of giving people an incentive to produce things.  I support the idea of private enterprise in general, and the idea of hope to make money by producing things that other people like to use, but it's going haywire in the field of software now.  Producing a proprietary program is not the same contribution to society as producing the same program and letting it be free.  Because writing the program is just a potential contribution to society.  The real contribution to the wealth of society happens only when the program is used.  And if you prevent the program from being used, the contribution doesn't actually happen.  So, the contribution that society needs is not these proprietary programs that everyone has such an incentive to make, the contribution we really want is free software, so our society is going haywire because it gives people an incentive to do what is not very useful, and no incentive to do what is useful.  Thus the basic idea of private enterprise is not being followed, and you could even say that the society is neurotic.  After all when an individual encourages in others behavior that is not good for that individual we call this a neurosis.  Here society is behaving in that fashion, encouraging programmers to do things that is not good for society.
fr: Quelquefois, les gens essaient de se justifier de posséder le logiciel en avançant l'idée qu'il faut donner aux gens des incitations pour produire des choses. Je suis d'accord avec la notion d'entreprise privée en général et avec l'espoir de gagner de l'argent en produisant des choses que d'autres apprécient, mais ça se détraque dans le domaine du logiciel actuellement. Produire un programme propriétaire, ce n'est pas la même contribution à la société que produire ce même programme et le laisser libre. Parce que l'écriture du programme est juste une contribution potentielle à la société. La vraie contribution à la richesse de la société se fait seulement quand le programme est utilisé. Et si vous empêchez l'utilisation du programme, la contribution ne se fait pas vraiment. La contribution dont la société a besoin ne réside pas dans ces programmes propriétaires que tout le monde est tellement incité à faire. La contribution que nous voulons vraiment est celle du logiciel libre. Notre société se détraque parce qu'elle donne aux gens des incitations pour faire ce qui n'est pas très utile et aucune pour faire ce qui est utile. Ainsi l'idée sur quoi repose l'entreprise privée n'est pas mise en application. On pourrait même dire que la société est névrotique, car après tout, quand une personne encourage dans le comportement des autres ce qui n'est pas bon pour elle, on appelle ça une névrose. C'est comme cela que se comporte notre société, en encourageant les programmeurs à faire des choses qui ne sont pas bonnes pour elle.

note: type: Content of: <div><p>
en: I'm unusual.  I'd rather believe that I'm a good member of society and that I'm contributing something, than feel that I'm ripping society off successfully, and that's why I've decided to do what I have done.  But every one is at least a little bit bothered by the feeling that they are getting paid to do what's not really useful.  So let's stop defending this idea of incentives to do the wrong thing and let's at least try to come up with arrangements to encourage people to do the right thing, which is to make free software.
fr: Je sors un peu du commun. Je préfère croire que je suis un bon membre de la société et que je contribue à quelque chose plutôt que de sentir que je l'arnaque avec succès, c'est pourquoi j'ai décidé de faire ce que j'ai fait. Mais cela tracasse chacun, au moins un petit peu, d'avoir le sentiment d'être payé pour faire ce qui n'est pas vraiment utile. Par conséquent, cessons de défendre les incitations à faire ce qui est mauvais et essayons au moins de proposer des arrangements pour inciter les gens à faire ce qui est bon, c'est-à-dire du logiciel libre.

note: type: Content of: <div><p>
en: Thank you.
fr: Merci.

note: type: Content of: <div><p>
en: <strong>[After this RMS answered questions for about an hour.  I have only included a very few of the questions and answers in this version.  The tape was bad, and I didn't have the time to do a proper job on all of it.] </strong>
fr: <strong>[Après ça, RMS a répondu à des questions pendant environ une heure. Je n'en ai inclus que quelques-unes dans cette version. La bande était mauvaise et je n'ai pas eu le temps de faire le travail nécessaire sur la totalité]</strong>

note: type: Content of: <div><dl><dt>
en: <b>Q:</b> Has anyone tried to make problems for you?
fr: <b>Question :</b> Est-ce que quelqu'un a tenté de vous causer des ennuis ?

note: type: Content of: <div><dl><dd><p>
en: <b>A:</b> The only time anyone has tried to make a problem for me was those owners, so called, self-styled owners of Gosling Emacs.  Aside from that they have no grounds to do so, so there is not much they can do.  By the way, I'd like to call everyone's attention to the way in which people use language to try to encourage people to think certain thoughts and not think of others.  Much of the terminology current in the field was chosen by the self-styled software owners to try to encourage you to try to make you see software as similar to material objects that are property, and overlook the differences.  The most flagrant example of this is the term &ldquo;pirate.&rdquo; Please refuse to use the term &ldquo;pirate&rdquo; to describe somebody who wishes to share software with his neighbor like a good citizen.
fr: <b>Réponse :</b> La seule fois où l'on a tenté de me causer des ennuis, c'était ces propriétaires, ces prétendus propriétaires, autoproclamés, de Gosling Emacs. Hormis le fait qu'ils n'avaient aucune raison de le faire, ils ne pouvaient pas faire grand-chose. D'ailleurs, je voudrais attirer l'attention de tout le monde sur la façon dont les gens se servent du langage pour vous inciter à penser d'une certaine façon et pas autrement. Une grande part de la terminologie actuelle dans ce domaine a été choisie par les propriétaires autoproclamés de logiciel pour vous inciter à assimiler le logiciel à des biens matériels et à oublier les différences. L'exemple le plus flagrant en est le terme « pirate ». Refusez s'il vous plaît d'utiliser le terme « pirate » pour décrire quelqu'un qui souhaite partager du logiciel avec son voisin comme tout bon citoyen.

note: type: Content of: <div><dl><dd><p>
en: I forgot to tell you this: The idea of copyright was invented after the printing press.  In ancient times authors copied from each other freely, and this was not considered wrong, and it was even very useful: The only way certain authors works have survived, even in fragments, is because some of them were quoted at length in other works which have survived.
fr: J'ai oublié de vous dire ceci : La notion de copyright est apparue après l'invention de la presse à imprimer. Dans les temps anciens, les auteurs se copiaient les uns les autres librement et ceci n'était pas considéré comme un mal. Et c'était même très utile : certaines œuvres originales n'ont pu survivre, bien que de manière fragmentaire, que grâce à des citations extensives dans d'autres œuvres qui, elles, ont survécu.

note: type: Content of: <div><dl><dd><p>
en: This was because books were copied one copy at the time.  It was ten times as hard to make ten copies as it was to make one copy.  Then the printing press was invented, and this didn't prevent people from copying books by hand, but by comparison with printing them, copying by hand was so unpleasant that it might as well have been impossible.
fr: C'est parce que la copie des livres se faisait à l'unité ; il était dix fois plus difficile d'en faire dix copies qu'une seule. Puis la presse à imprimer a été inventée. Ceci n'a pas empêché les gens de copier les livres à la main, mais comparée à l'impression, la copie manuelle était si pénible qu'elle aurait aussi bien pu être impossible.

note: type: Content of: <div><dl><dd><p>
en: When books could only be made by mass production, copyright then started to make sense and it also did not take away the freedom of the reading public.  As a member of the public who didn't own a printing press, you couldn't copy a book anyway.  So you weren't losing any freedom just because there were copyrights.  Thus copyright was invented, and made sense morally because of a technological change.  Now the reverse change is happening.  Individual copying of information is becoming better and better, and we can see that the ultimate progress of technology is to make it possible to copy any kind of information. <span>[break due to turning of tape]</span>
fr: Quand les livres ont pu être produits en masse, le copyright commença à avoir un sens. De plus, celui-ci ne confisquait pas la liberté des lecteurs ordinaires, puisqu'en tant que membre du public qui n'avait pas de presse, vous ne pouviez pas copier de livre de toute façon. Le copyright ne vous privait donc d'aucune liberté. Il a été inventé, et avait du sens moralement, à cause d'un changement technologique. Or aujourd'hui le changement inverse se produit. La copie individuelle d'information se fait de mieux en mieux et nous pouvons voir que la finalité du progrès technologique est de permettre de copier n'importe quel genre d'information&hellip; <span>[coupure due à l'inversion de la bande]</span>.

note: type: Content of: <div><dl><dd><p>
en: Thus we are back in the same situation as in the ancient world where copyright did not make sense.
fr: Ainsi nous retournons à la même situation que dans le monde antique où le copyright n'avait aucun sens.

note: type: Content of: <div><dl><dd><p>
en: If we consider our idea of property, they come from material objects.  Material objects satisfy a conservation law, pretty much.  Yes it's true I can break a chalk in half, that's not it, and it gets worn down, it gets consumed.  But basically this is one chair [pointing at a chair].  I can't just sort of snap my finger and have two chairs.  The only way to get another one is to build it just the way the first one was build.  It takes more raw materials, it takes more work of production, and our ideas of property were evolved to make moral sense to fit these facts.
fr: Considérons notre concept de propriété. Il a son origine dans les objets matériels. Ces derniers satisfont la loi de conservation, à peu de choses près. Oui c'est vrai, je peux casser une craie en deux, mais ce n'est pas ça ; elle va s'user, se « consommer ». Mais fondamentalement ceci est une chaise [pointant une chaise du doigt]. Je ne peux pas simplement claquer des doigts et en avoir deux. La seule manière d'en avoir une deuxième, c'est de la construire comme l'a été la première. Ça prend plus de matières premières, plus de travail de production. Nos idées de propriété ont été développées pour que le sens moral s'accorde avec ces faits.

note: type: Content of: <div><dl><dd><p>
en: For a piece of information that anyone can copy, the facts are different.  And therefore the moral attitudes that fit are different.  Our moral attitudes comes from thinking how much it will help people and how much it will hurt people to do certain things. With a material object, you can come and take away this chair, but you couldn't come and copy it.  And if you took away the chair, it wouldn't be producing anything, so there's no excuse. I somebody says: &ldquo;I did the work to make this one chair, and only one person can have this chair, it might as well be me,&rdquo; we might as well say: &ldquo;Yeah, that makes sense.&rdquo; When a person says: &ldquo;I carved the bits on this disk, only one person can have this disk, so don't you dare take it away from me,&rdquo; well that also make sense.  If only one person is going to have the disk, it might as well be the guy who owns that disk.
fr: Pour une portion d'information que tout le monde peut copier, les faits sont différents, et donc les attitudes morales correspondantes sont différentes. Les attitudes morales proviennent de la réflexion sur le nombre de gens que cela va aider et le nombre de gens que cela va léser de faire certaines choses. Lorsqu'il s'agit d'un objet matériel, vous pouvez venir prendre cette chaise, mais vous ne pouvez pas venir la copier. Et si vous emportiez la chaise, cela ne produirait rien, vous n'auriez aucune excuse. Si quelqu'un dit « J'ai travaillé pour faire cette chaise, une seule personne peut avoir cette chaise, ça peut aussi bien être moi », nous pourrions aussi bien dire « Oui, c'est compréhensible. » Quand une personne dit « J'ai gravé les bits de ce disque, une seule personne peut l'avoir, alors n'essayez pas de me l'enlever », ça se comprend aussi. Si une seule personne peut avoir le disque, pourquoi pas celui à qui il appartient ?

note: type: Content of: <div><dl><dd><p>
en: But when somebody else comes up and says: &ldquo;I'm not going to hurt your disk, I'm just gonna magically make another one just like it and then I'll take it away and then you can go on using this disk just the same as before,&rdquo; well, it's the same as if somebody said: &ldquo;I've got a magic chair copier.  You can keep on enjoying your chair, sitting in it, having it always there when you want it, but I'll have a chair too.&rdquo; That's good.
fr: Mais quand quelqu'un d'autre arrive et dit « Je ne vais pas abîmer votre disque, je vais juste en faire un autre comme lui par magie, je l'emmènerai et vous pourrez continuer à utiliser ce disque comme vous le faisiez auparavant », eh bien, c'est la même chose que si quelqu'un disait « J'ai un copieur magique de chaise. Vous pouvez continuer à profiter de votre chaise en l'ayant toujours à disposition mais j'en aurai une aussi. » C'est une bonne chose.

note: type: Content of: <div><dl><dd><p>
en: If people don't have to build, they can just snap their fingers and duplicate them, that's wonderful.  But this change in technology doesn't suit the people who want to be able to own individual copies and can get money for individual copies.  That's an idea that only fits conserved objects.  So they do their best to render programs like material objects.  Have you wondered why, when you go to the software store and buy a copy of a program it comes in something that looks like a book? They want people to think as if they were getting a material object, not to realize what they have really got in the form of digital copyable data.
fr: Si les gens n'ont pas à construire mais juste à claquer des doigts et reproduire, c'est merveilleux. Mais ce changement technologique ne convient pas à ceux qui voudraient pouvoir posséder des copies particulières et en tirer de l'argent. C'est une idée qui ne correspond qu'aux objets qui se conservent. Aussi font-ils leur possible pour transformer les programmes en objets matériels. Vous êtes-vous demandés pourquoi, quand vous allez dans un magasin de logiciel et que vous achetez un exemplaire d'un programme, cela revient à acheter quelque chose qui ressemble à un livre ? Ils veulent que les gens pensent à leur achat comme à un objet matériel, sans se rendre compte qu'il est en réalité sous forme de données numériques copiables.

note: type: Content of: <div><dl><dd><p>
en: What is a computer after all but a universal machine? You've probably studied universal Turing machines, the machines that can imitate any other machine.  The reason a universal machine is so good is because you can make it imitate any other machine and the directions can be copied and changed, exactly the things you can't do with a material object.  And those are exactly what the software hoarders want to stop the public from doing.  They want to have the benefit of the change in technology, to universal machines, but they don't want the public to get that benefit.
fr: Après tout, qu'est-ce qu'un ordinateur à part une machine universelle ? Vous avez probablement étudié les machines universelles de Turing, ces machines qui peuvent imiter n'importe quelle autre machine. L'avantage d'une machine universelle, c'est que vous pouvez lui faire imiter n'importe quelle autre machine et que les modes d'emploi peuvent être copiés et changés, toutes choses que vous ne pouvez pas faire avec un objet matériel. Et c'est exactement ce que les accapareurs de logiciel veulent que le public arrête de faire. Ils veulent profiter du changement technologique, en marche vers les machines universelles, mais ils ne veulent pas que le public en profite.

note: type: Content of: <div><dl><dd><p>
en: Essentially they are trying to preserve the &ldquo;material object age,&rdquo; but it's gone, and we should get our ideas of right and wrong in sync with the actual facts of the world we live in.
fr: En gros, ils tentent de conserver « l'âge de l'objet matériel », mais celui-ci est dépassé. Notre conception du bien et du mal doit être synchrone avec les faits réels du monde dans lequel nous vivons.

note: type: Content of: <div><dl><dt>
en: <b>Q:</b> So it boils down to ownership of information.  Do you think there are any instances where, [in] your opinion, it's right to own information?
fr: <b>Question :</b> Ainsi ça se ramène à la propriété de l'information. Pensez-vous qu'il y ait des exemples où, selon vous, il soit juste de posséder l'information ?

note: type: Content of: <div><dl><dd><p>
en: <b>A:</b> With information that's not generally useful, or is of a personal nature, I would say it's OK. In other words not information about how to do things, but information about what you intend to do.  Information whose only value to others is speculative, that is they can take some money away from you, but they can't actually create anything with it.  It's perfectly reasonable I'd say to keep that sort of thing secret and controlled.
fr: <b>Réponse :</b> Pour une information qui n'est pas utile au public ou qui a un caractère personnel, je dirais OK. En d'autres termes, l'information qui porte, non sur la manière de faire les choses mais sur ce que vous avez l'intention de faire ; l'information dont la seule valeur pour les autres est spéculative ; celle qui leur permet de vous faire perdre de l'argent mais avec laquelle ils ne peuvent véritablement rien créer. Je dirais qu'il est parfaitement raisonnable de garder ce genre de chose secrète et sous contrôle.

note: type: Content of: <div><dl><dd><p>
en: But in terms of creative information, information that people can use or enjoy, and that will be used and enjoyed more the more people who have it, always we should encourage the copying.
fr: Mais l'information créatrice, celle que les gens peuvent utiliser ou dont ils peuvent profiter, et ce d'autant mieux que plus de gens y auront accès, nous devons toujours en encourager la copie.

note: TRANSLATORS: Use space (SPC) as msgstr if you don't have notes. type: Content of: <div>
en: *GNUN-SLOT: TRANSLATOR'S NOTES*
fr: <hr /><b>Notes de traduction</b><ol>
    <li><a id="TransNote1" href="#TransNote1-rev" class="nounderline">&#8593;</a> 
    ITS <i>(Incompatible Timesharing System)</i> : « Système à temps partagé incompatible », conçu par les hackers du laboratoire d'intelligence artificielle et nommé en opposition avec CTSS <i>(Compatible Time Sharing System)</i>, utilisé précédemment au MIT.</li>
    <li><a id="TransNote2" href="#TransNote2-rev" class="nounderline">&#8593;</a> 
    Nous traduisons maintenant <i>proprietary</i> par « privateur ».</li>
    <li><a id="TransNote3" href="#TransNote3-rev" class="nounderline">&#8593;</a> 
    <i>Wheel bit</i> (litt. bit de gouvernail) : il s'agit d'un bit particulier du nombre binaire définissant un utilisateur sous Twenex (ou certains autres systèmes à temps partagé des années 80), qui permet à cet utilisateur de faire certaines opérations interdites à l'utilisateur normal. Les privilèges du mode <i>wheel</i> sont analogues à ceux de <i>root</i> sous Unix.</li>
    <li><a id="TransNote4" href="#TransNote4-rev" class="nounderline">&#8593;</a> 
    DDT signifiait à l'origine <i><abbr title="Digital Equipment Corporation">DEC</abbr> Debugging Tape</i> (bande de débogage de DEC). C'était un ensemble de programmes, développé en 1961, permettant de déboguer le système d'exploitation du PDP-1 (les bandes dont il s'agissait étaient des bandes perforées). Des systèmes similaires existent pour des machines plus récentes, ils ont pour nom <i>Dynamic Debugging Technique</i>, de manière à garder le même sigle. DDT fait allusion à l'insecticide <i>[bug killer]</i> de l'époque.</li>
    <li><a id="TransNote5" href="#TransNote5-rev" class="nounderline">&#8593;</a> 
    <i>Free University Compiler Kit</i> peut s'interpréter de deux manières différentes, car on ne sait pas si l'adjectif <i>free</i> qualifie <i>compiler kit</i> ou <i>university</i>. En fait, il s'agit du « kit de compilation de l'Université Libre (d'Amsterdam) ».</li>
    <li><a id="TransNote6" href="#TransNote6-rev" class="nounderline">&#8593;</a> 
    <i>C-shell</i> se prononce de la même façon que <i>seashell</i> (coquillage). Il n'est pas impossible que ce jeu de mots soit voulu.</li>
    <li><a id="TransNote7" href="#TransNote7-rev" class="nounderline">&#8593;</a> 
    <i>Bouncing ball</i> : peut-être une allusion à la « balle bondissante » du karaoke qui rebondit sur les paroles affichées à l'écran au moment où il faut les chanter.</li>
    </ol>

note: type: Content of: <div><div><p>
en: Please send general FSF &amp; GNU inquiries to <a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.  There are also <a href="/contact/">other ways to contact</a> the FSF.  Broken links and other corrections or suggestions can be sent to <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.
fr: Veuillez envoyer les requêtes concernant la FSF et GNU à &lt;<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>&gt;. 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 à &lt;<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>&gt;.

note: 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 hr
en: Please see the <a href="/server/standards/README.translations.html">Translations README</a> for information on coordinating and contributing translations of this article.
fr: Merci d'adresser vos commentaires sur les pages en français à &lt;<a href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>&gt;, et sur les traductions en général à &lt;<a href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>&gt;. Si vous souhaitez y contribuer, vous trouverez dans le <a href="/server/standards/README.translations.html">guide de traduction</a> les infos nécessaires.

note: type: Content of: <div><p>
en: Copyright &copy; 1987, 2022, 2024 Richard Stallman and Bjrn Remseth
fr: Copyright &copy; 1987 Richard Stallman et Bjrn Remseth

note: type: Content of: <div><p>
en: Permission is granted to make and distribute verbatim copies of this transcript as long as the copyright and this permission notice appear.
fr: La reproduction exacte et la distribution de copies intégrales de cette transcription sont permises sur n'importe quel support d'archivage, pourvu que l'avis de copyright et le présent avis de permission y figurent de manière apparente.

note: TRANSLATORS: Use space (SPC) as msgstr if you don't want credits. type: Content of: <div><div>
en: *GNUN-SLOT: TRANSLATOR'S CREDITS*
fr: Traduction : Miluz<br /> Révision : <a href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>

note: timestamp start type: Content of: <div><p>
en: Updated:
fr: Dernière mise à jour :
