1 |
<!--#set var="ENGLISH_PAGE" value="/philosophy/stallman-kth.en.html" --> |
2 |
|
3 |
<!--#include virtual="/server/header.fr.html" --> |
4 |
<!-- Parent-Version: 1.96 --> |
5 |
<!-- This page is derived from /server/standards/boilerplate.html --> |
6 |
<!--#set var="TAGS" value="speeches" --> |
7 |
<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> |
8 |
|
9 |
<!-- This file is automatically generated by GNUnited Nations! --> |
10 |
<title>Conférence de RMS au KTH (Suède, 1986) - Projet GNU - Free Software |
11 |
Foundation</title> |
12 |
<style type="text/css" media="screen"><!-- |
13 |
#content span { font-style: italic; color: #505050; } |
14 |
--> |
15 |
</style> |
16 |
|
17 |
<!--#include virtual="/philosophy/po/stallman-kth.translist" --> |
18 |
<!--#include virtual="/server/banner.fr.html" --> |
19 |
<!--#include virtual="/philosophy/ph-breadcrumb.fr.html" --> |
20 |
<!--GNUN: OUT-OF-DATE NOTICE--> |
21 |
<!--#include virtual="/server/top-addendum.fr.html" --> |
22 |
<div class="article reduced-width"> |
23 |
<h2>Conférence de RMS au KTH (Suède, 1986)</h2> |
24 |
|
25 |
<div class="infobox"> |
26 |
<p>Transcription d'une conférence de Richard Stallman au <i>Kungliga Tekniska |
27 |
Högskolan</i> (Institiut royal de technologie), à Stockholm (Suède), |
28 |
organisée par l'association des étudiants, <i>Datorföreningen Stacken</i>, |
29 |
le 30 octobre 1986. |
30 |
</p> |
31 |
</div> |
32 |
<hr class="thin" /> |
33 |
|
34 |
<div class="introduction"> |
35 |
<p><i>[Note : Ce texte est une transcription légèrement révisée de la |
36 |
conférence. La version originale contient des faux départs ainsi que des |
37 |
locutions naturelles en anglais parlé mais qui paraissent bizarres dans une |
38 |
publication. Il n'est pas évident de la transformer en anglais écrit correct |
39 |
sans faire violence au discours original.]</i></p> |
40 |
</div> |
41 |
|
42 |
<p><b>RMS :</b> Il semble qu'il y ait trois choses dont les gens voudraient que |
43 |
je parle. Tout d'abord, j'ai pensé que le meilleur sujet ici pour un club de |
44 |
hackers était de dire comment ça se passait au <abbr title="Massachusetts |
45 |
Institute of Technology">MIT</abbr> autrefois, ce qui faisait du labo |
46 |
d'intelligence artificielle (labo d'IA) un endroit si particulier. Mais d'un |
47 |
autre côté on m'a suggéré, étant donné que les personnes qui sont ici ne |
48 |
sont pas celles qui étaient aux conférences de lundi et mardi, de raconter |
49 |
ce qui se passe dans le projet GNU, et de dire pourquoi le logiciel et |
50 |
l'information ne peuvent pas être considérés comme des propriétés. Cela fait |
51 |
un total de trois conférences. Et puisque deux de ces sujets prennent chacun |
52 |
une heure, nous y sommes pour un bon moment. Aussi je me suis dit que je |
53 |
pourrais éventuellement diviser la conférence en trois parties. Comme ça les |
54 |
gens pourraient sortir quand ça ne les intéresse pas. Une fois arrivé à la |
55 |
fin d'un sujet, je peux signaler que c'est fini, les gens peuvent sortir et |
56 |
je peux envoyer Jan Rynning dehors pour appeler les autres.</p> |
57 |
|
58 |
<p><span>[Quelqu'un : « <i>Janne, han trenger ingen mike.</i> » (Janne, il n'a |
59 |
pas besoin de micro.)]</span></p> |
60 |
|
61 |
<p>Jan, tu es prêt à courir chercher les autres ?</p> |
62 |
|
63 |
<p><b>JMR :</b> Je suis à la recherche d'un micro et quelqu'un me dit qu'il est |
64 |
dans ce casier fermé à clé.</p> |
65 |
|
66 |
<p><b>RMS :</b> Autrefois au labo d'IA, on l'aurait ouvert à coup de masse et |
67 |
la porte défoncée aurait servi de leçon à celui qui avait osé mettre sous |
68 |
clé quelque chose dont tout le monde avait besoin. Mais heureusement j'ai |
69 |
étudié le chant bulgare, donc je peux très bien me débrouiller sans micro.</p> |
70 |
|
71 |
<p>Bon, est-ce que je dois vous signaler les différentes parties de la |
72 |
conférence ou vous avez juste envie de la suivre jusqu'au bout ? |
73 |
<span>[Réponse : Yeaaah !]</span></p> |
74 |
|
75 |
<p>Quand j'ai commencé à programmer, c'était en 1969, dans un laboratoire d'IBM |
76 |
à New York. Ensuite, je suis allé dans une école qui avait un département |
77 |
d'informatique probablement semblable à la plupart des autres. Il y avait |
78 |
quelques professeurs responsables de ce qu'on était censé y faire et il y |
79 |
avait des gens qui décidaient de qui pouvait se servir de quoi. Il y avait |
80 |
pénurie de terminaux pour la plupart d'entre nous. Or pas mal de professeurs |
81 |
en avaient un personnellement dans leur bureau, ce qui était du gaspillage, |
82 |
mais typique de leur attitude. Quand j'ai visité le labo d'intelligence |
83 |
artificielle au MIT, j'ai trouvé une atmosphère qui était une bouffée d'air |
84 |
pur par rapport à ça. Par exemple : là, on considérait que les terminaux |
85 |
étaient à tout le monde et les professeurs qui les enfermaient à clef dans |
86 |
leurs bureaux couraient le risque de voir leurs portes défoncées. On m'a |
87 |
montré une fois un chariot avec un gros bloc de fer dessus. C'était celui |
88 |
qui avait été utilisé pour défoncer la porte du bureau d'un des professeurs |
89 |
quand il avait eu le culot d'y enfermer un terminal. Il y en avait très peu |
90 |
à cette époque. Il y avait probablement quelque chose comme cinq terminaux à |
91 |
écran pour tout le système ; donc, si l'un d'entre eux était sous clé |
92 |
c'était une vraie catastrophe.</p> |
93 |
|
94 |
<p>Dans les années qui ont suivi, j'ai été guidé par ces idées et il m'est |
95 |
souvent arrivé de crapahuter au-dessus des plafonds ou sous les planchers |
96 |
pour déverrouiller les salles qui contenaient des machines dont les gens |
97 |
avaient besoin. Et je laissais généralement un mot qui expliquait aux gens |
98 |
qu'il ne fallait pas fermer la porte à clé de manière aussi égoïste. Les |
99 |
gens qui fermaient la porte à clé, au fond, ne pensaient qu'à eux. Ils |
100 |
avaient une raison de le faire, bien sûr. Il y avait un truc qui, |
101 |
pensaient-ils, pouvait tenter les voleurs, et ils voulaient l'enfermer à |
102 |
clef. Mais ils ne s'occupaient pas des autres, que cela gênait de ne pas |
103 |
avoir accès au reste du matériel qui était dans la même salle. Presque à |
104 |
chaque fois que cela s'est produit – après avoir porté à leur attention |
105 |
qu'il ne leur appartenait pas de décider du verrouillage de la porte – ils |
106 |
étaient capables de trouver un compromis. Mais le problème, c'est que les |
107 |
gens ne prennent pas la peine d'y penser. Ils se disent : « Cette salle est |
108 |
à moi, je peux la fermer à clé, que les autres aillent au diable ! » C'est |
109 |
précisément cette attitude que nous devons leur désapprendre.</p> |
110 |
|
111 |
<p>Mais cette habitude de déverrouiller les portes n'était pas un comportement |
112 |
isolé, il faisait partie d'une façon de vivre à part entière. Les hackers du |
113 |
labo d'IA étaient vraiment passionnés par l'écriture de bons programmes, de |
114 |
programmes intéressants. Ils étaient à ce point impatients de faire avancer |
115 |
le travail qu'ils ne supportaient pas la mise sous clé des terminaux, ni un |
116 |
tas d'autres comportements qui faisaient obstacle au travail utile. C'est la |
117 |
différence entre des personnes très motivées qui se préoccupent vraiment de |
118 |
ce qu'elles sont en train de faire et des personnes qui prennent ça juste |
119 |
pour un boulot. Si c'est juste un boulot, qu'importe si les gens qui vous |
120 |
ont embauché sont assez stupides pour vous obliger à attendre sans rien |
121 |
faire. C'est leur temps, leur argent, mais pas grand-chose ne se fait dans |
122 |
un endroit comme ça ; ce n'est pas drôle d'être dans un endroit comme ça.</p> |
123 |
|
124 |
<p>Une autre chose que nous n'avions pas au labo d'IA, c'était la protection |
125 |
des fichiers. Il n'y avait aucune sécurité sur l'ordinateur, et c'était une |
126 |
décision mûrement réfléchie. Les hackers qui ont écrit ITS<a |
127 |
id="TransNote1-rev" href="#TransNote1"><sup>1</sup></a> ont jugé que la |
128 |
protection des fichiers n'était qu'un moyen comme un autre, pour un |
129 |
administrateur système autoproclamé, d'avoir du pouvoir sur tout le |
130 |
monde. Ils ont refusé que quiconque puisse avoir du pouvoir sur eux de cette |
131 |
façon. Aussi, ils n'ont pas implémenté ce genre de dispositif. Résultat, |
132 |
chaque fois que quelque chose était cassé dans le système, vous pouviez |
133 |
toujours le réparer. Vous n'étiez jamais obligé de rester planté là, |
134 |
frustré, parce qu'il n'y avait RIEN À FAIRE, alors que vous saviez |
135 |
parfaitement quoi faire mais que quelqu'un avait décidé de ne pas vous faire |
136 |
confiance. Vous n'étiez pas obligé de laisser tomber et de rentrer à la |
137 |
maison en attendant le lendemain matin que quelqu'un vienne réparer le |
138 |
système, alors que vous saviez dix fois mieux que lui ce qu'il fallait |
139 |
faire.</p> |
140 |
|
141 |
<p>Et nous ne laissions pas non plus de professeur, ni de patron, décider quel |
142 |
devait être notre prochain travail, parce que notre travail c'était |
143 |
d'améliorer le système ! Nous parlions aux utilisateurs évidemment ; si vous |
144 |
ne faites pas ça, vous ne pouvez pas savoir ce dont ils ont besoin. Mais |
145 |
ensuite, nous étions les seuls, les plus aptes à savoir quelles sortes |
146 |
d'améliorations étaient possibles. Et nous discutions toujours entre nous |
147 |
pour savoir comment nous voulions voir le système évoluer, quelles idées |
148 |
astucieuses nous avions vues dans d'autres systèmes et pourrions |
149 |
utiliser. Ainsi au final, nous avions une anarchie qui fonctionnait sans |
150 |
à-coups ; d'après mon expérience là-bas, je suis convaincu que c'est la |
151 |
meilleure façon de vivre.</p> |
152 |
|
153 |
<p>Malheureusement le labo d'IA, tel qu'il était à cette époque, a été |
154 |
détruit. Pendant des années nous avions craint qu'il ne soit détruit par un |
155 |
autre labo du MIT, le labo d'informatique, dont le directeur était le genre |
156 |
de type à construire un empire. Il faisait tout ce qu'il pouvait pour avoir |
157 |
une promotion au MIT et faire grossir son organisation. Il essayait |
158 |
continuellement d'annexer le labo d'IA. Personne ne voulait faire les choses |
159 |
à sa manière parce qu'il croyait que les gens devaient obéir aux ordres et |
160 |
d'autres choses dans le style.</p> |
161 |
|
162 |
<p>Mais ce danger, nous avons réussi à le repousser pour être en fin de compte |
163 |
détruits par une chose que nous n'avions pas prévue : l'esprit |
164 |
commercial. Vers le début des années 80, les hackers ont soudain compris que |
165 |
ce qu'ils faisaient avait désormais un intérêt commercial. Il était possible |
166 |
de devenir riche en travaillant pour une société privée. Il leur suffisait |
167 |
de cesser de partager leur travail avec le reste du monde et de détruire le |
168 |
labo d'IA du MIT. Et c'est ce qu'ils ont fait, malgré tous mes efforts pour |
169 |
les en empêcher.</p> |
170 |
|
171 |
<p>Presque tous les programmeurs compétents du labo d'IA, excepté moi, ont été |
172 |
embauchés ailleurs et cela a causé bien plus qu'un changement |
173 |
provisoire. Cela a causé une métamorphose définitive, parce que ça a brisé |
174 |
la continuité de la culture des hackers. Les nouveaux hackers sont toujours |
175 |
attirés par les anciens. Il y avait là les ordinateurs les plus amusants et |
176 |
les gens qui faisaient les choses les plus intéressantes avec. Et aussi une |
177 |
atmosphère qu'il était très amusant de partager. Une fois cela disparu, il |
178 |
ne restait rien pour attirer les nouveaux venus. Ils ont donc cessé |
179 |
d'arriver. Il n'y avait plus personne pour les inspirer, personne pour leur |
180 |
enseigner les traditions. Qui plus est, personne de qui apprendre à bien |
181 |
programmer. Avec juste un tas de professeurs et de doctorants qui ne savent |
182 |
pas vraiment comment faire marcher un programme, on ne peut pas apprendre à |
183 |
faire fonctionner de bons programmes. Ainsi le labo d'IA du MIT que j'aimais |
184 |
a disparu. Et après deux années passées à me battre contre les gens qui |
185 |
avaient fait ça, pour essayer de les punir, j'ai décidé de me consacrer à |
186 |
créer une nouvelle communauté ayant cet état d'esprit.</p> |
187 |
|
188 |
<p>Mais un des problèmes auxquels j'ai dû faire face était celui des logiciels |
189 |
<a |
190 |
href="/philosophy/categories.html#ProprietarySoftware">propriétaires</a>.<a |
191 |
id="TransNote2-rev" href="#TransNote2"><sup>2</sup></a> Par exemple, ce qui |
192 |
s'est passé au labo une fois les hackers partis, c'est que les machines et |
193 |
les logiciels que nous avions développés ne pouvaient plus être |
194 |
maintenus. Bien sûr Les logiciels fonctionnaient et continuaient de |
195 |
fonctionner si personne ne les modifiait, mais pas les machines. Les |
196 |
machines tombaient en panne et personne ne pouvait les réparer, et ensuite |
197 |
on les mettait au rebut. Autrefois, il y avait bien des contrats d'entretien |
198 |
pour les machines, mais pour l'essentiel c'était du bidon. C'était une |
199 |
manière d'obtenir des pièces détachées une fois que les hackers experts du |
200 |
labo d'IA avaient réparé. Parce que si on avait attendu que les techniciens |
201 |
de maintenance le fassent, ça aurait pris des jours. Et on ne voulait pas de |
202 |
ça. On voulait que ça marche. Aussi, les gens qui savaient faire ce genre de |
203 |
chose réparaient très vite, puisqu'ils étaient dix fois plus compétents que |
204 |
n'importe quel technicien. Ils pouvaient faire un bien meilleur travail. Et |
205 |
une fois qu'ils avaient démonté les circuits défectueux, il leur suffisait |
206 |
de les mettre de côté et d'appeler le technicien : « Reprenez-les et |
207 |
ramenez-nous-en des neufs. »</p> |
208 |
|
209 |
<p>À la belle époque, nos hackers avaient également l'habitude de modifier les |
210 |
machines qui venaient de Digital. Par exemple, ils ont construit des boîtes |
211 |
de radiomessagerie <i>[paging]</i> pour les PDP-10. De nos jours, je pense |
212 |
qu'il y en a certains ici [à Stockholm] qui le font aussi. Mais ce n'était |
213 |
pas courant en ce temps-là. Et encore avant, au début des années 60, les |
214 |
gens modifiaient les ordinateurs en ajoutant toutes sortes de nouvelles |
215 |
instructions et de nouvelles fonctionnalités sophistiquées en temps |
216 |
partagé. De sorte que le PDP-1 du MIT, avant qu'il ne parte à la retraite |
217 |
dans les années 70, avait quelque chose comme deux fois plus d'instructions |
218 |
qu'il n'en avait lors de sa livraison par Digital au début des années 60. Il |
219 |
avait des fonctionnalités spéciales complétant l'ordonnanceur |
220 |
<i>[scheduler]</i> matériel, d'étranges fonctionnalités de mappage de la |
221 |
mémoire qui permettaient d'affecter individuellement chaque périphérique |
222 |
matériel à une tâche en temps partagé, et des tas d'autres trucs dont j'ai à |
223 |
peine entendu parler. Je pense qu'ils ont également rajouté une sorte de |
224 |
mode d'adressage étendu, des registres d'indexation ainsi que l'adressage |
225 |
indirect ; en somme ils ont transformé une toute petite machine en une |
226 |
machine à peu près correcte.</p> |
227 |
|
228 |
<p>Je suppose que c'est l'un des inconvénients de la <abbr title="Very Large |
229 |
Scale Integration">VLSI</abbr> (intégration à très grande échelle) : il |
230 |
n'est plus vraiment pratique d'ajouter des instructions sur vos machines.</p> |
231 |
|
232 |
<p>Le PDP-1 avait une caractéristique très intéressante : il était possible |
233 |
d'écrire des programmes intéressants avec un très petit nombre |
234 |
d'instructions, moins qu'aucune autre machine construite depuis. Je crois |
235 |
par exemple que le célèbre hack d'affichage <i>munching squares</i> (lit. : |
236 |
grignotage de carrés) – qui traçait des carrés qui grandissaient puis se |
237 |
brisaient en une multitude de petits carrés qui devenaient plus grands et se |
238 |
brisaient en petits carrés – cela a été écrit en quelque chose comme cinq |
239 |
instructions sur le PDP-1. Et beaucoup d'autres beaux programmes d'affichage |
240 |
ont pu être écrits ainsi avec un très petit nombre d'instructions.</p> |
241 |
|
242 |
<p>Voilà donc ce qu'était le labo d'IA. Mais c'était quoi la culture des |
243 |
hackers, hormis leur anarchisme ? Au temps du PDP-1, la machine ne pouvait |
244 |
être utilisée que par une personne à la fois, du moins au début. Plusieurs |
245 |
années après, ils ont écrit un système fonctionnant en temps partagé et ils |
246 |
ont rajouté pas mal de matériel pour ça. Mais au début, on pouvait seulement |
247 |
s'inscrire pour une période donnée. Naturellement les professeurs et les |
248 |
étudiants qui travaillaient sur des projets officiels venaient toujours |
249 |
pendant la journée. Alors, les gens qui voulaient avoir plus de temps |
250 |
s'inscrivaient pour la nuit quand il y avait moins d'affluence. Voilà |
251 |
l'origine de la coutume hacker de travailler la nuit. Même lorsqu'il y eut |
252 |
le temps partagé, il était toujours plus facile d'avoir du temps la nuit, on |
253 |
pouvait avoir plus de cycles parce qu'il y avait peu d'utilisateurs. Aussi |
254 |
ceux qui voulaient abattre beaucoup de travail continuaient à venir la |
255 |
nuit. Mais ça a commencé à changer parce qu'on n'était pas seul, il y avait |
256 |
là quelques autres hackers ; ainsi c'est devenu un phénomène social. Si vous |
257 |
entriez pendant la journée, vous pouviez vous attendre à trouver des |
258 |
professeurs et des étudiants qui n'étaient pas des fans de la machine, alors |
259 |
que si vous veniez la nuit vous trouviez des hackers. Par conséquent, les |
260 |
hackers sont venus la nuit pour partager leur culture. Et ils ont développé |
261 |
d'autres traditions, comme d'aller se ravitailler au Chinois à trois heures |
262 |
du matin. Je me rappelle avoir vu beaucoup de levers de soleil alors que je |
263 |
revenais en voiture de Chinatown. C'était tellement beau de voir le lever de |
264 |
soleil, c'est une heure tellement calme de la journée. C'est une heure |
265 |
merveilleuse pour se préparer à aller dormir. Il est si agréable de rentrer |
266 |
à pied chez soi dans une lumière qui commence juste à poindre avec les |
267 |
oiseaux qui se mettent à gazouiller. On a une sensation de douce |
268 |
satisfaction, de tranquillité, en pensant au travail accompli pendant la |
269 |
nuit.</p> |
270 |
|
271 |
<p>Une autre tradition que nous avons initiée était celle d'avoir des endroits |
272 |
pour dormir au labo. Depuis le jour où j'y suis entré, il y a toujours eu au |
273 |
moins un lit. Et j'ai probablement habité au labo un peu plus longtemps que |
274 |
la plupart des autres car, tous les ans ou tous les deux ans, pour une |
275 |
raison ou une autre, je n'avais pas d'appartement et j'y habitais quelques |
276 |
mois. Et j'ai toujours trouvé que c'était très confortable, sans compter que |
277 |
c'était sympa et frais en été. Mais il n'était pas rare du tout de tomber |
278 |
sur des gens qui s'étaient endormis au labo, toujours à cause de leur |
279 |
enthousiasme : vous restez le plus longtemps possible à hacker parce que |
280 |
vous ne voulez pas vous arrêter, et une fois que vous êtes complètement |
281 |
épuisé, vous escaladez la surface horizontale souple la plus proche. Une |
282 |
ambiance vraiment sans cérémonie.</p> |
283 |
|
284 |
<p>Mais quand les hackers sont tous partis du labo, ça a causé un changement |
285 |
démographique parce que les professeurs et les étudiants qui n'étaient pas |
286 |
vraiment des fans de la machine étaient aussi nombreux qu'auparavant ; |
287 |
maintenant ils représentaient la majorité. Et ils ont vraiment eu peur. Sans |
288 |
hacker pour entretenir le système, ils se sont dit : « Ça va être un |
289 |
désastre, il nous faut du logiciel commercial. Comme ça, nous pourrons |
290 |
compter sur la maintenance de l'entreprise. » La suite prouva qu'ils avaient |
291 |
absolument tort, mais c'est ce qu'ils ont fait.</p> |
292 |
|
293 |
<p>C'était exactement au moment où ils devaient recevoir un nouvel ordinateur, |
294 |
le KL-10, et la question s'est alors posée : faut-il qu'il fonctionne avec |
295 |
ITS ou bien Twenex, le système de Digital ? Une fois les hackers partis |
296 |
– ils auraient sans doute poussé à utiliser le leur – les universitaires ont |
297 |
choisi d'utiliser le logiciel commercial et cela eut plusieurs effets |
298 |
immédiats. Certains n'ont pas été vraiment immédiats, mais ils en ont |
299 |
découlé inévitablement comme l'aurait prévu n'importe qui avec un peu de |
300 |
réflexion.</p> |
301 |
|
302 |
<p>Le premier problème était que ce logiciel était beaucoup plus mal écrit et |
303 |
plus difficile à comprendre qu'ITS, rendant donc plus difficiles les |
304 |
modifications nécessaires. L'autre était que le logiciel était sécurisé, ce |
305 |
qui eut pour effet inévitable de diminuer la collaboration entre les uns et |
306 |
les autres. Dans le passé, sur ITS, nous trouvions souhaitable d'avoir accès |
307 |
à tous les fichiers et de pouvoir modifier n'importe lequel, parce que nous |
308 |
avions des raisons pour cela. Je me rappelle un scandale intéressant où |
309 |
quelqu'un a envoyé une demande d'assistance en utilisant Macsyma. Macsyma |
310 |
est un programme d'algèbre symbolique qui a été développé au MIT. Il a |
311 |
envoyé une demande d'assistance à l'une des personnes qui travaillait dessus |
312 |
et a obtenu une réponse quelques heures plus tard de la part de quelqu'un |
313 |
d'autre. Il était horrifié. Il a envoyé le message suivant : « Untel doit |
314 |
lire votre courrier, les fichiers de courrier ne sont peut-être pas |
315 |
correctement protégés sur votre système ? » – « Naturellement, aucun dossier |
316 |
n'est protégé sur notre système. Où est le problème ? Vous avez obtenu votre |
317 |
réponse plus tôt, de quoi vous plaignez-vous ? Évidemment nous lisons le |
318 |
courrier de tout le monde, comme ça nous pouvons tomber sur des personnes |
319 |
comme vous et les aider. » Certains ne connaissent pas leur bonheur.</p> |
320 |
|
321 |
<p>Bien sûr, Twenex n'est pas seulement muni d'une sécurité – et par défaut la |
322 |
sécurité est activée – mais il est également conçu en partant de l'hypothèse |
323 |
que la sécurité est active. Or il y a un bon nombre de trucs très faciles à |
324 |
faire qui peuvent causer pas mal de dégâts et la seule chose qui vous |
325 |
empêche de les faire par accident, c'est la sécurité. Sur ITS, nous avions |
326 |
développé d'autres moyens d'éviter que les gens fassent ces trucs par |
327 |
accident, mais sur Twenex on ne les avait pas, étant donné que des mesures |
328 |
de sécurité strictes étaient censées être opérationnelles et que les chefs |
329 |
étaient les seuls à avoir la possibilité de faire des erreurs. Donc, ils |
330 |
n'avaient mis aucun autre mécanisme de sécurité pour éviter les |
331 |
accidents. Le résultat, c'est qu'on ne pouvait plus se contenter de |
332 |
désactiver la sécurité de Twenex pour avoir ce qu'on voulait. Et il n'y |
333 |
avait plus les hackers pour faire les changements nécessaires à |
334 |
l'introduction de ces autres mécanismes. Aussi les gens ont-ils été obligés |
335 |
de travailler avec la sécurité. Et la machine était là depuis six mois à peu |
336 |
près, quand il a commencé à y avoir quelques « coups d'État ». Au début nous |
337 |
avons supposé que tous ceux qui travaillaient pour le labo allaient avoir le |
338 |
<i>wheel bit</i><a id="TransNote3-rev" href="#TransNote3"><sup>3</sup></a> |
339 |
qui leur donnerait les pleins pouvoirs pour désactiver la sécurité, mais |
340 |
certains jours vous veniez dans l'après-midi pour découvrir que les <i>wheel |
341 |
bits</i> d'à peu près tout le monde avaient été supprimés.</p> |
342 |
|
343 |
<p>Quand je m'en suis rendu compte, j'ai rectifié la situation. La première |
344 |
fois, il se trouve que je connaissais le mot de passe d'un des membres de |
345 |
l'élite et que j'ai pu l'utiliser pour redonner à chacun ses privilèges. La |
346 |
deuxième fois, il avait changé son mot de passe, il avait changé de |
347 |
relations sociales, il appartenait désormais au parti aristocrate. Alors |
348 |
j'ai dû arrêter la machine et utiliser le système DDT<a id="TransNote4-rev" |
349 |
href="#TransNote4"><sup>4</sup></a> en temps non partagé pour fouiller un |
350 |
peu partout. J'ai fouillé dans le moniteur pendant un moment et j'ai compris |
351 |
à la fin comment faire pour qu'il se charge et que je puisse le patcher. De |
352 |
sorte que j'ai pu bloquer le contrôle des mots de passe et ainsi redonner |
353 |
leur <i>wheel bit</i> à plein de gens. Puis j'ai laissé un message |
354 |
système. Le nom de cette machine était OZ et le message disait : « Il y a eu |
355 |
une nouvelle tentative de prise du pouvoir, jusqu'ici les forces |
356 |
aristocratiques sont battues – <i>Radio Free OZ</i> (la radio libre d'Oz). » |
357 |
Plus tard j'ai découvert que <i>Radio Free OZ</i> est l'une des expressions |
358 |
utilisées par le <i>Firesign Theater</i>. Je ne le savais pas à ce |
359 |
moment-là.</p> |
360 |
|
361 |
<p>Mais petit à petit les choses ont empiré – c'est juste la façon dont le |
362 |
système avait été construit qui forçait les gens à exiger de plus en plus de |
363 |
sécurité – jusqu'à ce que, finalement, je sois obligé d'arrêter d'utiliser |
364 |
la machine parce que je refusais d'avoir un mot de passe secret. Depuis que |
365 |
les mots de passe étaient apparus pour la première fois au labo d'IA du MIT, |
366 |
j'en étais venu à la conclusion que pour respecter mes convictions, pour |
367 |
agir en accord avec mes convictions, il ne devait y avoir aucun mot de |
368 |
passe. Je dois toujours veiller à avoir un mot de passe aussi évident que |
369 |
possible et le dire à tout le monde. Puisque je ne crois pas qu'il soit |
370 |
vraiment souhaitable d'avoir une sécurité sur un ordinateur, je ne dois pas |
371 |
aider au maintien du régime de sécurité. Sur les systèmes qui le permettent, |
372 |
j'utilise un « mot de passe vide » et sur des systèmes où cela n'est pas |
373 |
permis (où cela signifie que vous ne pouvez pas ouvrir de session de |
374 |
l'extérieur, des choses comme ça), j'utilise mon nom d'utilisateur comme mot |
375 |
de passe. C'est aussi évident que possible. Et quand les gens me font |
376 |
remarquer que de cette manière on peut ouvrir une session sous mon nom, je |
377 |
réponds : « Oui, c'est ça l'idée, quelqu'un pourrait avoir besoin de |
378 |
certaines données sur cette machine. Je veux m'assurer qu'elles ne se feront |
379 |
pas avoir par la sécurité. »</p> |
380 |
|
381 |
<p>Et une autre chose que je fais toujours, c'est de désactiver la protection |
382 |
sur mon répertoire et mes dossiers. Parce que de temps en temps j'y stocke |
383 |
des programmes utiles et s'il y a un bogue je veux que les gens puissent le |
384 |
corriger.</p> |
385 |
|
386 |
<p>Mais cette machine n'avait pas non plus été conçue pour gérer un phénomène |
387 |
appelé « tourisme ». Le tourisme était une très vieille tradition du labo |
388 |
d'IA qui allait avec nos autres conceptions de l'anarchie. Elle disait que |
389 |
nous devions laisser les gens de l'extérieur utiliser la machine. À l'époque |
390 |
où n'importe qui pouvait venir se connecter à ce qui lui plaisait, c'était |
391 |
automatique : comme visiteur, vous pouviez ouvrir une session pour |
392 |
travailler. Plus tard nous avons plus ou moins formalisé ça comme une |
393 |
tradition établie, particulièrement quand l'Arpanet s'est mis en place et |
394 |
que les gens ont commencé à se connecter à nos machines à partir de |
395 |
n'importe quel coin du pays. Ce que nous espérions, c'était que ces |
396 |
personnes apprendraient vraiment à programmer et qu'elles commenceraient à |
397 |
modifier le système d'exploitation. Si vous disiez ça à un administrateur |
398 |
système n'importe où ailleurs, il serait horrifié. Si vous lui proposiez |
399 |
l'idée que n'importe quel étranger puisse utiliser la machine, il |
400 |
répondrait : « Et s'il commence à modifier nos programmes ? » Mais pour |
401 |
nous, si un étranger commençait à modifier les programmes, cela signifiait |
402 |
qu'il montrait un intérêt réel à devenir un membre contributif de la |
403 |
communauté. Nous encouragions toujours les gens à le faire ; à commencer, |
404 |
naturellement, par écrire de nouveaux utilitaires, des petits. Nous jetions |
405 |
un œil sur ce qu'ils avaient fait et nous le corrigions. Ils en arrivaient |
406 |
alors à ajouter des fonctionnalités à de grands utilitaires existants. Et ce |
407 |
sont des programmes qui existent depuis une dizaine ou peut-être une |
408 |
quinzaine d'années, et grandissent petit à petit à mesure que les artisans, |
409 |
l'un après l'autre, ajoutent de nouvelles fonctionnalités.</p> |
410 |
|
411 |
<p>C'est pour ainsi dire comme certaines villes de France, où l'on peut voir |
412 |
des bâtiments extrêmement anciens avec des rajouts construits des centaines |
413 |
d'années plus tard, jusqu'à aujourd'hui. Dans le domaine de l'informatique, |
414 |
un programme qui a été commencé en 1965, c'est à peu près ça. Ainsi nous |
415 |
espérions toujours que des touristes deviendraient mainteneurs du système ; |
416 |
et peut-être qu'ensuite ils allaient être embauchés, après avoir commencé à |
417 |
travailler sur les programmes du système et nous avoir montré qu'ils étaient |
418 |
capables de faire du bon travail.</p> |
419 |
|
420 |
<p>Mais il y avait sur les machines ITS certains autres dispositifs qui |
421 |
aidaient à éviter que ça nous échappe. L'un d'entre eux était un dispositif |
422 |
« espion » où tout le monde pouvait observer ce que chacun faisait. Et |
423 |
naturellement les touristes adoraient espionner. Ils pensaient que c'était |
424 |
super. C'était un peu méchant, voyez-vous, mais le résultat, c'était que si |
425 |
un touriste commençait à faire un truc à problème, il y avait toujours |
426 |
quelqu'un pour le voir. Donc assez vite ses amis étaient furieux parce |
427 |
qu'ils savaient que pour que le tourisme continue à exister, il fallait des |
428 |
touristes responsables. Aussi y avait-il forcément quelqu'un qui savait qui |
429 |
c'était et nous pouvions lui dire de nous laisser tranquilles. Et si nous ne |
430 |
pouvions pas, alors ce que nous faisions, c'était d'interdire les connexions |
431 |
provenant de certains endroits pendant un moment, et quand nous les |
432 |
autorisions à nouveau il était parti et nous avait oubliés. Et cela a |
433 |
continué comme ça pendant des années, des années… et des années.</p> |
434 |
|
435 |
<p>Mais le système Twenex n'avait pas été conçu pour ce genre de chose et par |
436 |
la suite ils ne m'ont plus toléré, moi et mon mot de passe que tout le monde |
437 |
connaissait. Les touristes n'arrêtaient pas d'ouvrir des sessions sous mon |
438 |
nom, à deux ou trois à la fois, et ont commencé à vider mon compte. À ce |
439 |
moment-là de toute façon, je travaillais le plus souvent sur d'autres |
440 |
machines ; si bien que finalement je l'ai abandonné et cessé à tout jamais |
441 |
de le réactiver. C'est tout. Je ne me suis pas connecté sur cette machine |
442 |
sous mon nom pendant… <span>[À ce moment-là, RMS est interrompu par |
443 |
un tonnerre d'applaudissements.]</span></p> |
444 |
|
445 |
<p>Quand ils ont installé le système Twenex, ils avaient à l'esprit d'y faire |
446 |
plusieurs changements, des changements dans le fonctionnement de la |
447 |
sécurité. Ils voulaient aussi mettre la machine sur le réseau <abbr |
448 |
title="Advanced Research Projects Agency">ARPA</abbr> ainsi que sur le |
449 |
réseau Chaos du MIT. Et il se trouve qu'ils n'ont pas pu le faire, qu'il n'y |
450 |
avait personne d'assez compétent pour ça. Il n'y avait plus de talent |
451 |
disponible et il était trop difficile de changer ça. Ce système était |
452 |
beaucoup plus difficile à comprendre qu'ITS parce qu'il était trop mal |
453 |
écrit, et naturellement Digital ne voulait pas faire ce genre de |
454 |
chose. Ainsi l'idée d'un système commercial qui se maintenait tout seul |
455 |
s'est révélée erronée. Ils avaient absolument besoin de hackers mais |
456 |
n'avaient plus les moyens de les attirer. Et de nos jours au MIT, il y a |
457 |
davantage de gens que ça intéresse de hacker ITS que Twenex.</p> |
458 |
|
459 |
<p>La dernière raison de cet état de fait, c'est que Twenex ne pouvait pas être |
460 |
partagé. Twenex est un programme propriétaire : vous n'avez le droit d'avoir |
461 |
les sources que si vous les gardez secrètes par des moyens très |
462 |
déplaisants. Et ça leur donne mauvais goût, à moins d'être inconscient comme |
463 |
le sont certains en informatique (il y en a qui feront n'importe quoi si |
464 |
c'est amusant pour eux et ne penseront pas une minute à coopérer avec qui |
465 |
que ce soit ; mais il faut être franchement ailleurs pour ne pas remarquer à |
466 |
quel point c'est triste de travailler comme ça sur un programme, comme c'est |
467 |
décourageant). Et comme si ce n'était pas suffisant, chaque année ils vous |
468 |
donnent une nouvelle version remplie d'une cinquantaine de milliers de |
469 |
lignes de code supplémentaires, toutes écrites par des singes. Parce qu'ils |
470 |
suivent généralement une école de programmation système du genre « un |
471 |
million de singes tapant sur une machine à écrire finiront bien un jour par |
472 |
sortir quelque chose d'utile ».</p> |
473 |
|
474 |
<p>Il était clair pour moi, après avoir vu ce qui arrivait à ces systèmes |
475 |
propriétaires, que la seule façon de conserver l'esprit du vieux labo d'IA |
476 |
était d'avoir un système d'exploitation libre ; d'avoir un système fait de |
477 |
logiciel libre pouvant être partagé avec n'importe qui, de façon à pouvoir |
478 |
inviter tout le monde à collaborer à son amélioration. Et c'est ce qui a |
479 |
conduit au projet GNU. Ainsi j'estime que nous sommes arrivés à la deuxième |
480 |
partie de la conférence.</p> |
481 |
|
482 |
<p>Il y a environ trois ans et demi, il m'est apparu comme une évidence que je |
483 |
devais commencer à développer un système constitué de <a |
484 |
href="/philosophy/free-sw.html">logiciel libre</a>. J'envisageais deux types |
485 |
de systèmes : le premier, pratiquement identique au système de machine Lisp |
486 |
du MIT, mais libre et fonctionnant sur tout type de matériel, pas seulement |
487 |
sur les machines Lisp spécialisées, et l'autre, un logiciel d'exploitation |
488 |
plus conventionnel. Et il était clair pour moi que si je faisais un logiciel |
489 |
d'exploitation conventionnel, je devais le rendre compatible avec Unix parce |
490 |
que ça rendait la migration plus facile aux gens de tous horizons. Après |
491 |
quelque temps, j'ai choisi la deuxième solution. Et la raison, c'était qu'il |
492 |
n'était pas possible d'obtenir quelque chose de vraiment comparable au |
493 |
système de machine Lisp sur du matériel polyvalent. Le système de machine |
494 |
Lisp utilise du matériel spécial, avec un microcode spécial réinscriptible, |
495 |
pour obtenir à la fois une bonne vitesse d'exécution et une détection |
496 |
robuste des erreurs pendant le temps d'exécution, en particulier les erreurs |
497 |
sur le type des données. Pour qu'un système Lisp puisse fonctionner assez |
498 |
rapidement sur du matériel ordinaire, on doit commencer par faire des |
499 |
suppositions, supposer que tel argument est du type voulu ; ensuite, si ce |
500 |
n'est pas le cas, le système se plante.</p> |
501 |
|
502 |
<p>Naturellement on peut mettre des contrôles explicites, on peut écrire un |
503 |
programme robuste si on veut, mais le fait est qu'on va obtenir des trucs |
504 |
comme des erreurs d'adressage de mémoire si l'on fournit à une fonction un |
505 |
argument de type inapproprié sans RIEN prévoir pour faire la vérification.</p> |
506 |
|
507 |
<p>Le résultat, c'est qu'il fallait que quelque chose fonctionne en dessous du |
508 |
système Lisp pour détecter ces erreurs et permettre à l'utilisateur de |
509 |
garder le système en état de marche et de déboguer les problèmes |
510 |
éventuels. J'en suis arrivé à la conclusion que si je devais avoir un |
511 |
système d'exploitation de bas niveau, je pouvais tout aussi bien faire un |
512 |
bon système d'exploitation – le choix était entre un système d'exploitation |
513 |
plus le Lisp, et juste un système d'exploitation ; donc je devais faire le |
514 |
système d'exploitation d'abord et le rendre compatible avec Unix. Enfin, |
515 |
quand j'ai réalisé que je pouvais utiliser le plus drôle des mots anglais |
516 |
pour nommer ce système, le choix était clair. Et ce mot est bien sûr GNU, |
517 |
qui signifie <i>GNU's Not Unix</i> (GNU N'est pas Unix). L'acronyme récursif |
518 |
est une très vieille tradition dans la communauté de hackers qui gravite |
519 |
autour du MIT. Il a commencé je crois, avec un éditeur appelé TINT, ce qui |
520 |
signifie <i>Tint Is Not <abbr title="Text Editor and |
521 |
COrrector">Teco</abbr></i>, et plus tard c'est passé par des noms comme SINE |
522 |
pour <i>Sine Is Not Emacs</i>, et FINE pour <i>Fine Is Not Emacs</i>, et |
523 |
EINE pour <i>Eine Is Not Emacs</i>, et ZWEI pour <i>Zwei Was Eine |
524 |
Initially</i>, et finalement on est arrivé à GNU.</p> |
525 |
|
526 |
<p>Je dirais que depuis le moment, il y a environ deux ans et demi, où j'ai |
527 |
commencé à travailler vraiment sur GNU, j'ai déjà fait plus de la moitié du |
528 |
travail. Au moment où j'étais prêt à démarrer le projet, j'ai d'abord |
529 |
regardé autour de moi ce qu'il y avait de libre déjà disponible. J'ai |
530 |
découvert un système de compilation portable appelé <i>the Free University |
531 |
Compiler Kit</i>, qui était intéressant, et j'ai pensé qu'avec un nom pareil |
532 |
je pourrais peut-être l'avoir.<a id="TransNote5-rev" |
533 |
href="#TransNote5"><sup>5</sup></a> Alors j'ai envoyé un message à son |
534 |
développeur en lui demandant s'il acceptait de le donner au projet GNU. Et |
535 |
il a dit « Non, l'université est peut-être libre, mais le logiciel qu'elle |
536 |
développe ne l'est pas », mais il a ajouté qu'il voulait aussi avoir un |
537 |
système compatible avec Unix et qu'il voulait écrire une sorte de noyau pour |
538 |
lui, alors pourquoi est-ce que je n'écrirais pas les utilitaires, comme ça |
539 |
les deux pourraient être distribués avec son compilateur propriétaire ? Ça |
540 |
encouragerait les gens à l'acheter. J'ai pensé que c'était ignoble, alors je |
541 |
lui ai dit que mon premier projet serait de faire un compilateur.</p> |
542 |
|
543 |
<p>Je ne savais pas vraiment grand-chose au sujet de l'optimisation des |
544 |
compilateurs à cette époque parce que je n'avais jamais travaillé |
545 |
dessus. Mais j'ai mis la main sur un compilateur dont on m'avait dit qu'il |
546 |
était libre. C'était un compilateur appelé Pastel dont les auteurs disaient |
547 |
que c'était du « Pascal mal fichu ».</p> |
548 |
|
549 |
<p>Le Pastel est un langage très compliqué comprenant des fonctionnalités comme |
550 |
des types paramétrés et des paramètres de types explicites et beaucoup de |
551 |
choses compliquées. Le compilateur naturellement était écrit dans ce langage |
552 |
et comportait nombre de fonctionnalités compliquées pour optimiser |
553 |
l'utilisation de ces éléments. Par exemple : le type <i>string</i> dans ce |
554 |
langage était un type paramétré ; vous pouviez dire <code>string(n)</code> |
555 |
si vous vouliez une chaîne d'une longueur particulière ; vous pouviez |
556 |
également juste dire <code>string</code>, et le paramètre était déterminé à |
557 |
partir du contexte. Cela dit, les chaînes sont très importantes et sont |
558 |
nécessaires à beaucoup de constructions qui les utilisent pour fonctionner |
559 |
rapidement. Et ça veut dire qu'on avait besoin de beaucoup de |
560 |
fonctionnalités pour détecter des choses comme : lorsque la longueur |
561 |
déclarée d'une chaîne est un argument dont on sait qu'il est constant dans |
562 |
toute la fonction, sauvegarder la valeur et optimiser le code qu'elle va |
563 |
produire ; beaucoup de choses compliquées. Mais j'ai pu voir dans ce |
564 |
compilateur comment procéder à l'allocation automatique de registre et |
565 |
glaner quelques idées sur la façon de gérer différents types de machines.</p> |
566 |
|
567 |
<p>Bon, puisque ce compilateur avait déjà compilé Pastel, tout ce que j'avais à |
568 |
faire était de rajouter une interface pour le C, ce que je fis, puis |
569 |
d'ajouter une sortie pour le 68000 qui devait être ma première cible. Mais |
570 |
j'allais vers un sérieux problème. Puisque le langage Pastel était conçu de |
571 |
manière à ne pas avoir besoin de déclarer quoi que ce soit avant de |
572 |
l'utiliser, la déclaration d'une variable et son usage pouvaient se faire |
573 |
dans n'importe quel ordre ; en d'autres termes, la déclaration |
574 |
<code>forward</code> du Pascal était obsolète. Pour cette raison il fallait |
575 |
lire le programme dans son intégralité, le garder en mémoire centrale |
576 |
<i>[core]</i> et le compiler d'une traite. Le résultat, c'était que le |
577 |
stockage intermédiaire utilisé par le compilateur, ou plutôt la taille de la |
578 |
mémoire requise, était proportionnel à la taille de votre fichier. Et il |
579 |
fallait aussi compter avec l'espace de pile ; vous aviez besoin d'une |
580 |
quantité gigantesque d'espace de pile. J'en ai conclu que le système 68000 |
581 |
dont je disposais ne pouvait pas faire fonctionner ce compilateur. Car |
582 |
c'était une horrible version d'Unix qui vous limitait à quelque chose comme |
583 |
16 000 mots de pile, ceci en dépit de l'existence de six mégaoctets dans la |
584 |
machine. Et naturellement, pour générer la matrice des conflits afin de voir |
585 |
quelles valeurs temporaires étaient en conflit ou quel groupe de valeurs |
586 |
étaient actives en même temps, il était nécessaire d'avoir une matrice |
587 |
quadratique de bits. Et pour les grandes fonctions cela pouvait prendre des |
588 |
centaines de milliers d'octets. Ainsi je suis parvenu à déboguer la première |
589 |
des quelque dix passes du compilateur en compilation croisée sur cette |
590 |
machine et j'ai constaté alors que la seconde ne pourrait jamais |
591 |
fonctionner.</p> |
592 |
|
593 |
<p>Pendant que je réfléchissais à ces problèmes en me demandant si je devais |
594 |
essayer de les corriger ou bien écrire entièrement un nouveau compilateur, |
595 |
j'ai commencé de manière indirecte à travailler sur GNU Emacs. GNU Emacs est |
596 |
la partie principale de la distribution du système GNU. C'est un éditeur de |
597 |
texte extensible qui ressemble de près à l'Emacs original que j'ai développé |
598 |
il y a dix ans, sauf que celui-ci emploie le véritable Lisp comme langage |
599 |
d'extension. L'éditeur lui-même est implémenté en C, de même que |
600 |
l'interpréteur Lisp. Ainsi l'interpréteur Lisp est entièrement portable et |
601 |
vous n'avez pas besoin de système Lisp externe à l'éditeur. L'éditeur |
602 |
contient son propre système Lisp et toutes les commandes d'édition sont |
603 |
écrites en Lisp de manière à pouvoir vous donner des exemples sur la façon |
604 |
d'écrire vos propres commandes et des éléments à utiliser comme point de |
605 |
départ. Il vous suffit de les modifier pour obtenir les commandes que vous |
606 |
voulez.</p> |
607 |
|
608 |
<p>L'été de cette année-là, il y a environ deux ans maintenant, un ami m'a dit |
609 |
qu'en raison de son travail au tout début du développement de l'Emacs de |
610 |
Gosling, il avait la permission écrite de Gosling de distribuer sa propre |
611 |
version. Gosling, à l'origine, avait créé son Emacs. Il l'avait distribué |
612 |
librement et beaucoup de gens aidèrent à son développement, avec l'espoir |
613 |
– selon les propres mots de Gosling dans son manuel – qu'il avait suivi le |
614 |
même état d'esprit que celui que j'avais donné à l'Emacs original. Ensuite |
615 |
il a poignardé tout le monde dans le dos en prenant des copyrights dessus, |
616 |
en faisant promettre aux gens de ne pas le redistribuer puis en le vendant à |
617 |
une maison d'édition de logiciels. Les relations d'affaires que j'ai eues |
618 |
avec lui par la suite m'ont personnellement prouvé qu'il était aussi lâche |
619 |
et méprisable que vous pouvez le voir dans cette histoire.</p> |
620 |
|
621 |
<p>Mais de toute façon, mon ami m'avait donné le programme et j'avais |
622 |
l'intention de modifier les commandes d'édition du niveau supérieur pour les |
623 |
rendre compatibles avec l'Emacs original dont j'avais l'habitude. Ceci pour |
624 |
qu'elles puissent manipuler toutes les combinaisons d'arguments numériques, |
625 |
etc., tout ce que l'on pouvait s'attendre à ce qu'elles manipulent, en étant |
626 |
pourvues de toutes les fonctionnalités que je voulais. Mais peu après, j'ai |
627 |
découvert que le langage d'extension de cet éditeur, appelé Mocklisp, ne |
628 |
suffisait pas à la tâche. J'ai compris que je devais le remplacer |
629 |
immédiatement pour pouvoir réaliser mon projet. J'avais déjà pensé |
630 |
auparavant à remplacer éventuellement Mocklisp par le vrai Lisp, mais ce que |
631 |
j'ai découvert, c'est qu'il fallait le faire dès le début. Maintenant, la |
632 |
raison pour laquelle Mocklisp s'appelle <i>mock</i> (faux), c'est qu'il n'a |
633 |
aucune sorte de structure pour les types de données : il n'y a pas les |
634 |
listes Lisp ; il n'y a aucune sorte de tableau ; il n'y a pas non plus les |
635 |
symboles Lisp, qui sont des objets nommés (à chaque nom particulier |
636 |
correspond un seul objet de manière que la saisie du nom se rapporte |
637 |
toujours au même objet, sinon ça entrave considérablement l'écriture de pas |
638 |
mal de sortes de programmes en vous obligeant à passer par des manipulations |
639 |
de chaînes compliquées qui ne font pas vraiment avancer les choses).</p> |
640 |
|
641 |
<p>Alors j'ai écrit un interpréteur Lisp pour le mettre à la place de |
642 |
Mocklisp. Et ce faisant j'ai constaté que je devais réécrire un certain |
643 |
nombre de structures de données internes à l'éditeur parce que je voulais |
644 |
qu'il s'agisse d'objets Lisp. Je voulais que l'interface entre Lisp et |
645 |
l'éditeur soit propre, c'est-à-dire que des objets comme les tampons |
646 |
d'édition, les sous-processus, les fenêtres et les emplacements des tampons |
647 |
soient tous des objets Lisp, afin que les processus primaires de l'éditeur |
648 |
qui s'en servaient puissent vraiment être appelés en tant que fonctions Lisp |
649 |
avec des données Lisp. Cela voulait dire qu'il fallait recréer entièrement |
650 |
les formats de données de tous les objets et réécrire toutes les fonctions |
651 |
qui s'en servaient. Et cela a eu pour résultat, pendant environ six mois, de |
652 |
me faire réécrire à peu près tout ce qu'il y avait dans l'éditeur.</p> |
653 |
|
654 |
<p>En outre, du fait qu'il est vraiment difficile d'écrire en Mocklisp, rien |
655 |
n'était écrit proprement. Et en le réécrivant, je pouvais tirer profit de la |
656 |
puissance du vrai Lisp ; je pouvais rendre tout ça beaucoup plus puissant, |
657 |
beaucoup plus simple et rapide. C'est ce que j'ai fait. Et quand j'ai |
658 |
commencé à distribuer le programme, il ne restait qu'une petite partie de ce |
659 |
que j'avais reçu.</p> |
660 |
|
661 |
<p>À ce moment-là, la société à qui Gosling pensait avoir vendu le programme a |
662 |
contesté à mon ami le droit de le distribuer. Le message avait été |
663 |
sauvegardé sur une bande que mon ami n'arrivait plus à retrouver et Gosling |
664 |
a nié lui avoir donné cette permission. Une chose étrange s'est alors |
665 |
produite. Il était en pourparlers avec cette société qui semblait surtout |
666 |
vouloir éviter qu'il ne distribue quelque chose d'analogue à ce qu'elle-même |
667 |
distribuait. Voyez-vous, Gosling continuait à distribuer ce qu'il m'avait |
668 |
donné et la société pour laquelle il travaillait, Megatest, également ; il |
669 |
s'agissait en réalité d'une ancienne version de l'Emacs de Gosling, avec ses |
670 |
modifications. Il allait donc faire un accord avec eux dans lequel il |
671 |
cesserait de le distribuer, et passer ensuite à GNU Emacs. Ils |
672 |
reconnaîtraient alors qu'après tout Gosling avait leur permission, et donc |
673 |
théoriquement tout le monde serait content. De plus cette société m'a |
674 |
entretenu au sujet de leur désir de distribuer GNU Emacs, gratuitement bien |
675 |
sûr, mais aussi de vendre divers services d'assistance. Ils voulaient même |
676 |
m'embaucher pour aider à faire ce travail. Aussi est-il un peu étrange |
677 |
qu'ils aient soudain changé d'avis et refusé de signer cet accord, puis mis |
678 |
une annonce sur le réseau comme quoi je n'avais pas le droit de distribuer |
679 |
le programme. Ils n'ont pas vraiment dit qu'ils feraient quoi que ce |
680 |
soit. Ils ont juste dit qu'il n'était pas improbable qu'ils fassent quelque |
681 |
chose un jour. Cela faisait suffisamment peur aux gens pour que plus |
682 |
personne ne l'utilise. C'est triste.</p> |
683 |
|
684 |
<p>(Parfois je me dis que peut-être une des meilleures choses que je pourrais |
685 |
faire dans la vie serait de trouver une pile colossale de logiciels |
686 |
propriétaires couverts par le secret industriel et de commencer à en |
687 |
distribuer des copies à tous les coins de rue, ce qui les ferait sortir du |
688 |
secret. Peut-être que ce serait une manière beaucoup plus efficace de |
689 |
fournir aux gens de nouveaux logiciels libres, que de les écrire |
690 |
effectivement moi-même ; mais tout le monde serait trop lâche pour ne |
691 |
serait-ce qu'y toucher.)</p> |
692 |
|
693 |
<p>Donc ça m'a obligé à réécrire tout ce qui restait qui n'était pas de moi, ce |
694 |
que j'ai fait. Il m'a fallu environ une semaine et demie. Quelle victoire |
695 |
pour eux ! Il était certain qu'après ça ils n'obtiendraient jamais plus |
696 |
aucune collaboration de ma part.</p> |
697 |
|
698 |
<p>Une fois que GNU Emacs a été raisonnablement stable – ce qui m'a pris |
699 |
environ un an et demi tout compris – j'ai commencé à revenir sur d'autres |
700 |
parties du système. J'ai développé un programme de débogage que j'ai appelé |
701 |
GDB. C'est un débogueur symbolique pour le code C dont la distribution vient |
702 |
de commencer, réalisé en grande partie dans l'esprit de DBX, le débogueur de |
703 |
l'Unix de Berkeley. Les commandes se composent d'un mot indiquant ce que |
704 |
vous voulez faire, suivi des arguments. Dans ce programme, toutes les |
705 |
commandes peuvent être abrégées. Les commandes courantes ont des |
706 |
abréviations d'un seul caractère, mais toute abréviation d'un seul caractère |
707 |
est permise. La fonction « aide » est très fournie : vous pouvez taper |
708 |
<code>help</code> suivi de n'importe quelle commande, y compris des |
709 |
commandes secondaires, et vous obtenez une description complète de la façon |
710 |
de l'utiliser. Naturellement vous pouvez taper n'importe quelle expression |
711 |
en C et sa valeur s'affichera.</p> |
712 |
|
713 |
<p>Vous pouvez également faire des choses inhabituelles pour un débogueur C |
714 |
symbolique. Par exemple, vous pouvez vous référer à n'importe quel type de |
715 |
donnée C à n'importe quelle adresse de mémoire pour en examiner la valeur ou |
716 |
pour lui affecter une valeur. Supposons que vous vouliez stocker un nombre |
717 |
en virgule flottante dans un mot à une certaine adresse. Vous devez juste |
718 |
dire : « Donne-moi l'objet de type <i>float</i> ou <i>double</i> à cette |
719 |
adresse et ensuite affecte-lui cette valeur. » Une autre chose que vous |
720 |
pouvez faire est d'examiner toutes les valeurs qui ont été examinées |
721 |
auparavant. Chaque valeur examinée se place sur la pile de l'« historique |
722 |
des valeurs ». Vous pouvez vous référer à n'importe quel élément par sa |
723 |
position dans l'historique, ou bien vous pouvez facilement vous référer au |
724 |
dernier élément, juste avec le signe dollar. Ça facilite le suivi de la |
725 |
structure des listes. Si une structure C quelconque contient un pointeur |
726 |
vers une autre structure, vous pouvez faire quelque chose comme |
727 |
<code>print*$.next</code> qui veut dire : « Prends le champ suivant dans la |
728 |
dernière chose que tu m'as montrée, puis affiche la structure sur laquelle |
729 |
il pointe ». En répétant cette commande, on voit l'une après l'autre les |
730 |
structures sur lesquelles pointe la liste, alors qu'avec chacun des autres |
731 |
débogueurs C que j'ai vus, la seule manière de faire ça est de taper une |
732 |
commande de plus en plus longue. Et quand c'est combiné à une fonctionnalité |
733 |
qui fait qu'« Entrée » rappelle la dernière commande, ça devient très |
734 |
pratique. Vous avez juste à taper « Entrée » pour chaque élément de la liste |
735 |
que vous voulez voir.</p> |
736 |
|
737 |
<p>Vous pouvez aussi définir des variables de façon explicite dans le |
738 |
débogueur, en nombre illimité. Vous posez le signe dollar suivi d'un nom et |
739 |
c'est une variable. Vous pouvez lui affecter une valeur de n'importe quel |
740 |
type C et vous pourrez l'examiner plus tard. Parmi les choses pour |
741 |
lesquelles c'est utile, s'il y a une valeur particulière que vous voulez |
742 |
examiner, sachant que vous allez vous y référer souvent, plutôt que de vous |
743 |
souvenir de son numéro dans l'historique vous pouvez lui donner un nom. Vous |
744 |
pouvez aussi utiliser ces variables quand vous placez des paliers |
745 |
<i>[breakpoints]</i> conditionnels. Les paliers conditionnels sont une |
746 |
fonctionnalité qui existe dans beaucoup de débogueurs symboliques. Vous |
747 |
dites : « Fais une pause quand tu seras arrivé à cet endroit du programme, |
748 |
mais seulement si une certaine expression est vraie. » Les variables du |
749 |
débogueur vous permettent de comparer une variable du programme à sa |
750 |
précédente valeur sauvegardée dans la variable du débogueur. Une autre chose |
751 |
à laquelle elles peuvent servir, c'est à compter. Parce qu'après tout, les |
752 |
valeurs affectées à ces variables sont des expressions en C, donc on peut |
753 |
faire <code>$foo+=5</code> pour incrémenter la valeur <code>$foo</code> |
754 |
de 5, ou juste <code>$foo++</code>. Vous pouvez également le faire lors d'un |
755 |
palier conditionnel. Une manière économe de faire une pause dans le |
756 |
programme la dixième fois que le palier est atteint, serait de faire |
757 |
<code>$foo--==0</code>. Est-ce que tout le monde suit ? Faire décroître foo |
758 |
et une fois qu'il est à zéro, pause. Vous faites démarrer <code>$foo</code> |
759 |
au nombre de boucles que vous voulez qu'il saute et vous le lâchez. Vous |
760 |
pouvez aussi utiliser ça pour examiner les éléments d'un tableau. Supposez |
761 |
que vous ayez un tableau de pointeurs, vous pouvez faire :</p> |
762 |
|
763 |
<pre><code>PRINT X[$foo++]</code></pre> |
764 |
|
765 |
<p>Mais d'abord vous faites</p> |
766 |
|
767 |
<pre><code>SET $foo=0</code></pre> |
768 |
|
769 |
<p>OK, quand vous faites ça [il montre l'expression PRINT], vous obtenez |
770 |
l'élément zéro de X et quand vous le faites à nouveau, il atteint le premier |
771 |
élément. Supposez que ce soient des pointeurs vers des structures, alors |
772 |
vous mettez probablement un astérisque là [avant le X dans l'expression |
773 |
PRINT] et à chaque fois, il affiche la structure sur laquelle pointe |
774 |
l'élément suivant du tableau. Et bien sûr vous pouvez répéter cette commande |
775 |
en tapant « Entrée ». Si ce n'est pas suffisant de répéter une seule chose, |
776 |
vous pouvez créer une « commande utilisateur ». Vous pouvez dire |
777 |
<code>define mumble</code>, vous mettez quelques lignes de commandes puis |
778 |
<code>end</code>. Vous venez ainsi de définir une commande |
779 |
<code>mumble</code> qui exécutera ces lignes. Et il est très utile de mettre |
780 |
ces définitions dans un fichier de commandes. Vous pouvez avoir un fichier |
781 |
de commandes dans chaque répertoire qui sera chargé automatiquement en tant |
782 |
que répertoire actif lorsque vous lancerez le débogueur. Ainsi pour chaque |
783 |
programme, vous pouvez définir un ensemble de commandes utilisateur pour |
784 |
accéder efficacement aux structures. Vous pouvez même fournir de la |
785 |
documentation pour vos commandes, de façon qu'elles soient traitées par la |
786 |
fonction <code>help</code> comme des commandes intégrées.</p> |
787 |
|
788 |
<p>Une autre chose peu habituelle dans ce débogueur, c'est la capacité |
789 |
d'écarter des cadres <i>[frames]</i> de la pile ; parce que je crois que |
790 |
c'est important, non seulement pour pouvoir examiner ce qui se produit dans |
791 |
le programme que vous déboguez, mais aussi pour le modifier de toutes les |
792 |
façons possibles. De sorte qu'après avoir trouvé un problème et avoir |
793 |
compris ce qui n'allait pas, vous pouvez faire comme si le code était |
794 |
correct et trouver le prochain bogue sans avoir d'abord à recompiler le |
795 |
programme. Cela signifie non seulement pouvoir changer en souplesse les |
796 |
zones de données de votre programme, mais également changer le flux de |
797 |
contrôle. Dans ce débogueur, vous pouvez changer le flux de contrôle très |
798 |
directement en disant :</p> |
799 |
|
800 |
<pre><code>SET $PC=<un certain nombre></code></pre> |
801 |
|
802 |
<p>Ainsi vous pouvez positionner le compteur ordinal <i>[program |
803 |
counter]</i>. Vous pouvez également positionner le pointeur de pile |
804 |
<i>[stack pointer]</i>, ou bien vous pouvez dire</p> |
805 |
|
806 |
<pre><code>SET $SP+=<quelque_chose></code></pre> |
807 |
|
808 |
<p>si vous voulez incrémenter le pointeur de pile d'une certaine quantité. Mais |
809 |
en outre, vous pouvez également lui dire de démarrer sur une ligne |
810 |
particulière du programme ; vous pouvez placer le compteur ordinal à une |
811 |
ligne particulière du code source. Mais que se passe-t-il si vous constatez |
812 |
que vous avez appelé une fonction par erreur et que vous ne vouliez pas |
813 |
appeler cette fonction du tout ? Vous vous dites que cette fonction est trop |
814 |
merdique, que vous voulez vraiment en sortir et faire à la main ce qu'elle |
815 |
devait faire. Pour cela, vous pouvez utiliser la commande |
816 |
<code>RETURN</code>. Vous sélectionnez un cadre de la pile et vous dites |
817 |
<code>RETURN</code>. Et ça va faire que ce cadre, et tous ceux qui sont à |
818 |
l'intérieur, seront abandonnés comme si cette fonction renvoyait |
819 |
instantanément sa valeur. Vous pouvez aussi spécifier la valeur qu'elle doit |
820 |
renvoyer. Ça ne poursuit pas l'exécution ; ça fait comme si la valeur était |
821 |
renvoyée et le programme s'arrête à nouveau ; vous pouvez ainsi continuer de |
822 |
modifier autre chose.</p> |
823 |
|
824 |
<p>Et si vous combinez tout ça, vous avez pas mal de contrôle sur ce qui se |
825 |
passe dans un programme.</p> |
826 |
|
827 |
<p>Une autre chose assez amusante : C a des constantes qui sont des chaînes de |
828 |
caractères <i>[string constants]</i> ; que se passe-t-il si vous utilisez |
829 |
une constante de ce type dans une expression que vous calculez dans le |
830 |
débogueur ? Il faut qu'il crée une chaîne dans le programme que vous |
831 |
déboguez. Eh bien, c'est ce qu'il fait. Il crée un appel à |
832 |
<code>malloc</code> dans le programme débogué, laisse tourner |
833 |
<code>malloc</code>, puis reprend la main. Ainsi il trouve de façon |
834 |
transparente un endroit où placer la chaîne constante.</p> |
835 |
|
836 |
<p>Quand ce débogueur tournera enfin sur le vrai système GNU, j'ai l'intention |
837 |
d'y installer des fonctionnalités pour examiner l'ensemble des états |
838 |
internes du processus tournant en dessous de lui. Par exemple pour examiner |
839 |
l'état de la topographie mémoire, pour savoir quelles pages existent, si |
840 |
elles sont lisibles, si elles sont inscriptibles, et pour examiner l'état du |
841 |
terminal pour le programme inférieur. Il y a déjà l'ébauche d'une commande ; |
842 |
ce débogueur, à la différence des débogueurs sous Unix, garde l'état du |
843 |
terminal du débogueur et celui du programme que vous déboguez complètement |
844 |
séparés. De sorte que ça marche avec les programmes qui tournent en mode |
845 |
brut et avec ceux qui font des interruptions d'entrées dynamiques |
846 |
<i>[interrupt driven input]</i> ; et il y a également une commande qui vous |
847 |
permet d'apprendre quelque chose sur les réglages des terminaux que le |
848 |
programme que vous déboguez utilise réellement. Je crois qu'en général un |
849 |
débogueur doit vous permettre de découvrir tout qui se passe dans le |
850 |
processus inférieur.</p> |
851 |
|
852 |
<p>Deux autres parties centrales du système GNU existent déjà. L'un est le |
853 |
nouveau compilateur C et l'autre le noyau Trix.</p> |
854 |
|
855 |
<p>J'ai commencé à écrire le nouveau compilateur C cette année, au printemps |
856 |
dernier. J'ai finalement décidé que je devais me passer de Pastel. Ce |
857 |
compilateur utilise quelques idées de Pastel et quelques idées de |
858 |
« l'optimiseur portable de l'université d'Arizona » <i>[University of |
859 |
Arizona Portable Optimizer]</i>. Ce que ce dernier a d'intéressant, c'est de |
860 |
gérer plusieurs types différents de machines par des instructions simples et |
861 |
d'ensuite combiner plusieurs instructions simples dans une seule instruction |
862 |
compliquée quand la machine cible le permet. Pour que cela reste uniforme, |
863 |
ils représentent les instructions en notation algébrique. Par exemple, |
864 |
l'instruction <code>add</code> peut être représentée comme ceci :</p> |
865 |
|
866 |
<pre> |
867 |
<code>r[3]=r[2]+4</code> |
868 |
</pre> |
869 |
|
870 |
<p>C'est une représentation interne au compilateur de l'instruction « prendre |
871 |
le contenu du registre n°2, y ajouter 4 et le stocker dans le registre |
872 |
n°3 ». De cette façon vous pouvez représenter n'importe quelle |
873 |
instruction pour n'importe quelle machine. C'est donc comme ça qu'ils |
874 |
représentent toutes les instructions. Quand vient le moment d'essayer de les |
875 |
combiner, ils le font en substituant une expression dans une autre, ce qui |
876 |
donne pour l'instruction combinée une expression algébrique plus compliquée.</p> |
877 |
|
878 |
<p>Quelquefois, suivant que le résultat de la première instruction est utile |
879 |
par la suite, ou pas, il peut être nécessaire de faire une instruction |
880 |
combinée avec deux opérateurs d'affectation <i>[assignment]</i> : un pour |
881 |
cette valeur [il montre un endroit de l'écran] et un autre pour cette valeur |
882 |
[il montre un autre endroit] à l'intérieur de laquelle est substitué ce qui |
883 |
provient de la deuxième instruction. Si cette valeur n'est utilisée qu'une |
884 |
fois, vous pouvez l'éliminer après l'avoir substituée ; elle n'a pas à |
885 |
entrer dans d'autres calculs. Donc c'est vraiment assez compliqué de faire |
886 |
ces substitutions correctement, en vérifiant bien que les instructions |
887 |
intermédiaires ne vont changer aucune de ces valeurs, ni rien d'autre du |
888 |
même genre. Quand vous gérez des choses comme l'adressage auto-incrémenté et |
889 |
auto-décrémenté, ce que je fais maintenant, vous avez aussi diverses |
890 |
vérifications à faire pour détecter les situations où l'objectif n'est pas |
891 |
de conserver la valeur de la variable.</p> |
892 |
|
893 |
<p>Mais après avoir vérifié tout ça, vous prenez l'expression combinée |
894 |
substituée et vous la passez à travers un filtre de motif <i>[pattern |
895 |
matcher]</i>, qui reconnaît toutes les instructions valides de la machine |
896 |
cible que vous avez choisie. Si le motif est reconnu, vous remplacez les |
897 |
deux instructions par leur instruction combinée, sinon vous les laissez |
898 |
tranquilles. Leur technique est de combiner de cette manière deux ou trois |
899 |
instructions reliées par le flux de données.</p> |
900 |
|
901 |
<p>Dans le compilateur d'Arizona, les choses sont en fait représentées par des |
902 |
chaînes de caractères comme ceci, et le compilateur est terriblement |
903 |
lent. Au début j'avais l'idée de l'utiliser et d'y apporter des |
904 |
modifications, mais j'ai compris que je devais le réécrire entièrement pour |
905 |
obtenir la rapidité que je voulais. En le réécrivant, j'ai fait en sorte de |
906 |
pouvoir utiliser des représentations de structure de liste pour toutes ces |
907 |
expressions ; des choses comme ceci :</p> |
908 |
|
909 |
<pre> |
910 |
<code>(set (reg 2)</code> |
911 |
<code>(+ (reg 2)</code> |
912 |
<code>(int 4)))</code> |
913 |
</pre> |
914 |
|
915 |
<p>Ça ressemble un peu à du Lisp mais la sémantique n'est pas tout à fait la |
916 |
même, parce que chaque symbole est ici identifié individuellement. Un |
917 |
ensemble fixe, particulier de ces symboles est défini, tous ceux dont vous |
918 |
avez besoin, chacun ayant une combinaison particulière de types |
919 |
d'arguments. Pour <code>reg</code> par exemple, c'est toujours un nombre |
920 |
entier, parce que les registres sont numérotés, mais <code>+</code> prend |
921 |
deux sous-expressions, et ainsi de suite. Et chacune de ces expressions a |
922 |
aussi un type de données qui, en gros, indique s'il est fixe ou flottant et |
923 |
combien d'octets il occupe. Ça peut être étendu pour manipuler d'autres |
924 |
choses si vous en avez besoin.</p> |
925 |
|
926 |
<p>Voilà comment je fais l'allocation automatique de registre : au moment où je |
927 |
génère initialement le code, et quand je fais la combinaison et le reste, |
928 |
pour toute variable qui entre théoriquement dans un registre j'alloue ce que |
929 |
j'appelle un pseudo-numéro de registre. C'est un nombre qui commence à |
930 |
seize, ou autre nombre trop élevé pour désigner un vrai registre de la |
931 |
machine cible. Les vrais registres sont numérotés de zéro à quinze (ou |
932 |
autre), et après viennent les pseudo-registres. Et là, une des dernières |
933 |
opérations consiste à examiner tous les pseudo-registres et à les changer en |
934 |
vrais registres. À nouveau, le compilateur fait un schéma des conflits, il |
935 |
voit quels pseudo-registres sont actifs en même temps – ils ne peuvent |
936 |
naturellement pas entrer dans le même vrai registre – et essaie de regrouper |
937 |
les pseudo-registres dans de vrais registres autant que possible, en les |
938 |
rangeant par ordre d'importance.</p> |
939 |
|
940 |
<p>Et à la fin, il doit corriger le code pour différents problèmes, tels qu'il |
941 |
peut s'en produire si des pseudo-registres ne trouvent pas place dans les |
942 |
vrais registres et doivent être mis à la place dans des <i>slots</i> de la |
943 |
pile. Sur certaines machines, des instructions peuvent devenir invalides |
944 |
quand ça arrive. Par exemple sur le 68000, on peut ajouter depuis un |
945 |
registre dans la mémoire et ajouter depuis la mémoire dans un registre mais |
946 |
pas ajouter depuis une adresse mémoire vers une autre. Par exemple, si lors |
947 |
d'une instruction ADD vous sortez vers un 68000 et que les deux éléments se |
948 |
retrouvent dans la mémoire, ce n'est pas valide. Donc ce dernier passage |
949 |
examine le tout et copie au besoin des éléments dans les registres ou en |
950 |
dehors des registres, pour corriger ce genre de problème.</p> |
951 |
|
952 |
<p>Des problèmes peuvent également survenir avec les registres d'index. Si vous |
953 |
essayez d'indexer par quelque chose, la plupart du temps le code deviendra |
954 |
invalide si cette quantité est en mémoire, sauf dans quelques cas, sur |
955 |
certaines machines où vous pouvez le faire avec un adressage |
956 |
indirect. Lorsque vous procédez à une autoincrémentation sur un registre |
957 |
d'index, vous pouvez avoir à copier la valeur dans un registre, effectuer |
958 |
l'instruction et ensuite recopier la valeur incrémentée dans le <i>slot</i> |
959 |
de mémoire où elle vit vraiment.</p> |
960 |
|
961 |
<p>Il y a encore de la marge pour pas mal de prises de tête, et je n'ai pas |
962 |
fini d'implémenter tout ce qui est nécessaire pour le rendre vraiment |
963 |
pleinement efficace.</p> |
964 |
|
965 |
<p>Ce compilateur fonctionne actuellement avec un analyseur syntaxique qui |
966 |
transforme efficacement le code C en arbre syntaxique, annoté d'informations |
967 |
sur le type de données C. Après ça, un autre passage examine cet arbre et |
968 |
produit du code comme celui-là [comme du Lisp]. Ensuite viennent plusieurs |
969 |
passages d'optimisation : un pour traiter par exemple les sauts à travers |
970 |
des sauts, les sauts aboutissant à des sauts, les sauts à <code>.+1</code> |
971 |
et tout ce qui peut être immédiatement simplifié ; puis la reconnaissance |
972 |
des sous-expressions communes ; puis la recherche des blocs de base et |
973 |
l'analyse du flux de données, afin de pouvoir indiquer pour chaque |
974 |
instruction quelles valeurs sont utilisées dans l'instruction et nulle part |
975 |
ailleurs ; et aussi la liaison entre chaque instruction et les endroits où |
976 |
les valeurs utilisées ont été créées. Ainsi, quand j'ai une instruction qui |
977 |
crée un pseudo-registre R[28] et une autre instruction plus tard qui utilise |
978 |
R[28], sachant que c'est le premier endroit qui utilise R[28], je fais |
979 |
pointer la seconde en arrière sur la première et ce pointeur est celui qui |
980 |
servira pour contrôler les essais de combinaison des instructions. Vous ne |
981 |
combinez pas des instructions adjacentes, vous combinez une instruction qui |
982 |
utilise une valeur avec l'instruction qui a produit cette valeur. Même s'il |
983 |
y a d'autres instructions au milieu, elles ne sont pas concernées ; vous |
984 |
avez juste à vous assurer qu'elles n'interviennent pas. Et après le |
985 |
combinateur vient l'allocateur dynamique de registres, et enfin quelque |
986 |
chose pour faire la conversion en code assembleur.</p> |
987 |
|
988 |
<p>Dans le compilateur d'Arizona, le système de reconnaissance d'instructions a |
989 |
été créé avec Lex. La description de votre machine est simplement un |
990 |
programme Lex, que Lex transforme en une fonction C pour identifier les |
991 |
instructions valides sous forme de chaînes. À la place, j'ai un arbre de |
992 |
décision particulier, créé à partir d'une description de la machine écrite |
993 |
dans cette syntaxe qui ressemble au Lisp. Et ce système de reconnaissance |
994 |
est utilisé comme sous-programme dans plusieurs parties différentes du |
995 |
compilateur.</p> |
996 |
|
997 |
<p>Actuellement ce compilateur fonctionne à peu près aussi rapidement que le |
998 |
<abbr title="Portable C Compiler">PCC</abbr>. Il fonctionne sensiblement |
999 |
plus rapidement si vous lui dites de ne pas faire d'allocation de registre |
1000 |
limite. Dans ce cas il alloue les registres de la même manière que le |
1001 |
PCC. Dans son mode super-limite, il fait un travail d'allocation de |
1002 |
registres bien meilleur que le PCC et je constate que pour le VAX, il |
1003 |
produit le meilleur code que j'aie vu de tous les compilateurs C sur VAX.</p> |
1004 |
|
1005 |
<p>Pour le 68000, le code n'est pas encore idéal. Je peux voir par endroits, |
1006 |
aux étapes précoces, se passer des choses qui ne sont pas forcément |
1007 |
optimales parce qu'il ne peut pas vraiment anticiper. Il a un choix à faire |
1008 |
à une étape précoce et il fait ce qu'il pense être le mieux. Or s'il avait |
1009 |
fait un autre choix, une étape ultérieure aurait été assez intelligente pour |
1010 |
faire encore mieux. Mais l'étape précoce ne sait pas ce que l'étape |
1011 |
ultérieure va faire, donc je dois retravailler certaines choses.</p> |
1012 |
|
1013 |
<p>Parfois ça lui fait libérer des registres inutilement : quand des choses |
1014 |
atterrissent dans la mémoire et qu'il a besoin de les copier dans des |
1015 |
registres, il faut qu'il trouve des registres. Cela veut dire prendre des |
1016 |
registres déjà alloués et virer les données temporaires des <i>slots</i> de |
1017 |
la pile. Évidemment, maintenant que ces choses sont dans la mémoire plutôt |
1018 |
que dans les registres, ça peut invalider certaines instructions, donc il |
1019 |
lui faut tout le temps vérifier. Parfois il pense à tort qu'il devrait |
1020 |
copier des choses dans les registres, alors il arrive qu'il en libère trop |
1021 |
et n'utilise pas tous les registres qu'il pourrait.</p> |
1022 |
|
1023 |
<p><span>[Question : Avez-vous un générateur de code pour le 32000 ?]</span>Pas |
1024 |
encore, mais je le répète, ce n'est pas un générateur de code dont vous avez |
1025 |
besoin, juste une description de machine, une liste de toutes les |
1026 |
instructions de la machine décrites sous cette forme [comme du Lisp]. En |
1027 |
fait, hormis le travail d'implémenter l'idée des contraintes qui déterminent |
1028 |
quels arguments peuvent aller dans les registres et dans quelles sortes de |
1029 |
registres ils iront – travail nécessaire pour le 68000, mais pas pour le |
1030 |
VAX – le portage de ce compilateur du VAX au 68000 a juste pris quelques |
1031 |
jours. Donc il est très facile à porter.</p> |
1032 |
|
1033 |
<p>Le compilateur produit actuellement du code assembleur et il peut produire |
1034 |
de l'information de débogage, soit dans le format voulu par DBX, soit dans |
1035 |
le format interne spécial à GDB. Je dirais que le seul travail qui reste à |
1036 |
faire sur ce compilateur se situe à trois niveaux. Un : Je dois ajouter un |
1037 |
dispositif de « profilage » comme celui des compilateurs d'Unix. Deux : Je |
1038 |
dois rendre les allocations de registre plus intelligentes pour ne plus voir |
1039 |
de choses stupides apparaître en sortie. Trois : Il y a divers bogues, des |
1040 |
choses qu'il ne traite pas encore correctement bien qu'il se soit compilé |
1041 |
correctement. Je pense que ça ne prendra que quelques mois, ensuite je le |
1042 |
publierai.</p> |
1043 |
|
1044 |
<p>L'autre partie importante du système existant, c'est le |
1045 |
noyau. <span>[Question : Une pause ?]</span> Ah, ouais, je suppose que nous |
1046 |
avons oublié les coupures. Pourquoi est-ce que je ne finirais pas de parler |
1047 |
du noyau, ce qui ne devrait pas prendre plus de cinq minutes ? Ensuite nous |
1048 |
pourrons faire une coupure.</p> |
1049 |
|
1050 |
<p>Donc, pour le noyau je projette d'utiliser un système appelé TRIX (cela ne |
1051 |
signifie rien de spécial, que je sache) qui a été développé comme projet de |
1052 |
recherche au MIT. Ce système est basé sur l'appel de procédure à distance |
1053 |
<i>[Remote Procedure Call]</i>. Les programmes sont appelés domaines. Chaque |
1054 |
domaine est un espace d'adressage et a diverses capacités, une capacité |
1055 |
n'étant rien d'autre que l'aptitude à appeler un domaine. Tout domaine peut |
1056 |
créer des « ports de capacité » <i>[capability ports]</i> pour l'appeler et |
1057 |
peut passer ces ports aux autres domaines. Et il n'y a aucune différence |
1058 |
entre appeler le système et appeler un autre domaine utilisateur. En fait |
1059 |
vous ne pouvez pas dire lequel vous avez. Ainsi il est très facile de faire |
1060 |
implémenter des dispositifs par d'autres programmes utilisateur. Un système |
1061 |
de fichiers pourrait être implémenté de façon transparente par ce moyen. Il |
1062 |
est également transparent de communiquer à travers des réseaux. Vous pensez |
1063 |
que vous appelez directement un autre domaine, mais en réalité vous appelez |
1064 |
le domaine du serveur réseau. Il prend l'information que vous avez donnée |
1065 |
dans l'appel et la passe par le réseau à un autre programme serveur qui |
1066 |
appelle alors le domaine auquel vous essayez de parler. Mais pour vous et |
1067 |
cet autre domaine, cela se passe de manière transparente.</p> |
1068 |
|
1069 |
<p>Le noyau TRIX fonctionne et il a une compatibilité limitée avec Unix, mais |
1070 |
il lui en faut beaucoup plus. Actuellement son système de fichiers utilise |
1071 |
la même structure sur disque que l'ancien système de fichiers d'Unix. Ça |
1072 |
rendait plus facile le débogage parce qu'ils pouvaient installer les |
1073 |
fichiers avec Unix et donc faire fonctionner TRIX, mais ce système de |
1074 |
fichiers n'a aucune des fonctionnalités que je trouve nécessaires.</p> |
1075 |
|
1076 |
<p>Voilà les fonctionnalités qui, je pense, devraient être rajoutées : des |
1077 |
numéros de version, la restauration des fichiers effacés, les informations |
1078 |
sur quand, comment et où le dossier a été sauvegardé sur bande, le |
1079 |
remplacement nucléaire des fichiers. Ce qui est bien dans Unix, d'après moi, |
1080 |
c'est que lorsqu'un fichier est en cours d'écriture, on peut déjà regarder |
1081 |
ce qui se passe. Ainsi par exemple, vous pouvez utiliser <code>tail</code> |
1082 |
pour voir où ça en est ; c'est vraiment sympa. Et si le programme se plante |
1083 |
après avoir écrit le fichier partiellement, vous pouvez voir ce qu'il a |
1084 |
fait. Tout ça c'est très bien, mais le résultat partiellement écrit ne doit |
1085 |
jamais être considéré comme le résultat final escompté. La version |
1086 |
précédente doit continuer d'être visible et utilisée par tous ceux qui |
1087 |
tentent de l'utiliser jusqu'à ce qu'une nouvelle version soit entièrement et |
1088 |
correctement réalisée. Cela signifie que la nouvelle version devra être |
1089 |
visible dans le système de fichiers, mais pas sous le nom qu'elle est censée |
1090 |
avoir. Elle devra être renommée quand c'est fini. C'est d'ailleurs ce qui se |
1091 |
passe avec ITS, bien que chaque programme utilisateur doive le faire de |
1092 |
façon explicite. Pour la compatibilité d'Unix avec les programmes |
1093 |
utilisateur, ça doit se passer de façon transparente.</p> |
1094 |
|
1095 |
<p>J'ai un plan bizarre et plutôt coton pour essayer de faire coller les |
1096 |
numéros de version avec les programmes utilisateur existant sous Unix. Il |
1097 |
s'agit de spécifier le nom de fichier, en laissant implicite le numéro de |
1098 |
version si vous le spécifiez normalement. Et si vous souhaitez le faire de |
1099 |
façon explicite – soit parce que vous voulez déclarer explicitement quelle |
1100 |
version utiliser, soit parce que vous ne voulez pas de version du tout – |
1101 |
vous mettez un point à son extrémité. Ainsi, si vous donnez le nom de |
1102 |
fichier <code>FOO</code> cela signifie « cherche les versions qui existent |
1103 |
pour FOO et prends la dernière ». Mais si vous dites <code>FOO.</code> cela |
1104 |
signifie « utilise exactement le nom FOO et aucun autre ». Si vous dites |
1105 |
<code>FOO.3. » cela veut dire « utilise exactement le nom FOO.3</code>, qui |
1106 |
naturellement est la version trois de FOO et aucune autre. En sortie, si |
1107 |
vous dites juste <code>FOO</code>, ça va créer une nouvelle version de FOO, |
1108 |
mais si vous dites <code>FOO.</code>, ça va écrire un fichier nommé |
1109 |
exactement « FOO ».</p> |
1110 |
|
1111 |
<p>Maintenant c'est un défi de mettre au point tous ces détails et de voir s'il |
1112 |
persiste des problèmes, si vraiment certains logiciels Unix se plantent bien |
1113 |
qu'on leur ait fourni des noms avec des points et ainsi de suite, pour |
1114 |
tenter de leur faire garder le même comportement.</p> |
1115 |
|
1116 |
<p>Je m'attends à ce que, si on ouvre un fichier dont le nom finit par un |
1117 |
point, on ouvre en fait immédiatement un fichier avec ce nom-là ; on obtient |
1118 |
ainsi le même comportement qu'Unix : le résultat partiellement écrit est |
1119 |
immédiatement visible. Tandis que, si on l'ouvre avec un nom qui ne finit |
1120 |
pas par un point, la nouvelle version ne doit apparaître qu'à la fermeture |
1121 |
du fichier, et seulement si on le ferme explicitement. S'il a été fermé |
1122 |
parce que la tâche a échoué ou à cause du plantage du système ou de |
1123 |
n'importe quoi du genre, il doit être sous un nom différent.</p> |
1124 |
|
1125 |
<p>Et cette idée peut être rapprochée de l'utilisation de l'astérisque comme |
1126 |
joker <i>[star matching]</i> : un nom qui ne finit pas par un point équivaut |
1127 |
à tous les noms sans leur numéro de version. Supposons qu'un certain |
1128 |
répertoire ait des fichiers comme ceci :</p> |
1129 |
|
1130 |
<pre> |
1131 |
<code>foo.1 foo.2 bar.8</code> |
1132 |
</pre> |
1133 |
|
1134 |
<p>Si je dis <code>*</code>, ça équivaut à</p> |
1135 |
<pre> |
1136 |
<code>foo bar</code> |
1137 |
</pre> |
1138 |
|
1139 |
<p>parce que ça prend tous les noms, les débarrasse de leurs versions et |
1140 |
conserve tous ceux qui sont distincts. Mais si je dis <code>*.</code>, alors |
1141 |
ça prend tous les noms exacts, met un point après chaque nom et cherche les |
1142 |
équivalences. Ça me donne tous les noms avec toutes les différentes versions |
1143 |
qui existent. Et de la même façon, vous pouvez voir la différence entre |
1144 |
<code>*.c</code> et <code>*.c.</code>. Ceci [le premier] vous donnera |
1145 |
essentiellement les références sans version de tous les fichiers |
1146 |
<code>.c</code>, tandis que cela [le second] vous donnera toutes les |
1147 |
versions… Bon, pas vraiment, vous devriez dire <code>*.c.*.</code>, |
1148 |
mais ici je ne tiens pas compte des détails.</p> |
1149 |
|
1150 |
<p>Une autre chose qu'on pourrait ajouter, qui est transparente pour |
1151 |
l'utilisateur et est certainement compatible, c'est la tolérance du système |
1152 |
de fichiers aux défaillances de la machine. À savoir, écrire toutes les |
1153 |
informations sur le disque dans l'ordre approprié, en s'arrangeant pour |
1154 |
qu'on puisse presser le bouton <kbd>Arrêt</kbd> à tout moment sans |
1155 |
endommager le système de fichiers du disque. C'est tellement connu que je ne |
1156 |
peux pas imaginer qu'on puisse le négliger. Une autre idée, c'est |
1157 |
d'augmenter la redondance de l'information. Je ne sais pas si je le ferai, |
1158 |
mais j'ai des idées sur la façon de stocker dans chaque fichier tous ses |
1159 |
noms, ce qui permettrait, si l'un des répertoires du disque est perdu, de le |
1160 |
reconstruire à partir du reste du contenu du disque.</p> |
1161 |
|
1162 |
<p>En outre, je pense savoir comment rendre possible la mise à jour nucléaire |
1163 |
de n'importe quelle partie d'un fichier – c'est-à-dire pouvoir remplacer un |
1164 |
sous-bloc particulier d'un fichier par de nouvelles données de manière que |
1165 |
si on essaie de le lire, on voie, ou bien les nouvelles données, ou bien les |
1166 |
anciennes. Je crois que je peux faire ça, sans même de verrouillage.</p> |
1167 |
|
1168 |
<p>Pour la gestion du réseau, j'ai l'intention par la suite d'implémenter |
1169 |
TCP/IP pour ce système. Je pense également qu'il est possible d'utiliser |
1170 |
KERMIT pour obtenir quelque chose de pratiquement équivalent à UUCP.</p> |
1171 |
|
1172 |
<p>Un <i>shell</i> a déjà été écrit, je crois. Il a deux modes, l'un imitant le |
1173 |
<i>Bourne shell</i> et l'autre imitant le <i>C-shell</i>,<a |
1174 |
id="TransNote6-rev" href="#TransNote6"><sup>6</sup></a> dans le même |
1175 |
programme. Je n'en ai pas reçu de copie et je ne sais pas combien de travail |
1176 |
j'aurai à faire dessus. Il y a encore beaucoup d'autres utilitaires. Un MAKE |
1177 |
existe, LS également ; il y a BISON qui remplace YACC et qui est déjà |
1178 |
distribué. Il existe quelque chose d'assez proche de LEX, mais qui n'est pas |
1179 |
totalement compatible et a besoin d'être retravaillé. Et en général, ce qui |
1180 |
reste à faire est beaucoup moins important que ce qui a été fait mais on a |
1181 |
toujours besoin de beaucoup de gens pour aider.</p> |
1182 |
|
1183 |
<p>Les gens me demandent toujours « Quand est-ce que ça sera fini ? » |
1184 |
Naturellement je ne peux pas le savoir, mais c'est une mauvaise question. Si |
1185 |
vous comptiez payer pour ça, je comprendrais que vous vouliez savoir |
1186 |
exactement ce que vous allez obtenir, et quand. Mais puisque vous n'allez |
1187 |
pas payer, la bonne question à vous poser est : « Comment peut-on aider pour |
1188 |
que ça soit fini plus tôt ? » J'ai une liste de projets dans un dossier au |
1189 |
MIT. Les gens qui souhaitent apporter leur aide peuvent m'envoyer un |
1190 |
courrier à cette adresse internet et je leur enverrai en retour une liste de |
1191 |
projets (je me demande si ça va marcher [en regardant la craie]). Est-ce que |
1192 |
c'est lisible ? C'est « RMS@GNU.ORG » (suivez juste la balle magique<a |
1193 |
id="TransNote7-rev" href="#TransNote7"><sup>7</sup></a>). Et maintenant |
1194 |
faisons une pause, et après la pause, je vais dire des choses vraiment |
1195 |
controversées, alors ne partez pas maintenant. Si vous partez maintenant, |
1196 |
vous allez rater le clou de la conférence.</p> |
1197 |
|
1198 |
<p><strong>[Ici, nous avons eu 15 minutes de pause]</strong></p> |
1199 |
|
1200 |
<p>On m'a demandé de faire connaître le moyen d'obtenir des copies des |
1201 |
logiciels GNU. Eh bien, un des moyens est évidemment de connaître un ami qui |
1202 |
en a un exemplaire. Mais si ce n'est pas le cas et que vous n'êtes pas sur |
1203 |
Internet pour le télécharger, alors vous pouvez toujours commander une |
1204 |
distribution sur bande et envoyer une certaine somme à la <i>Free Software |
1205 |
Foundation</i> (Fondation pour le logiciel libre). Naturellement les |
1206 |
programmes libres <i>[free programs]</i>, ce n'est pas la même chose que la |
1207 |
distribution gratuite <i>[free distribution]</i>. Je l'expliquerai en détail |
1208 |
plus tard.</p> |
1209 |
|
1210 |
<p>J'ai ici un manuel d'Emacs, du genre bien imprimé. Il a été phototypé puis |
1211 |
imprimé en offset. Bien que vous puissiez également l'imprimer vous-même à |
1212 |
partir des sources de la distribution d'Emacs, vous pouvez en obtenir des |
1213 |
copies de la <i>Free Software Foundation</i>. Vous pouvez venir après pour |
1214 |
le regarder. Il contient également un bulletin de commande dont vous pouvez |
1215 |
copier les renseignements, de même que ce dessin [de la page de garde] qui a |
1216 |
quelquefois du succès : [montrant du doigt un personnage chassé par RMS à |
1217 |
cheval sur un gnou] c'est un accapareur de logiciel effrayé, je parlerai de |
1218 |
lui dans un moment.</p> |
1219 |
|
1220 |
<p>Le logiciel est un phénomène relativement nouveau. Les gens ont commencé à |
1221 |
distribuer du logiciel il y a peut-être trente ans. Il y a seulement vingt |
1222 |
ans à peu près que quelqu'un a eu l'idée de faire du commerce avec |
1223 |
ça. C'était un secteur sans a-priori sur la façon de faire ou sur les droits |
1224 |
que l'on pouvait avoir, mais on avait quelques idées sur les autres domaines |
1225 |
de la vie auxquels on pouvait emprunter leurs traditions, par analogie.</p> |
1226 |
|
1227 |
<p>Une analogie appréciée par un bon nombre de professeurs en Europe est celle |
1228 |
des mathématiques. Un programme est une sorte de grande formule. Par |
1229 |
tradition, personne ne peut posséder une formule mathématique. N'importe qui |
1230 |
peut la copier et s'en servir.</p> |
1231 |
|
1232 |
<p>L'analogie qui a le plus de sens pour les gens ordinaires, c'est celle des |
1233 |
recettes. Si vous y réfléchissez, ce qui ressemble le plus à un programme |
1234 |
dans la vie ordinaire, c'est une recette – des instructions pour faire |
1235 |
quelque chose. La différence, c'est qu'une recette est suivie par une |
1236 |
personne, pas par une machine de façon automatisée. Il est vrai que pour la |
1237 |
recette il n'y a pas de différence entre le code source et le code objet, |
1238 |
mais cela reste ce qu'il y a de plus proche. Et personne n'est autorisé à |
1239 |
posséder une recette.</p> |
1240 |
|
1241 |
<p>Mais l'analogie qui a été choisie fut celle des livres, sur lesquels |
1242 |
s'applique le copyright. Pourquoi ce choix a-t-il été fait ? Parce que les |
1243 |
gens qui avaient le plus à gagner à faire ce choix particulier ont été |
1244 |
autorisés à prendre la décision. Les gens qui écrivaient les programmes ont |
1245 |
eu le droit de décider, pas ceux qui les utilisaient. Cela a été fait d'une |
1246 |
façon totalement égoïste, en transformant le domaine de la programmation en |
1247 |
quelque chose de sinistre.</p> |
1248 |
|
1249 |
<p>Quand je suis entré dans ce secteur d'activité, quand j'ai commencé à |
1250 |
travailler au MIT en 1971, l'idée que les programmes que nous développions |
1251 |
pourraient ne pas être partagés n'était même pas discutée. Même chose à |
1252 |
Stanford et à <abbr title="Carnegie Mellon University">CMU</abbr>, et |
1253 |
partout ailleurs y compris chez Digital. À cette époque-là, le système |
1254 |
d'exploitation de Digital était libre. J'en ai de temps en temps récupéré |
1255 |
des morceaux, comme un assembleur multi-compatible pour PDP-11 que j'ai |
1256 |
porté sur ITS et auquel j'ai ajouté de nombreuses fonctionnalités. Il n'y |
1257 |
avait aucun copyright sur ce programme.</p> |
1258 |
|
1259 |
<p>C'est seulement vers la fin des années 70 que ça a commencé à |
1260 |
changer. J'étais extrêmement marqué par l'esprit de partage que nous avions |
1261 |
jusque-là. Nous espérions faire quelque chose d'utile et nous étions heureux |
1262 |
si les gens pouvaient s'en servir. Ainsi, quand j'ai développé le premier |
1263 |
Emacs et que les gens ont commencé à vouloir l'utiliser en dehors du MIT, |
1264 |
j'ai dit qu'il appartenait à la « communauté » Emacs. Pour utiliser Emacs |
1265 |
vous deviez être membre de la communauté et ça voulait dire que vous deviez |
1266 |
lui apporter en contribution toutes les améliorations que vous aviez |
1267 |
faites. Toutes les améliorations de l'Emacs original devaient m'être |
1268 |
renvoyées pour que je puisse les incorporer à de nouvelles versions d'Emacs, |
1269 |
de manière que chacun dans la communauté puisse en bénéficier.</p> |
1270 |
|
1271 |
<p>Mais ça a commencé à se dégrader quand Scribe a été développé à CMU, puis |
1272 |
vendu à une entreprise. Cela a dérouté beaucoup d'entre nous, dans de |
1273 |
nombreuses universités, parce que nous avons vu quelle tentation c'était |
1274 |
pour chacun et à quel point il était profitable d'être peu coopératif. Et |
1275 |
ceux d'entre nous qui y croyaient toujours n'avaient aucune arme pour tenter |
1276 |
de convaincre les autres de coopérer avec nous. Sans aucun doute, les uns |
1277 |
après les autres, ils allaient déserter et cesser de coopérer avec le reste |
1278 |
de la société, jusqu'à ce qu'il ne reste plus que ceux d'entre nous qui |
1279 |
avaient des consciences très fortes. Et c'est ce qui s'est passé.</p> |
1280 |
|
1281 |
<p>La programmation est maintenant devenue un domaine sinistre, où chacun pense |
1282 |
de façon cynique à combien il va gagner à ne pas être sympa avec les autres |
1283 |
programmeurs, ni avec les utilisateurs.</p> |
1284 |
|
1285 |
<p>Je veux montrer que la pratique de posséder le logiciel est à la fois |
1286 |
matériellement inutile, moralement nuisible à la société, et malfaisante, |
1287 |
ces trois choses étant interdépendantes. C'est moralement nocif parce que ça |
1288 |
engage chaque membre de la société qui entre en contact avec l'informatique |
1289 |
dans une pratique qui est manifestement du gaspillage pour les autres. Et |
1290 |
chaque fois que vous faites pour votre bien personnel une chose dont savez |
1291 |
qu'elle fait plus de mal aux autres qu'elle ne vous aide, vous êtes obligé |
1292 |
de devenir cynique pour pouvoir en supporter la pensée. Et c'est malfaisant |
1293 |
parce que ça gaspille délibérément le travail effectué sur la société, en |
1294 |
affaiblissant le lien social.</p> |
1295 |
|
1296 |
<p>D'abord je veux expliquer les différentes nuisances causées par les |
1297 |
tentatives de posséder le logiciel ou, plus généralement, toute autre |
1298 |
information utile, puis je m'appliquerai à réfuter les arguments des |
1299 |
défenseurs de cette pratique, ensuite je voudrais parler de la façon de |
1300 |
combattre ce phénomène et dire comment je m'y prends moi-même.</p> |
1301 |
|
1302 |
<p>L'idée de posséder l'information est nocive à trois niveaux |
1303 |
différents. Matériellement nocive à trois niveaux différents. Et à chaque |
1304 |
type de nocivité matérielle correspond une nocivité morale.</p> |
1305 |
|
1306 |
<p>Au premier niveau, c'est juste que ça décourage l'utilisation du |
1307 |
programme. Il y a moins de gens qui utilisent le programme, mais ça ne |
1308 |
demande pas moins de travail pour l'élaborer. Quand on met un prix sur |
1309 |
l'utilisation d'un programme en tant qu'« incitation », c'est le mot que ces |
1310 |
accapareurs de logiciel aiment à employer, c'est une incitation pour les |
1311 |
gens à ne pas l'utiliser et c'est du gâchis. Si par exemple il y a deux fois |
1312 |
moins de gens qui utilisent le programme à cause de son prix, le programme a |
1313 |
été à moitié gaspillé. La même quantité de travail a produit moitié moins de |
1314 |
richesse.</p> |
1315 |
|
1316 |
<p>En fait, vous n'avez rien de spécial à faire pour qu'un programme soit |
1317 |
diffusé vers tous ceux qui veulent l'utiliser, parce qu'ils peuvent |
1318 |
parfaitement le copier eux-mêmes et qu'il finit par atteindre tout le |
1319 |
monde. Tout ce que vous avez à faire, après avoir écrit le programme, c'est |
1320 |
de vous asseoir tranquillement et de laisser les gens faire ce qu'ils |
1321 |
veulent. Mais ce n'est pas ce qu'il se passe. Au lieu de ça, quelqu'un |
1322 |
essaye délibérément d'entraver le partage du programme. Mais il ne tente pas |
1323 |
simplement de l'entraver, il essaie de pousser les autres à l'aider. Toutes |
1324 |
les fois qu'un utilisateur signe un accord de confidentialité, c'est comme |
1325 |
s'il trahissait ses camarades utilisateurs. Au lieu de suivre la règle d'or |
1326 |
et de dire « J'apprécie ce programme, mon voisin le voudrait aussi, je veux |
1327 |
que nous l'ayons tous les deux », il dit « Ouais, donnez-le-moi. Au diable |
1328 |
mon voisin ! Je vous aiderai à le maintenir hors de sa portée. Ne le donnez |
1329 |
qu'à moi ! » C'est cet état d'esprit qui est source de nuisance morale, |
1330 |
cette attitude qui consiste à dire : « Au diable mes voisins, donnez-m'en, à |
1331 |
MOI, une copie. »</p> |
1332 |
|
1333 |
<p>Après être tombé sur des gens qui disaient qu'ils ne me laisseraient pas |
1334 |
avoir de copies parce qu'ils avaient signé un accord de confidentialité, |
1335 |
quand quelqu'un me demandait de signer un truc comme ça je savais que |
1336 |
c'était mal. Je ne pouvais pas faire à quelqu'un d'autre ce qui m'avait tant |
1337 |
exaspéré quand on me l'avait fait à moi.</p> |
1338 |
|
1339 |
<p>Mais ce n'est que le premier niveau de nocivité. Le deuxième niveau se |
1340 |
manifeste quand les gens veulent modifier le programme, parce qu'un |
1341 |
programme ne satisfait jamais vraiment tous ceux qui voudraient |
1342 |
l'utiliser. Tout comme ils aiment varier les recettes, disons, en mettant |
1343 |
moins de sel – ou peut-être aiment-ils rajouter des poivrons verts – les |
1344 |
gens doivent également pouvoir modifier les programmes pour obtenir les |
1345 |
résultats dont ils ont besoin.</p> |
1346 |
|
1347 |
<p>Les propriétaires de logiciel ne s'inquiètent pas vraiment de savoir si les |
1348 |
gens peuvent modifier le programme ou non, mais les en empêcher leur est |
1349 |
utile pour parvenir à leurs fins. Généralement, quand un logiciel est |
1350 |
propriétaire, vous ne pouvez pas obtenir les sources ; vous ne pouvez pas le |
1351 |
modifier et c'est un grand gaspillage de travail pour les programmeurs, |
1352 |
aussi bien qu'une grande frustration pour les utilisateurs. Par exemple, une |
1353 |
amie m'a dit qu'elle avait travaillé pendant de nombreux mois dans une |
1354 |
banque où elle était programmeuse pour écrire un nouveau programme. Or il y |
1355 |
avait un programme disponible dans le commerce qui était presque bon, mais |
1356 |
qui n'était pas tout à fait ce dont ils avaient besoin. Et tel quel, il leur |
1357 |
était inutile. Cela ne demandait probablement qu'un changement minime, mais |
1358 |
comme les sources de ce programme n'étaient pas disponibles c'était |
1359 |
impossible. Elle a dû repartir de zéro et perdre beaucoup de temps. Et nous |
1360 |
ne pouvons que spéculer sur la fraction de l'ensemble des programmeurs, |
1361 |
partout dans le monde, qui perdent leur temps de cette façon.</p> |
1362 |
|
1363 |
<p>Il y a aussi le cas où un programme est adéquat, mais peu pratique. Par |
1364 |
exemple, la première fois que nous avons eu une imprimante graphique au MIT, |
1365 |
nous avons écrit le logiciel nous-mêmes et nous avons installé un bon nombre |
1366 |
d'utilitaires sympathiques. Par exemple, il vous envoyait un message quand |
1367 |
votre tâche d'impression était finie, ou quand l'imprimante manquait de |
1368 |
papier et que vous aviez une tâche en file d'attente, et pas mal d'autres |
1369 |
choses qui correspondaient à ce que nous voulions. Puis on nous a donné une |
1370 |
imprimante graphique beaucoup plus intéressante, une des premières |
1371 |
imprimantes laser, mais le logiciel était fourni par Xerox et nous ne |
1372 |
pouvions pas le modifier. Ils n'acceptaient pas d'intégrer ces |
1373 |
fonctionnalités et nous ne pouvions pas le faire nous-même. Aussi avons-nous |
1374 |
dû nous contenter de choses qui ne « fonctionnaient qu'à moitié ». Et |
1375 |
c'était très frustrant de savoir que nous étions prêts à arranger ça, |
1376 |
désireux et capables de le faire, mais que nous n'en avions pas le droit. On |
1377 |
sabotait notre travail.</p> |
1378 |
|
1379 |
<p>Et il y a tous les gens qui utilisent des ordinateurs et qui disent que les |
1380 |
ordinateurs sont un mystère pour eux. Ils ne savent pas comment ça |
1381 |
fonctionne. Mais comment pourraient-ils le savoir ? Ils ne peuvent pas lire |
1382 |
les programmes qu'ils utilisent. La seule manière pour les gens d'apprendre |
1383 |
comment les programmes doivent être écrits ou comment ils font ce qu'ils |
1384 |
font, c'est de lire le code source.</p> |
1385 |
|
1386 |
<p>Aussi peut-on se demander si l'idée que l'utilisateur voit l'ordinateur |
1387 |
comme un simple outil ne serait pas une prophétie autoréalisatrice, une |
1388 |
conséquence de la pratique de garder secret le code source.</p> |
1389 |
|
1390 |
<p>La nocivité morale qui correspond à ce type de nocivité matérielle affecte |
1391 |
le sentiment d'autosuffisance. Quand une personne passe une bonne partie de |
1392 |
son temps à utiliser un système informatique, la configuration de ce système |
1393 |
devient la cité dans laquelle elle vit. L'aménagement de nos maisons et la |
1394 |
disposition des meubles déterminent comment nous y vivons, il en est de même |
1395 |
pour le système informatique que nous utilisons. Si nous ne pouvons pas le |
1396 |
modifier pour qu'il nous convienne, nos vies sont alors vraiment sous le |
1397 |
contrôle des autres, et d'une certaine manière la personne qui le constate |
1398 |
en est démoralisée : « Ça ne sert à rien d'essayer de changer ça, ce ne sera |
1399 |
jamais bien. Ce n'est pas la peine de s'embêter. Je vais juste faire mes |
1400 |
heures et… quand j'aurai fini, je m'en irai en tâchant de ne plus y |
1401 |
penser. » Ce genre d'état d'esprit, ce manque d'enthousiasme, est le |
1402 |
résultat obtenu quand on n'est pas autorisé à améliorer les choses alors |
1403 |
qu'on serait prêt à montrer de l'esprit civique.</p> |
1404 |
|
1405 |
<p>Le troisième niveau de nocivité se situe dans l'interaction entre les |
1406 |
développeurs de logiciel eux-mêmes, car tout domaine de connaissance avance |
1407 |
davantage quand les gens peuvent construire à partir du travail des |
1408 |
autres. Mais l'appropriation de l'information par une personne est |
1409 |
explicitement conçue pour empêcher toutes les autres de faire cela. Si les |
1410 |
gens pouvaient construire à partir du travail des autres, alors la propriété |
1411 |
deviendrait difficile à cerner, c'est pourquoi ils s'assurent que chaque |
1412 |
nouveau venu dans le domaine commence au début, ce qui ralentit |
1413 |
considérablement le progrès.</p> |
1414 |
|
1415 |
<p>C'est ce que nous pouvons constater : combien y a-t-il de tableurs créés par |
1416 |
des entreprises différentes sans qu'aucune ait profité de ce qui avait été |
1417 |
fait auparavant ? Oui, c'est vrai, le premier tableur qui a été écrit |
1418 |
n'était pas parfait. Il ne fonctionnait probablement que sur certains types |
1419 |
d'ordinateurs et il ne faisait pas les choses de la meilleure manière |
1420 |
possible. Donc il y avait diverses raisons pour lesquelles certaines |
1421 |
personnes voulaient en réécrire des morceaux. Mais si elles avaient |
1422 |
seulement dû réécrire les morceaux qu'elles voulaient vraiment améliorer, ça |
1423 |
leur aurait donné beaucoup moins de travail. Vous pouvez très bien voir |
1424 |
comment améliorer un des aspects d'un système, mais ne pas voir comment en |
1425 |
améliorer un autre ; en fait cela pourrait vous être très difficile de le |
1426 |
faire aussi bien. Si vous pouviez prendre la partie que vous trouvez bien et |
1427 |
refaire seulement le morceau pour lequel vous avez des idées, vous pourriez |
1428 |
avoir un système en tout point meilleur, avec beaucoup moins de travail que |
1429 |
cela n'en prendrait de le réécrire entièrement. Nous savons tous qu'il peut |
1430 |
être avantageux de réécrire un système complètement, mais à condition de |
1431 |
pouvoir lire l'ancien d'abord.</p> |
1432 |
|
1433 |
<p>Ainsi, dans le domaine de la programmation, les gens ont développé une |
1434 |
manière de perdre une bonne partie de leur temps, créant de ce fait un |
1435 |
apparent besoin en programmeurs, plus important qu'en réalité. Pourquoi y |
1436 |
a-t-il un manque de programmeurs ? Parce qu'avec la propriété intellectuelle |
1437 |
ils se sont organisés pour gaspiller la moitié de leur travail ; il semble |
1438 |
ainsi que nous en ayons besoin de deux fois plus. Quand les gens se tournent |
1439 |
vers le système de la propriété intellectuelle en disant « Regardez les |
1440 |
belles statistiques de l'emploi, regardez l'ampleur de cette industrie », |
1441 |
cela ne prouve qu'une chose : l'ampleur du gaspillage de temps et |
1442 |
d'argent. Quand ils parlent de chercher des moyens d'améliorer la |
1443 |
productivité du programmeur, ils sont ravis de le faire si cela implique des |
1444 |
outils plus évolués, mais si cela implique de se débarrasser de choses |
1445 |
précises qui sont faites pour la réduire, ils sont contre – puisque cela |
1446 |
réduirait le nombre d'emplois en programmation. Il y a comme une |
1447 |
contradiction interne là-dedans.</p> |
1448 |
|
1449 |
<p>Et la nocivité morale qui correspond à ce niveau de nocivité matérielle |
1450 |
affecte l'esprit de coopération scientifique, qui autrefois était si fort |
1451 |
que même les scientifiques de pays en guerre continuaient de coopérer, parce |
1452 |
qu'ils savaient que ce qu'ils faisaient n'avait rien à voir avec la |
1453 |
guerre. C'était uniquement pour le bénéfice à long terme de l'humanité. De |
1454 |
nos jours, personne ne se préoccupe plus de ça.</p> |
1455 |
|
1456 |
<p>Pour vous représenter ce que c'est que de faire obstacle à l'utilisation |
1457 |
d'un programme, imaginez un sandwich que vous pourriez manger mais qui ne |
1458 |
serait pas consommé. Vous pourriez le manger, une autre personne pourrait le |
1459 |
manger, le même sandwich, autant de fois qu'elle voudrait, et il resterait |
1460 |
toujours aussi nourrissant qu'à l'origine.</p> |
1461 |
|
1462 |
<p>La meilleure chose à faire, ce que nous devrions faire avec ce sandwich, |
1463 |
serait de l'amener partout où les gens ont faim ; de l'amener à autant de |
1464 |
bouches que possible, de sorte qu'il alimente autant de personnes que |
1465 |
possible. Il est certain que nous ne devons pas mettre de prix sur ce |
1466 |
sandwich, parce que sinon les gens ne pourraient pas se permettre de le |
1467 |
manger et il serait gaspillé.</p> |
1468 |
|
1469 |
<p>Un programme est comme ce sandwich, mais en mieux, parce qu'il peut être |
1470 |
mangé en même temps dans de nombreux endroits différents, utilisé par des |
1471 |
personnes différentes les unes après les autres. C'est comme si ce sandwich |
1472 |
suffisait pour alimenter tout le monde, partout, pour toujours, mais que ça |
1473 |
lui était interdit parce que quelqu'un croyait qu'il devait le posséder.</p> |
1474 |
|
1475 |
<p>Les gens qui croient pouvoir posséder des programmes proposent généralement |
1476 |
deux types d'arguments. Le premier c'est : « Je l'ai écrit, c'est l'enfant |
1477 |
de mon esprit, mon cœur, mon âme y est. Comment peut-on me l'enlever ? Où |
1478 |
qu'il aille, il est à moi, à moi, À MOI !! » Très bien, mais il est curieux |
1479 |
tout de même que la plupart d'entre eux signent des accords stipulant qu'il |
1480 |
appartient à l'entreprise pour laquelle ils travaillent.</p> |
1481 |
|
1482 |
<p>Aussi je crois que cela fait partie des choses dont vous pouvez facilement |
1483 |
vous persuader qu'elles sont importantes, mais tout aussi aisément, qu'elles |
1484 |
n'ont aucune importance.</p> |
1485 |
|
1486 |
<p>Habituellement, ces personnes usent de cet argument pour exiger le droit de |
1487 |
contrôler jusqu'à la façon dont les gens peuvent modifier le programme. Ils |
1488 |
disent : « Personne ne doit pouvoir gâcher mon œuvre d'art. » Bien, imaginez |
1489 |
que l'inventeur du plat que vous projetez de cuisiner ait le droit de |
1490 |
contrôler la façon dont vous le préparez parce que c'est son œuvre |
1491 |
d'art. Vous voulez enlever du sel, mais il dit : « Oh, non! J'ai conçu ce |
1492 |
plat et il doit y avoir beaucoup de sel ! » – « Mais mon médecin m'a dit |
1493 |
qu'il n'était pas bon pour moi de manger salé. Que puis-je faire ? »</p> |
1494 |
|
1495 |
<p>La personne qui se sert du programme est évidemment bien plus près de |
1496 |
l'événement. L'utilisation du programme l'affecte directement tandis que |
1497 |
l'auteur a seulement une sorte de relation abstraite avec cette |
1498 |
utilisation. Et donc, pour donner aux gens autant de contrôle que possible |
1499 |
sur leurs propres vies, c'est l'utilisateur qui doit décider.</p> |
1500 |
|
1501 |
<p>Le deuxième argument est économique. « Comment les gens seront-ils payés |
1502 |
pour programmer ? » disent-ils, et il y a un peu de vrai là-dedans. Mais une |
1503 |
bonne part de ce qu'ils disent est confus. Et la confusion vient de ce qu'il |
1504 |
n'est pas du tout pareil de dire « Si nous voulons avoir beaucoup de gens |
1505 |
pour programmer, nous devons nous assurer qu'ils n'auront pas besoin de |
1506 |
gagner leur vie d'une autre manière » d'une part, et d'autre part de dire |
1507 |
« Nous devons conserver le système actuel, nous devons devenir riches en |
1508 |
programmant. » Il y a une grande différence entre juste percevoir un salaire |
1509 |
pour vivre et se faire du fric comme le font les programmeurs de nos jours, |
1510 |
du moins aux États-Unis. Ils disent toujours : « Comment vais-je manger ? » |
1511 |
Mais le problème n'est pas vraiment de savoir « comment il va manger » mais |
1512 |
« comment il va manger des sushis ». Ou bien : « Comment ferai-je pour avoir |
1513 |
un toit au-dessus de la tête ? » Mais le vrai problème est : « Comment |
1514 |
pourra-t-il se payer un appartement dans une copropriété ? »</p> |
1515 |
|
1516 |
<p>Le système actuel a été choisi par les gens qui investissent dans le |
1517 |
développement logiciel parce que ça leur donne la possibilité de se faire le |
1518 |
plus d'argent possible, et non parce que c'est le seul moyen possible de |
1519 |
récolter des fonds pour soutenir l'effort de développement d'un système. En |
1520 |
fait, aussi récemment qu'il y a dix ou quinze ans, il était courant de |
1521 |
soutenir le développement logiciel autrement. Par exemple, les systèmes |
1522 |
d'exploitation de Digital qui étaient libres, même au début des années 70, |
1523 |
ont été développés par des personnes payées pour ce travail. Beaucoup de |
1524 |
programmes utiles ont été développés dans les universités. De nos jours ces |
1525 |
programmes sont souvent vendus, mais il y a quinze ans ils étaient la |
1526 |
plupart du temps gratuits, et pourtant les gens étaient payés pour leur |
1527 |
travail.</p> |
1528 |
|
1529 |
<p>Lorsque vous avez quelque chose comme un programme, comme un sandwich infini |
1530 |
ou comme une route qui ne doit être construite qu'une fois, sachant qu'une |
1531 |
fois construite il importe assez peu de savoir combien de fois vous |
1532 |
l'utilisez, sachant que cela ne coûte rien de l'utiliser, il est |
1533 |
généralement bien mieux de ne pas mettre de coût sur cette utilisation. Et |
1534 |
il y a des tas de choses comme ça que nous développons aujourd'hui, en |
1535 |
payant des gens pour le faire. Par exemple, toutes ces rues par |
1536 |
là-bas. Autant il est facile de trouver des gens qui programmeront sans être |
1537 |
payés, autant il est vraiment impossible d'en trouver qui construiront des |
1538 |
routes sans être payés. La construction des routes n'est pas un travail |
1539 |
créatif ni amusant comme la programmation mais il y a plein de rues par |
1540 |
là-bas. Nous arrivons parfaitement à trouver de quoi payer ces gens et c'est |
1541 |
bien mieux comme ça que d'avoir dit : « Laissons des entreprises privées |
1542 |
construire des routes et installer des cabines de péage, et vous paierez un |
1543 |
péage à chaque coin de rue. Alors les entreprises qui auront sélectionné les |
1544 |
bons endroits pour mettre leurs routes feront des profits et les autres |
1545 |
feront faillite. »</p> |
1546 |
|
1547 |
<p>Il se produit une chose amusante chaque fois que quelqu'un propose une |
1548 |
manière de faire de l'argent en accaparant quelque chose. Jusque-là, vous |
1549 |
aviez probablement un bon nombre de gens vraiment enthousiastes et désireux |
1550 |
de travailler dans ce domaine. Et la seule question qui se posait était : |
1551 |
« Comment peuvent-ils trouver un moyen d'existence ? » Si nous pensons aux |
1552 |
mathématiciens par exemple, il y a beaucoup plus de gens qui veulent être |
1553 |
des mathématiciens purs que de financement pour que tout le monde le |
1554 |
devienne. Et même lorsqu'ils obtiennent des fonds, ils n'en obtiennent pas |
1555 |
beaucoup. Et ces gens ne vivent pas bien. Pour les musiciens, c'est encore |
1556 |
pire. J'ai vu des statistiques sur ce que gagne le musicien moyen, le péquin |
1557 |
moyen qui consacre la majeure partie de son temps à tenter de devenir |
1558 |
musicien dans le Massachusetts ; c'est quelque chose comme la moitié du |
1559 |
revenu moyen, ou moins. C'est à peine assez pour vivre, c'est dur. Mais il y |
1560 |
en a un bon nombre qui essaient. Et puis, d'une façon ou d'une autre, quand |
1561 |
il devient possible d'être très bien payé pour faire quelque chose, |
1562 |
généralement tous ces gens disparaissent. Et on commence à dire : « Personne |
1563 |
ne le fera à moins d'être payé aussi bien. »</p> |
1564 |
|
1565 |
<p>J'ai vu cela se produire dans le domaine de la programmation. Les mêmes qui |
1566 |
travaillaient au labo d'IA en étant très peu payés et qui trouvaient ça très |
1567 |
bien, aujourd'hui n'imagineraient pas travailler pour moins de cinquante |
1568 |
mille dollars par an. Que s'est-il passé ? Quand vous faites miroiter aux |
1569 |
gens la possibilité de faire de l'argent, quand ils en voient d'autres faire |
1570 |
le même travail en étant payés très cher, ils estiment devoir obtenir la |
1571 |
même chose et personne n'est alors disposé à continuer comme avant. Il est |
1572 |
facile, une fois que cela s'est produit, de penser que la seule option est |
1573 |
de payer les gens énormément. Mais ce n'est pas vrai. Si la possibilité de |
1574 |
faire de l'argent n'existait pas, vous auriez des gens qui accepteraient de |
1575 |
le faire pour pas grand-chose, surtout si c'était créatif et amusant.</p> |
1576 |
|
1577 |
<p>J'ai donc vu ce monde unique du labo d'IA se faire détruire, et la vente du |
1578 |
logiciel faire partie intégrante de ce qui l'a détruit. J'ai vu également, |
1579 |
comme je l'ai expliqué, qu'on a besoin de logiciel libre pour retrouver une |
1580 |
communauté comme celle-là. Mais en y réfléchissant davantage, j'ai compris |
1581 |
en quoi l'accaparement du logiciel fait du mal à l'ensemble de la société |
1582 |
– plus particulièrement en poussant les gens à trahir leurs voisins, ce qui |
1583 |
entraîne l'affaiblissement du lien social ; ce même état d'esprit qui |
1584 |
conduit les gens à voir quelqu'un se faire poignarder dans la rue et à |
1585 |
n'avertir personne ; cet état d'esprit dont nous pouvons voir tant |
1586 |
d'entreprises faire preuve autour de nous. Il m'est apparu clairement que |
1587 |
j'avais un choix à faire. Je pouvais faire partie de ce monde et me sentir |
1588 |
malheureux de voir ce que je faisais de ma vie, ou je pouvais décider de le |
1589 |
combattre. Alors j'ai décidé de le combattre. J'ai consacré ma carrière à |
1590 |
tenter de reconstruire la communauté de partage du logiciel, à tenter de |
1591 |
mettre un terme au phénomène d'accaparement d'information utile à tous. Et |
1592 |
le système GNU est un moyen à cet effet. C'est un moyen technique à des fins |
1593 |
sociales. Avec le système GNU, j'espère vacciner les utilisateurs contre la |
1594 |
menace des accapareurs de logiciel.</p> |
1595 |
|
1596 |
<p>En ce moment, les accapareurs réclament essentiellement le pouvoir de rendre |
1597 |
inutile l'ordinateur personnel. Il y a une cinquantaine d'années, il y avait |
1598 |
des gens aux USA, de la Mafia, qui entraient dans les magasins et les bars, |
1599 |
surtout les bars quand les bars étaient hors-la-loi, évidemment. Une fois |
1600 |
entrés, ils disaient : « Pas mal d'endroits par ici ont brûlé |
1601 |
dernièrement. Vous ne voudriez pas que le vôtre subisse le même sort ? Eh |
1602 |
bien, nous pouvons vous protéger contre les incendies, vous avez juste à |
1603 |
nous payer mille dollars par mois et nous ferons en sorte qu'il n'y ait pas |
1604 |
le feu. » Et ça s'appelait « le racket de protection ». Aujourd'hui nous en |
1605 |
sommes à quelque chose près à ce qu'une personne nous dise : « Vous avez un |
1606 |
joli ordinateur ici et vous utilisez quelques programmes. Eh bien, si vous |
1607 |
ne voulez pas que ces programmes disparaissent, si vous ne voulez pas que la |
1608 |
police vous poursuive, vous feriez mieux de me payer mille dollars et je |
1609 |
vous donnerai un exemplaire de ce programme avec une licence. » Et ça |
1610 |
s'appelle « le racket de protection du logiciel ».</p> |
1611 |
|
1612 |
<p>En réalité, ils ne font que mettre des bâtons dans les roues de tous ceux |
1613 |
qui font ce qui doit être fait, mais ils se prétendent à eux-mêmes, et |
1614 |
veulent nous faire croire, qu'ils ont une fonction utile. Bon. Ce que |
1615 |
j'espère, c'est que le jour où ce type de la Mafia du logiciel entrera et |
1616 |
dira « Vous voulez que ces programmes disparaissent de votre ordinateur ? » |
1617 |
l'utilisateur puisse répondre « Je n'ai plus peur de vous. J'ai le logiciel |
1618 |
libre GNU et il n'y a rien que vous puissiez me faire désormais. »</p> |
1619 |
|
1620 |
<p>Quelquefois, les gens essaient de se justifier de posséder le logiciel en |
1621 |
avançant l'idée qu'il faut donner aux gens des incitations pour produire des |
1622 |
choses. Je suis d'accord avec la notion d'entreprise privée en général et |
1623 |
avec l'espoir de gagner de l'argent en produisant des choses que d'autres |
1624 |
apprécient, mais ça se détraque dans le domaine du logiciel |
1625 |
actuellement. Produire un programme propriétaire, ce n'est pas la même |
1626 |
contribution à la société que produire ce même programme et le laisser |
1627 |
libre. Parce que l'écriture du programme est juste une contribution |
1628 |
potentielle à la société. La vraie contribution à la richesse de la société |
1629 |
se fait seulement quand le programme est utilisé. Et si vous empêchez |
1630 |
l'utilisation du programme, la contribution ne se fait pas vraiment. La |
1631 |
contribution dont la société a besoin ne réside pas dans ces programmes |
1632 |
propriétaires que tout le monde est tellement incité à faire. La |
1633 |
contribution que nous voulons vraiment est celle du logiciel libre. Notre |
1634 |
société se détraque parce qu'elle donne aux gens des incitations pour faire |
1635 |
ce qui n'est pas très utile et aucune pour faire ce qui est utile. Ainsi |
1636 |
l'idée sur quoi repose l'entreprise privée n'est pas mise en application. On |
1637 |
pourrait même dire que la société est névrotique, car après tout, quand une |
1638 |
personne encourage dans le comportement des autres ce qui n'est pas bon pour |
1639 |
elle, on appelle ça une névrose. C'est comme cela que se comporte notre |
1640 |
société, en encourageant les programmeurs à faire des choses qui ne sont pas |
1641 |
bonnes pour elle.</p> |
1642 |
|
1643 |
<p>Je sors un peu du commun. Je préfère croire que je suis un bon membre de la |
1644 |
société et que je contribue à quelque chose plutôt que de sentir que je |
1645 |
l'arnaque avec succès, c'est pourquoi j'ai décidé de faire ce que j'ai |
1646 |
fait. Mais cela tracasse chacun, au moins un petit peu, d'avoir le sentiment |
1647 |
d'être payé pour faire ce qui n'est pas vraiment utile. Par conséquent, |
1648 |
cessons de défendre les incitations à faire ce qui est mauvais et essayons |
1649 |
au moins de proposer des arrangements pour inciter les gens à faire ce qui |
1650 |
est bon, c'est-à-dire du logiciel libre.</p> |
1651 |
|
1652 |
<p>Merci.</p> |
1653 |
|
1654 |
<p><strong>[Après ça, RMS a répondu à des questions pendant environ une |
1655 |
heure. Je n'en ai inclus que quelques-unes dans cette version. La bande |
1656 |
était mauvaise et je n'ai pas eu le temps de faire le travail nécessaire sur |
1657 |
la totalité]</strong></p> |
1658 |
|
1659 |
<dl> |
1660 |
<dt><b>Question :</b> Est-ce que quelqu'un a tenté de vous causer des ennuis ?</dt> |
1661 |
|
1662 |
<dd><p><b>Réponse :</b> La seule fois où l'on a tenté de me causer des ennuis, |
1663 |
c'était ces propriétaires, ces prétendus propriétaires, autoproclamés, de |
1664 |
Gosling Emacs. Hormis le fait qu'ils n'avaient aucune raison de le faire, |
1665 |
ils ne pouvaient pas faire grand-chose. D'ailleurs, je voudrais attirer |
1666 |
l'attention de tout le monde sur la façon dont les gens se servent du |
1667 |
langage pour vous inciter à penser d'une certaine façon et pas |
1668 |
autrement. Une grande part de la terminologie actuelle dans ce domaine a été |
1669 |
choisie par les propriétaires autoproclamés de logiciel pour vous inciter à |
1670 |
assimiler le logiciel à des biens matériels et à oublier les |
1671 |
différences. L'exemple le plus flagrant en est le terme « pirate ». Refusez |
1672 |
s'il vous plaît d'utiliser le terme « pirate » pour décrire quelqu'un qui |
1673 |
souhaite partager du logiciel avec son voisin comme tout bon citoyen.</p> |
1674 |
|
1675 |
<p>J'ai oublié de vous dire ceci : La notion de copyright est apparue après |
1676 |
l'invention de la presse à imprimer. Dans les temps anciens, les auteurs se |
1677 |
copiaient les uns les autres librement et ceci n'était pas considéré comme |
1678 |
un mal. Et c'était même très utile : certaines œuvres originales n'ont pu |
1679 |
survivre, bien que de manière fragmentaire, que grâce à des citations |
1680 |
extensives dans d'autres œuvres qui, elles, ont survécu.</p> |
1681 |
|
1682 |
<p>C'est parce que la copie des livres se faisait à l'unité ; il était dix fois |
1683 |
plus difficile d'en faire dix copies qu'une seule. Puis la presse à imprimer |
1684 |
a été inventée. Ceci n'a pas empêché les gens de copier les livres à la |
1685 |
main, mais comparée à l'impression, la copie manuelle était si pénible |
1686 |
qu'elle aurait aussi bien pu être impossible.</p> |
1687 |
|
1688 |
<p>Quand les livres ont pu être produits en masse, le copyright commença à |
1689 |
avoir un sens. De plus, celui-ci ne confisquait pas la liberté des lecteurs |
1690 |
ordinaires, puisqu'en tant que membre du public qui n'avait pas de presse, |
1691 |
vous ne pouviez pas copier de livre de toute façon. Le copyright ne vous |
1692 |
privait donc d'aucune liberté. Il a été inventé, et avait du sens |
1693 |
moralement, à cause d'un changement technologique. Or aujourd'hui le |
1694 |
changement inverse se produit. La copie individuelle d'information se fait |
1695 |
de mieux en mieux et nous pouvons voir que la finalité du progrès |
1696 |
technologique est de permettre de copier n'importe quel genre |
1697 |
d'information… <span>[coupure due à l'inversion de la bande]</span>.</p> |
1698 |
|
1699 |
<p>Ainsi nous retournons à la même situation que dans le monde antique où le |
1700 |
copyright n'avait aucun sens.</p> |
1701 |
|
1702 |
<p>Considérons notre concept de propriété. Il a son origine dans les objets |
1703 |
matériels. Ces derniers satisfont la loi de conservation, à peu de choses |
1704 |
près. Oui c'est vrai, je peux casser une craie en deux, mais ce n'est pas |
1705 |
ça ; elle va s'user, se « consommer ». Mais fondamentalement ceci est une |
1706 |
chaise [pointant une chaise du doigt]. Je ne peux pas simplement claquer des |
1707 |
doigts et en avoir deux. La seule manière d'en avoir une deuxième, c'est de |
1708 |
la construire comme l'a été la première. Ça prend plus de matières |
1709 |
premières, plus de travail de production. Nos idées de propriété ont été |
1710 |
développées pour que le sens moral s'accorde avec ces faits.</p> |
1711 |
|
1712 |
<p>Pour une portion d'information que tout le monde peut copier, les faits sont |
1713 |
différents, et donc les attitudes morales correspondantes sont |
1714 |
différentes. Les attitudes morales proviennent de la réflexion sur le nombre |
1715 |
de gens que cela va aider et le nombre de gens que cela va léser de faire |
1716 |
certaines choses. Lorsqu'il s'agit d'un objet matériel, vous pouvez venir |
1717 |
prendre cette chaise, mais vous ne pouvez pas venir la copier. Et si vous |
1718 |
emportiez la chaise, cela ne produirait rien, vous n'auriez aucune |
1719 |
excuse. Si quelqu'un dit « J'ai travaillé pour faire cette chaise, une seule |
1720 |
personne peut avoir cette chaise, ça peut aussi bien être moi », nous |
1721 |
pourrions aussi bien dire « Oui, c'est compréhensible. » Quand une personne |
1722 |
dit « J'ai gravé les bits de ce disque, une seule personne peut l'avoir, |
1723 |
alors n'essayez pas de me l'enlever », ça se comprend aussi. Si une seule |
1724 |
personne peut avoir le disque, pourquoi pas celui à qui il appartient ?</p> |
1725 |
|
1726 |
<p>Mais quand quelqu'un d'autre arrive et dit « Je ne vais pas abîmer votre |
1727 |
disque, je vais juste en faire un autre comme lui par magie, je l'emmènerai |
1728 |
et vous pourrez continuer à utiliser ce disque comme vous le faisiez |
1729 |
auparavant », eh bien, c'est la même chose que si quelqu'un disait « J'ai un |
1730 |
copieur magique de chaise. Vous pouvez continuer à profiter de votre chaise |
1731 |
en l'ayant toujours à disposition mais j'en aurai une aussi. » C'est une |
1732 |
bonne chose.</p> |
1733 |
|
1734 |
<p>Si les gens n'ont pas à construire mais juste à claquer des doigts et |
1735 |
reproduire, c'est merveilleux. Mais ce changement technologique ne convient |
1736 |
pas à ceux qui voudraient pouvoir posséder des copies particulières et en |
1737 |
tirer de l'argent. C'est une idée qui ne correspond qu'aux objets qui se |
1738 |
conservent. Aussi font-ils leur possible pour transformer les programmes en |
1739 |
objets matériels. Vous êtes-vous demandés pourquoi, quand vous allez dans un |
1740 |
magasin de logiciel et que vous achetez un exemplaire d'un programme, cela |
1741 |
revient à acheter quelque chose qui ressemble à un livre ? Ils veulent que |
1742 |
les gens pensent à leur achat comme à un objet matériel, sans se rendre |
1743 |
compte qu'il est en réalité sous forme de données numériques copiables.</p> |
1744 |
|
1745 |
<p>Après tout, qu'est-ce qu'un ordinateur à part une machine universelle ? Vous |
1746 |
avez probablement étudié les machines universelles de Turing, ces machines |
1747 |
qui peuvent imiter n'importe quelle autre machine. L'avantage d'une machine |
1748 |
universelle, c'est que vous pouvez lui faire imiter n'importe quelle autre |
1749 |
machine et que les modes d'emploi peuvent être copiés et changés, toutes |
1750 |
choses que vous ne pouvez pas faire avec un objet matériel. Et c'est |
1751 |
exactement ce que les accapareurs de logiciel veulent que le public arrête |
1752 |
de faire. Ils veulent profiter du changement technologique, en marche vers |
1753 |
les machines universelles, mais ils ne veulent pas que le public en profite.</p> |
1754 |
|
1755 |
<p>En gros, ils tentent de conserver « l'âge de l'objet matériel », mais |
1756 |
celui-ci est dépassé. Notre conception du bien et du mal doit être synchrone |
1757 |
avec les faits réels du monde dans lequel nous vivons.</p> |
1758 |
</dd> |
1759 |
|
1760 |
<dt><b>Question :</b> Ainsi ça se ramène à la propriété de |
1761 |
l'information. Pensez-vous qu'il y ait des exemples où, selon vous, il soit |
1762 |
juste de posséder l'information ?</dt> |
1763 |
|
1764 |
<dd><p><b>Réponse :</b> Pour une information qui n'est pas utile au public ou qui a |
1765 |
un caractère personnel, je dirais OK. En d'autres termes, l'information qui |
1766 |
porte, non sur la manière de faire les choses mais sur ce que vous avez |
1767 |
l'intention de faire ; l'information dont la seule valeur pour les autres |
1768 |
est spéculative ; celle qui leur permet de vous faire perdre de l'argent |
1769 |
mais avec laquelle ils ne peuvent véritablement rien créer. Je dirais qu'il |
1770 |
est parfaitement raisonnable de garder ce genre de chose secrète et sous |
1771 |
contrôle.</p> |
1772 |
|
1773 |
<p>Mais l'information créatrice, celle que les gens peuvent utiliser ou dont |
1774 |
ils peuvent profiter, et ce d'autant mieux que plus de gens y auront accès, |
1775 |
nous devons toujours en encourager la copie.</p> |
1776 |
</dd> |
1777 |
</dl> |
1778 |
</div> |
1779 |
|
1780 |
<div class="translators-notes"> |
1781 |
|
1782 |
<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> |
1783 |
<hr /><b>Notes de traduction</b><ol> |
1784 |
<li><a id="TransNote1" href="#TransNote1-rev" |
1785 |
class="nounderline">↑</a> |
1786 |
ITS <i>(Incompatible Timesharing System)</i> : « Système à temps partagé |
1787 |
incompatible », conçu par les hackers du laboratoire d'intelligence |
1788 |
artificielle et nommé en opposition avec CTSS <i>(Compatible Time Sharing |
1789 |
System)</i>, utilisé précédemment au MIT.</li> |
1790 |
<li><a id="TransNote2" href="#TransNote2-rev" |
1791 |
class="nounderline">↑</a> |
1792 |
Nous traduisons maintenant <i>proprietary</i> par « privateur ».</li> |
1793 |
<li><a id="TransNote3" href="#TransNote3-rev" |
1794 |
class="nounderline">↑</a> |
1795 |
<i>Wheel bit</i> (litt. bit de gouvernail) : il s'agit d'un bit particulier |
1796 |
du nombre binaire définissant un utilisateur sous Twenex (ou certains autres |
1797 |
systèmes à temps partagé des années 80), qui permet à cet utilisateur de |
1798 |
faire certaines opérations interdites à l'utilisateur normal. Les privilèges |
1799 |
du mode <i>wheel</i> sont analogues à ceux de <i>root</i> sous Unix.</li> |
1800 |
<li><a id="TransNote4" href="#TransNote4-rev" |
1801 |
class="nounderline">↑</a> |
1802 |
DDT signifiait à l'origine <i><abbr title="Digital Equipment |
1803 |
Corporation">DEC</abbr> Debugging Tape</i> (bande de débogage de |
1804 |
DEC). C'était un ensemble de programmes, développé en 1961, permettant de |
1805 |
déboguer le système d'exploitation du PDP-1 (les bandes dont il s'agissait |
1806 |
étaient des bandes perforées). Des systèmes similaires existent pour des |
1807 |
machines plus récentes, ils ont pour nom <i>Dynamic Debugging Technique</i>, |
1808 |
de manière à garder le même sigle. DDT fait allusion à l'insecticide <i>[bug |
1809 |
killer]</i> de l'époque.</li> |
1810 |
<li><a id="TransNote5" href="#TransNote5-rev" |
1811 |
class="nounderline">↑</a> |
1812 |
<i>Free University Compiler Kit</i> peut s'interpréter de deux manières |
1813 |
différentes, car on ne sait pas si l'adjectif <i>free</i> qualifie |
1814 |
<i>compiler kit</i> ou <i>university</i>. En fait, il s'agit du « kit de |
1815 |
compilation de l'Université Libre (d'Amsterdam) ».</li> |
1816 |
<li><a id="TransNote6" href="#TransNote6-rev" |
1817 |
class="nounderline">↑</a> |
1818 |
<i>C-shell</i> se prononce de la même façon que <i>seashell</i> |
1819 |
(coquillage). Il n'est pas impossible que ce jeu de mots soit voulu.</li> |
1820 |
<li><a id="TransNote7" href="#TransNote7-rev" |
1821 |
class="nounderline">↑</a> |
1822 |
<i>Bouncing ball</i> : peut-être une allusion à la « balle bondissante » du |
1823 |
karaoke qui rebondit sur les paroles affichées à l'écran au moment où il |
1824 |
faut les chanter.</li> |
1825 |
</ol></div> |
1826 |
</div> |
1827 |
|
1828 |
<!-- for id="content", starts in the include above --> |
1829 |
<!--#include virtual="/server/footer.fr.html" --> |
1830 |
<div id="footer" role="contentinfo"> |
1831 |
<div class="unprintable"> |
1832 |
|
1833 |
<p>Veuillez envoyer les requêtes concernant la FSF et GNU à <<a |
1834 |
href="mailto:gnu@gnu.org">gnu@gnu.org</a>>. Il existe aussi <a |
1835 |
href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens |
1836 |
orphelins et autres corrections ou suggestions peuvent être signalés à |
1837 |
<<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>>.</p> |
1838 |
|
1839 |
<p> |
1840 |
<!-- TRANSLATORS: Ignore the original text in this paragraph, |
1841 |
replace it with the translation of these two: |
1842 |
|
1843 |
We work hard and do our best to provide accurate, good quality |
1844 |
translations. However, we are not exempt from imperfection. |
1845 |
Please send your comments and general suggestions in this regard |
1846 |
to <a href="mailto:web-translators@gnu.org"> |
1847 |
|
1848 |
<web-translators@gnu.org></a>.</p> |
1849 |
|
1850 |
<p>For information on coordinating and contributing translations of |
1851 |
our web pages, see <a |
1852 |
href="/server/standards/README.translations.html">Translations |
1853 |
README</a>. --> |
1854 |
Merci d'adresser vos commentaires sur les pages en français à <<a |
1855 |
href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>>, et sur les |
1856 |
traductions en général à <<a |
1857 |
href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>>. Si |
1858 |
vous souhaitez y contribuer, vous trouverez dans le <a |
1859 |
href="/server/standards/README.translations.html">guide de traduction</a> |
1860 |
les infos nécessaires.</p> |
1861 |
</div> |
1862 |
|
1863 |
<!-- Regarding copyright, in general, standalone pages (as opposed to |
1864 |
files generated as part of manuals) on the GNU web server should |
1865 |
be under CC BY-ND 4.0. Please do NOT change or remove this |
1866 |
without talking with the webmasters or licensing team first. |
1867 |
Please make sure the copyright date is consistent with the |
1868 |
document. For web pages, it is ok to list just the latest year the |
1869 |
document was modified, or published. |
1870 |
|
1871 |
If you wish to list earlier years, that is ok too. |
1872 |
Either "2001, 2002, 2003" or "2001-2003" are ok for specifying |
1873 |
years, as long as each year in the range is in fact a copyrightable |
1874 |
year, i.e., a year in which the document was published (including |
1875 |
being publicly visible on the web or in a revision control system). |
1876 |
|
1877 |
There is more detail about copyright years in the GNU Maintainers |
1878 |
Information document, www.gnu.org/prep/maintain. --> |
1879 |
<p> |
1880 |
Copyright © 1987 Richard Stallman et Bjrn Remseth |
1881 |
</p> |
1882 |
<p> |
1883 |
La reproduction exacte et la distribution de copies intégrales de cette |
1884 |
transcription sont permises sur n'importe quel support d'archivage, pourvu |
1885 |
que l'avis de copyright et le présent avis de permission y figurent de |
1886 |
manière apparente. |
1887 |
</p> |
1888 |
|
1889 |
<!--#include virtual="/server/bottom-notes.fr.html" --> |
1890 |
<div class="translators-credits"> |
1891 |
|
1892 |
<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> |
1893 |
Traduction : Miluz<br /> Révision : <a |
1894 |
href="mailto:trad-gnu@april.org">trad-gnu@april.org</a></div> |
1895 |
|
1896 |
<p class="unprintable"><!-- timestamp start --> |
1897 |
Dernière mise à jour : |
1898 |
|
1899 |
$Date: 2024/02/26 10:17:02 $ |
1900 |
|
1901 |
<!-- timestamp end --> |
1902 |
</p> |
1903 |
</div> |
1904 |
</div> |
1905 |
<!-- for class="inner", starts in the banner include --> |
1906 |
</body> |
1907 |
</html> |