summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/br/rms-lisp.html
blob: 5ba052c2656c351b9fd156b16d1fd6081a4f4327 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
<!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->

<!--#include virtual="/server/header.pt-br.html" -->
<!-- Parent-Version: 1.77 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Minhas experiências com Lisp e o desenvolvimento do GNU Emacs - Projeto GNU
- Free Software Foundation</title>

<!--#include virtual="/gnu/po/rms-lisp.translist" -->
<!--#include virtual="/server/banner.pt-br.html" -->
<h2>Minhas experiências com Lisp e o desenvolvimento do GNU Emacs</h2>

<blockquote><p>(Tradução da transcrição do discurso de Richard Stallman, 28 de outubro de
2002, na International Lisp Conference).</p></blockquote>

<p>Como nenhum dos meus discursos habituais tem nada a ver com Lisp, nenhum
deles era apropriado para hoje. Então eu vou ter que improvisar. Desde que
fiz coisas suficientes em minha carreira conectadas com Lisp, eu deveria
poder dizer algo interessante.</p>

<p>Minha primeira experiência com Lisp foi quando li o manual do Lisp 1.5 no
ensino médio. Foi quando tive a impressão de que poderia haver uma linguagem
de computação como essa. A primeira vez que tive a chance de fazer qualquer
coisa com Lisp foi quando eu era um calouro em Harvard e escrevi um
interpretador de Lisp para o <abbr title="Programmed Data
Processor">PDP</abbr>-11. Era uma máquina muito pequena &ndash; tinha algo
como 8k de memória &ndash; e consegui escrever o interpretador com mil
instruções. Isso me deu algum espaço para um pouco de dados. Isso foi antes
de eu ver como era o software real, que funcionava no sistema real.</p>

<p>Comecei a trabalhar em uma implementação real do Lisp com JonL White quando
comecei a trabalhar no <abbr title="Massachusetts Institute of
Technology">MIT</abbr>. Fui contratado no Laboratório de Inteligência
Artificial (<abbr title="Artificial Intelligence Laboratory">AI Lab</abbr>)
não por JonL, mas por Russ Noftsker, o que foi muito irônico considerando o
que estava por vir &ndash; ele deve ter realmente se arrependido daquele
dia.</p>

<p>Durante a década de 1970, antes de minha vida se tornar politizada por conta
de eventos horríveis, eu estava apenas fazendo uma extensão após a outra
para vários programas, e a maioria deles não tinha nada a ver com Lisp. Mas,
ao longo do caminho, escrevi um editor de texto, o Emacs. A ideia
interessante sobre o Emacs era que ele tinha uma linguagem de programação e
os comandos de edição do usuário seriam escritos naquela linguagem de
programação interpretada, para que você pudesse carregar novos comandos no
editor enquanto estava editando. Você poderia editar os programas que estava
usando e depois continuar editando com eles. Então, nós tínhamos um sistema
que era útil para outras coisas além de programação, e ainda assim você
poderia programá-lo enquanto você o estivesse usando. Não sei se foi o
primeiro deles, mas certamente foi o primeiro editor assim.</p>

<p>Este espírito de construir programas gigantescos e complicados para usar em
sua própria edição e depois trocá-los com outras pessoas, alimentou o
espírito de cooperação livre que tivemos no AI Lab. A ideia era que você
pudesse dar uma cópia de qualquer programa que você tivesse para alguém que
quisesse uma cópia dele. Nós compartilhamos programas para quem quisesse
usá-los, eles eram conhecimento humano. Assim, embora não houvesse um
pensamento político organizado relacionando à forma como compartilhamos
software com o design do Emacs, estou convencido de que havia uma conexão
entre eles, talvez uma conexão inconsciente. Eu acho que é a natureza do
jeito que vivemos no AI Lab que levou ao Emacs e fez dele o que se tornou.</p>

<p>O Emacs original não tinha Lisp nele. A linguagem de baixo nível, a
linguagem não interpretada &ndash; era o Assembler de PDP-10. O
interpretador que escrevemos na verdade não foi escrito para o Emacs, foi
escrito para o <abbr title="Text Editor and COrrector">TECO</abbr>. Era o
nosso editor de texto, e era uma linguagem de programação extremamente feia,
tão feia quanto poderia ser. O motivo foi que não foi projetado para ser uma
linguagem de programação, foi projetado para ser um editor e uma linguagem
de comando. Havia comandos como “5l”, significando “mover cinco linhas”, ou
“i” e, em seguida, uma sequência de caracteres e, em seguida, um ESC para
inserir essa sequência de caracteres. Você digitaria uma string que era uma
série de comandos, que era chamada de string de comando. Você terminaria com
ESC ESC, e o comando seria executado.</p>

<p>Bem, as pessoas queriam estender essa linguagem com recursos de programação,
então elas adicionaram alguns. Por exemplo, um dos primeiros foi uma
construção em <i>loop</i>, que foi &lt; &gt;. Você colocaria essas coisas em
volta e os comandos dentro delas rodariam em <i>loop</i>. Havia outros
comandos enigmáticos que poderiam ser usados para sair condicionalmente do
<i>loop</i>. Para fazer o Emacs, nós <a href="#foot-1">(1)</a> adicionamos
recursos para termos sub-rotinas com nomes.Antes disso, era como o Basic, e
as sub-rotinas só podiam ter letras únicas como seus nomes. Foi difícil
desenvolver programas grandes, então adicionamos código para que eles
pudessem ter nomes mais longos. Na verdade, havia algumas instalações
bastante sofisticadas; eu acho que o Lisp obteve seu mecanismo de
<i>unwind-protect</i> do TECO.</p>

<p>Começamos a colocar instalações bastante sofisticadas, todas com a sintaxe
mais feia que você poderia imaginar, e funcionou &ndash; as pessoas eram
capazes de escrever programas grandes de qualquer maneira. A lição óbvia foi
que uma linguagem como TECO, que não foi projetada para ser uma linguagem de
programação, era o caminho errado a seguir. A linguagem na qual você
constrói suas extensões não deve ser pensada como uma linguagem de
programação na reflexão posterior; deve ser projetada como uma linguagem de
programação. De fato, descobrimos que a melhor linguagem de programação para
esse propósito era Lisp.</p>

<p>Foi Bernie Greenberg, que descobriu que ela era <a
href="#foot-2">(2)</a>. Ele escreveu uma versão do Emacs no Multics MacLisp
e escreveu seus comandos no MacLisp de maneira direta. O editor em si foi
escrito inteiramente em Lisp. Multics Emacs provou ser um grande sucesso
&ndash; programar novos comandos de edição era tão conveniente que até os
secretários de seu escritório começaram a aprender como usá-lo. Eles usaram
um manual que alguém escreveu que mostrava como estender o Emacs, mas não
disse que era uma programação. Então os secretários, que acreditavam que não
podiam programar, não ficaram assustados. Eles leram o manual, descobriram
que podiam fazer coisas úteis e aprenderam a programar.</p>

<p>Então Bernie percebeu que um aplicativo &ndash; um programa que faz algo
útil para você &ndash; que tem Lisp dentro dele e que você poderia estender
reescrevendo os programas Lisp, é na verdade uma ótima maneira de as pessoas
aprenderem programação. Isso lhes dá a chance de escrever pequenos programas
que são úteis para eles, o que na maioria das arenas você não pode
fazer. Eles podem obter incentivo para seu próprio uso prático &ndash; na
fase em que é o mais difícil &ndash; onde eles não acreditam que podem
programar, até chegarem ao ponto em que são programadores.</p>

<p>Nesse ponto, as pessoas começaram a se perguntar como poderiam obter algo
assim em uma plataforma em que não tivessem a implementação de Lisp de
serviço completo. Multics MacLisp tinha um compilador, bem como um
interpretador &ndash; era um sistema Lisp completo &ndash; mas as pessoas
queriam implementar algo assim em outros sistemas onde elas não tinham
escrito um compilador Lisp. Bem, se você não tivesse o compilador Lisp você
não poderia escrever o editor inteiro em Lisp &ndash; seria muito lento,
especialmente para reexibição de tela, se tivesse que executar Lisp
interpretado. Então nós desenvolvemos uma técnica híbrida. A ideia era
escrever um interpretador Lisp e as partes de baixo nível do editor juntos,
de modo que partes do editor fossem recursos Lisp embutidos. Essas seriam as
partes que sentimos que precisávamos otimizar. Esta foi uma técnica que já
tínhamos praticado conscientemente no Emacs original, porque havia certos
recursos de alto nível que reimplementamos em linguagem de máquina,
transformando-os em primitivas do TECO. Por exemplo, havia uma primitiva do
TECO para preencher um parágrafo (na verdade, para fazer a maior parte do
trabalho de preencher um parágrafo, porque algumas das partes menos
demoradas do trabalho seriam feitas em um nível mais alto por um programa do
TECO). Você poderia fazer o trabalho inteiro escrevendo um programa do TECO,
mas isso era muito lento, então otimizamos isso colocando parte dele em
linguagem de máquina. Usamos a mesma ideia aqui (na técnica híbrida), que a
maior parte do editor seria escrita em Lisp, mas certas partes dele que
tinham que rodar particularmente rápido seriam escritas em um nível mais
baixo.</p>

<p>Portanto, quando escrevi minha segunda implementação do Emacs, segui o mesmo
tipo de design. A linguagem de baixo nível não era mais linguagem de
máquina, era C. C era uma linguagem boa e eficiente para programas portáveis
rodarem em um sistema operacional parecido com Unix. Havia um interpretador
Lisp, mas implementei recursos para trabalhos de edição para fins especiais
diretamente no C &ndash; manipulação de buffers do editor, inserção de texto
inicial, leitura e gravação de arquivos, exibição do buffer novamente na
tela, gerenciamento de janelas do editor.</p>

<p>Agora, este não foi o primeiro Emacs que foi escrito em C e rodou no Unix. O
primeiro foi escrito por James Gosling e foi referido como GosMacs. Uma
coisa estranha aconteceu com ele. No começo, ele parecia influenciado pelo
mesmo espírito de compartilhamento e cooperação do Emacs original. Eu lancei
pela primeira vez o Emacs original ao público no MIT. Alguém queria portá-lo
para rodar no Twenex &ndash; originalmente rodava apenas no Sistema de
Compartilhamento de Tempo Incompatível (<abbr title="Incompatible
Timesharing System">ITS</abbr>) que usávamos no MIT. Eles o levaram para o
Twenex, o que significava que havia algumas centenas de instalações em todo
o mundo que poderiam usá-lo. Nós começamos a distribuí-lo para eles, com a
regra de que “você tinha que mandar de volta todos os seus aprimoramentos”
para que todos pudéssemos nos beneficiar. Ninguém nunca tentou impor isso,
mas até onde eu sei, as pessoas cooperaram.</p>

<p>Gosling, a princípio, pareceu participar desse espírito. Ele escreveu em um
manual que ele chamou o programa Emacs, esperando que outros na comunidade o
melhorassem até que fosse digno desse nome. Essa é a abordagem correta a ser
adotada para com uma comunidade &ndash; pedir que participem e melhorem o
programa. Mas depois disso ele pareceu mudar o espírito e vendeu o programa
o vendeu para uma empresa.</p>

<p>Naquela época, eu estava trabalhando no sistema GNU (um sistema operacional
similar ao Unix, de software livre, que muitas pessoas erroneamente chamam
de “Linux”). Não havia um editor Emacs de software livre que fosse executado
no Unix. Eu tinha, no entanto, um amigo que participou do desenvolvimento do
Emacs de Gosling. Gosling havia lhe dado, por e-mail, permissão para
distribuir sua própria versão. Ele propôs-me que eu usasse essa
versão. Então eu descobri que o Emacs de Gosling não tinha um Lisp real. Ele
tinha uma linguagem de programação que era conhecida como “mocklisp”, que se
parece sintaticamente com o Lisp, mas não possui as estruturas de dados do
Lisp. Então os programas não eram dados e os elementos vitais do Lisp
estavam faltando. Suas estruturas de dados eram sequências de caracteres,
números e algumas outras coisas especializadas.</p>

<p>Eu concluí que não poderia usá-lo e tive que substituir tudo, o primeiro
passo foi escrever um interpretador Lisp. Gradualmente adaptei cada parte do
editor com base em estruturas de dados do Lisp real, em vez de estruturas de
dados <em>ad hoc</em>, tornando as estruturas de dados internas do editor
expostas e manipuláveis pelos programas Lisp do usuário.</p>

<p>A única exceção foi a reexibição. Durante muito tempo, a reexibição era uma
espécie de mundo alternativo. O editor entraria no mundo da reexibição e as
coisas continuariam com estruturas de dados muito especiais que não eram
seguras para a coleta de lixo, não eram seguras para a interrupção, e você
não poderia executar nenhum programa Lisp durante isso. Nós mudamos isso
desde então &ndash; agora é possível executar o código Lisp durante a
reexibição. É uma coisa bastante conveniente.</p>

<p>Este segundo programa Emacs era “software livre” no sentido moderno do termo
&ndash; foi parte de uma campanha política explícita para desenvolver
software livre. A essência dessa campanha era que todos deveriam ser livres
para fazer as coisas que fazíamos antigamente no MIT, trabalhando juntos em
software e trabalhando com quem quisesse trabalhar conosco. Essa é a base
para o movimento do software livre &ndash; a experiência que tive, a vida
que vivi no AI Lab do MIT de estar trabalhando no conhecimento humano, e não
estar no caminho impedindo as pessoas de usar e disseminar ainda mais o
conhecimento humano.</p>

<p>Na época, você poderia construir um computador com a mesma faixa de preço de
outros computadores que não fossem feitos para rodar Lisp, exceto que ele
executaria o Lisp muito mais rápido do que os outros, e com a verificação de
tipo completa em todas as operações também. Computadores comuns normalmente
o forçavam a optar pela velocidade de execução e boa verificação da
digitação. Então, sim, você poderia ter um compilador Lisp e rodar seus
programas rapidamente, mas quando eles tentavam pegar o <code>car</code> de
um número, ele obtinha resultados absurdos e eventualmente falhava em algum
ponto.</p>

<p>A máquina Lisp era capaz de executar instruções tão rápido quanto as outras
máquinas, mas cada instrução &ndash; uma instrução <code>car</code> &ndash;
faria uma verificação de tipo de dados de forma que quando se tentava obter
o <code>car</code> de um número em um programa compilado, ele causaria um
erro imediato. Nós construímos a máquina e tínhamos um sistema operacional
Lisp para ela. Ele foi escrito quase inteiramente em Lisp, as únicas
exceções sendo partes escritas no microcódigo. As pessoas ficaram
interessadas em fabricá-las, o que significava que deveriam abrir uma
empresa.</p>

<p>Havia duas ideias diferentes sobre como essa empresa deveria ser. Greenblatt
queria começar o que ele chamou de um empresa “hacker”. Isso significava que
seria uma empresa administrada por hackers e funcionaria de maneira
favorável aos hackers. Outro objetivo era manter a cultura do AI Lab <a
href="#foot-3">(3)</a>. Infelizmente, o Greenblatt não tinha experiência em
negócios, então outras pessoas do grupo de máquinas Lisp disseram duvidar
que ele pudesse ter sucesso. Eles pensaram que seu plano para evitar
investimentos externos não funcionaria.</p>

<p>Por que ele queria evitar investimentos externos? Porque quando uma empresa
tem investidores externos, eles assumem o controle e não deixam que você
tenha nenhum escrúpulo. E, eventualmente, se você tiver algum escrúpulo,
eles também o substituirão como administrador.</p>

<p>Então, Greenblatt teve a ideia de que encontraria um cliente que pagaria
antecipadamente para comprar as peças. Eles construiriam máquinas e as
entregariam; com os lucros dessas partes, eles poderiam comprar peças para
mais algumas máquinas, vendê-las e então comprar peças para um número maior
de máquinas, e assim por diante. As outras pessoas do grupo acharam que isso
possivelmente não funcionaria.</p>

<p>Greenblatt então recrutou Russell Noftsker, o homem que havia me contratado,
que posteriormente havia deixado o AI Lab e criado uma empresa de
sucesso. Acreditava-se que Russell tinha uma aptidão para negócios. Ele
demonstrou essa aptidão para os negócios, dizendo às outras pessoas do
grupo: “Vamos abandonar Greenblatt, esquecer suas ideias e faremos outra
empresa”. Esfaqueando pelas costas, claramente, um verdadeiro homem de
negócios. Essas pessoas decidiram que iriam formar uma empresa chamada
Symbolics. Eles obteriam investimento externo, não teriam escrúpulos e
fariam todo o possível para vencer.</p>

<p>Mas Greenblatt não desistiu. Ele e as poucas pessoas leais a ele decidiram
começar a Lisp Machines Inc. de qualquer forma, e seguir em frente com seus
planos. E sabe que eles conseguiram! Eles conseguiram o primeiro cliente e
foram pagos antecipadamente. Eles construíram máquinas e as venderam e
construíram mais máquinas e mais máquinas. Eles realmente conseguiram,
apesar de não terem a ajuda da maioria das pessoas do grupo. A Symbolics
também teve um começo bem-sucedido, então você tinha duas empresas
concorrentes de máquinas Lisp. Quando a Symbolics viu que a LMI não ia cair
de cara no chão, eles começaram a procurar maneiras de destruí-la.</p>

<p>Assim, o abandono do nosso laboratório foi seguido por uma “guerra” em nosso
laboratório. O abandono aconteceu quando a Symbolics contratou todos os
hackers, exceto eu e os poucos que trabalhavam na LMI em meio período. Então
eles invocaram uma regra e eliminaram pessoas que trabalhavam em meio
período para o MIT, então tiveram que sair completamente, restando apenas
eu. O AI Lab estava agora indefeso. E o MIT fez um acordo muito tolo com
essas duas empresas. Foi um contrato de três vias em que ambas as empresas
licenciaram o uso de fontes do sistema de máquinas Lisp. Essas empresas
foram obrigadas a deixar o MIT usar suas mudanças. Mas não disse no contrato
que o MIT tinha o direito de colocá-los nos sistemas de máquinas MIT Lisp
que ambas as empresas tinham licenciado. Ninguém previra que o grupo de
hackers do AI Lab seria aniquilado, mas foi.</p>

<p> Então, a Symbolics criou um plano <a href="#foot-4">(4)</a>. Eles disseram
para o laboratório, “Continuaremos a disponibilizar nossas alterações no
sistema para você usar, mas você não pode colocá-las no sistema da máquina
Lisp do MIT. Em vez disso, daremos acesso ao sistema de máquina Lisp da
Symbolics e você poderá executá-lo, mas isso é tudo que você pode fazer.”</p>

<p>Isso, na verdade, significava que eles precisavam escolher um lado e, ou
usar a versão MIT do sistema ou a versão da Symbolics. A depender da escolha
que fizéssemos, seria determinado para qual sistema nossas melhorias
iriam. Se trabalhássemos e melhorássemos a versão da Symbolics, estaríamos
apoiando a Symbolics sozinha. Se usássemos e melhorássemos a versão do
sistema do MIT, estaríamos disponibilizando o trabalho para ambas as
empresas, mas a Symbolics viu que estaríamos apoiando a LMI porque
estaríamos ajudando-a a continuar existindo. Então não nos permitiram mais
ser neutros.</p>

<p>Até aquele momento, eu não havia tomado o lado de nenhuma das duas empresas,
embora isso me fizesse sentir infeliz ao ver o que havia acontecido com
nossa comunidade e com o software. Mas agora, a Symbolics tinha forçado a
barra. Então, em um esforço para ajudar a dar continuidade à Lisp Machines
Inc. <a href="#foot-5">(5)</a> &ndash; comecei a duplicar todas as melhorias
que a Symbolics tinha feito no sistema de máquinas Lisp. Escrevi as
melhorias equivalentes novamente (ou seja, o código era meu).</p>

<p>Após algum tempo <a href="#foot-6">(6)</a>, cheguei à conclusão de que seria
melhor se eu nem olhasse para o código deles. Quando eles fizeram um anúncio
da versão beta que dava as notas de lançamento, eu veria quais eram os
recursos e depois os implementaria. No momento em que eles tinham um
lançamento real, eu também lançava.</p>

<p>Desta forma, por dois anos, eu os impedi de eliminar a Lisp Machines
Incorporated, e as duas empresas sobreviveram. Mas eu não queria passar anos
e anos punindo alguém, apenas frustrando um ato maligno. Eu percebi que eles
tinham sido punidos muito bem porque estavam presos a uma competição que não
acabava e não ia desaparecer <a href="#foot-7">(7)</a>. Enquanto isso, era
hora de começar a construir uma nova comunidade para substituir aquela que
as ações da Symbolics e outros haviam eliminado.</p>

<p>A comunidade Lisp nos anos 70 não se limitou ao AI Lab do MIT, e os hackers
não estavam todos no MIT. A guerra que a Symbolics iniciou foi o que acabou
com o MIT, mas havia outros eventos acontecendo na época. Havia pessoas
desistindo da cooperação, e juntos eles acabaram com a comunidade e não
sobrou muito.</p>

<p>Quando parei de punir a Symbolics, tive que descobrir o que fazer em
seguida. Eu tinha que fazer um sistema operacional livre, isso estava claro
&ndash; a única maneira que as pessoas poderiam trabalhar juntas e
compartilhar era com um sistema operacional livre.</p>

<p>No começo, pensei em criar um sistema baseado em Lisp, mas percebi que não
seria uma boa ideia tecnicamente. Para ter algo como o sistema da máquina
Lisp, você precisava de um microcódigo de propósito especial. Foi isso que
tornou possível rodar programas tão rápido quanto outros computadores e
ainda assim obter o benefício da verificação de tipo. Sem isso, você seria
reduzido a algo como os compiladores Lisp para outras máquinas. Os programas
seriam mais rápidos, mas instáveis. Agora, tudo bem se você estiver
executando um programa em um sistema de tempo compartilhado &ndash; se um
programa falhar, isso não é um desastre, isso é algo que seu programa
ocasionalmente faz. Mas isso não era bom em setratando de um sistema
operacional, então rejeitei a ideia de fazer um sistema como o da Lisp.</p>

<p>Decidi, em vez disso, criar um sistema operacional semelhante ao Unix que
tivesse implementações Lisp para serem executadas como programas do
usuário. O kernel não seria escrito em Lisp, mas teríamos Lisp. Então o
desenvolvimento desse sistema operacional, o sistema operacional GNU, é o
que me levou a escrever o GNU Emacs. Ao fazer isso, meu objetivo era fazer a
implementação mínima possível do Lisp. O tamanho dos programas foi uma
tremenda preocupação.</p>

<p>Havia pessoas naqueles dias, em 1985, que tinham máquinas de um megabyte sem
memória virtual. Eles queriam poder usar o GNU Emacs. Isso significava que
eu tinha que manter o programa o menor possível.</p>

<p>Por exemplo, naquele momento a única construção em <em>loop</em> era o
<i>while</i>, o que era extremamente simples. Não havia maneira de sair da
declaração <i>while</i>, você tinha que fazer um <i>catch</i> e um
<i>throw</i>, ou testar uma variável que estava no <em>loop</em>. Isso
mostra até onde eu estava indo para manter as coisas pequenas. Nós não
tínhamos “caar” e “cadr” e assim por diante; “espremer tudo o que for
possível” era o espírito do GNU Emacs, o espírito do Emacs Lisp, desde o
começo.</p>

<p>Obviamente, as máquinas são maiores agora, e nós não fazemos mais isso. Nós
colocamos em “caar” e “cadr” e assim por diante, e podemos colocar em outra
construção de <em>loop</em> um dia desses. Estamos dispostos a estendê-lo
agora, mas não queremos estendê-lo no nível do Lisp comum. Eu implementei o
Common Lisp uma vez na máquina Lisp, e não estou muito feliz com isso. Uma
coisa que eu não gosto muito é dos argumentos das palavras-chave <a
href="#foot-8">(8)</a>. Eles não se parecem muito com algo do Lisp para mim;
Às vezes faço isso, mas minimizo as vezes em que faço isso.</p>

<p>Esse não foi o fim dos projetos GNU envolvidos com o Lisp. Mais tarde, por
volta de 1995, estávamos procurando iniciar um projeto de área de trabalho
gráfica. Ficou claro que, para os programas na área de trabalho, queríamos
que uma linguagem de programação escrevesse muito nela para torná-la
facilmente extensível, como o editor. A questão era o que deveria ser.</p>

<p>Na época, a <abbr title="Tool Command Language">TCL</abbr> estava sendo
intensamente utilizada para essa finalidade. Eu tinha uma opinião muito ruim
sobre a TCL, basicamente porque não era Lisp. Se parece um pouco com Lisp,
mas semanticamente não é, e não é tão limpa. Então, alguém me mostrou um
anúncio em que a Sun estava tentando contratar alguém para trabalhar em TCL
para torná-la a “linguagem de extensão padrão de fato” do mundo. E eu
pensei: “Temos que impedir que isso aconteça”. Então começamos a fazer do
Scheme a linguagem de extensibilidade padrão do GNU. Não Common Lisp, porque
era muito grande. A ideia era que teríamos um interpretador Scheme projetado
para ser vinculado a aplicativos da mesma forma que a TCL estava vinculada a
aplicativos. Recomendaríamos então que ela fosse o pacote de extensibilidade
preferido para todos os programas GNU.</p>

<p>Há um benefício interessante que você pode obter usando uma linguagem tão
poderosa quanto uma versão do Lisp como sua principal linguagem de
extensibilidade. Você pode implementar outras linguagens traduzindo-as em
sua linguagem principal. Se a sua linguagem principal é a TCL, você não pode
implementar facilmente o Lisp traduzindo-o para o TCL. Mas se a sua
linguagem principal é o Lisp, não é tão difícil implementar outras coisas
traduzindo-as. Nossa ideia era que, se cada aplicativo extensível suportasse
o Scheme, você poderia escrever uma implementação da TCL ou Python ou Perl
no Scheme que traduz esse programa em Scheme. Em seguida, você poderia
carregá-lo em qualquer aplicativo e personalizá-lo em seu idioma favorito e
também funcionaria com outras personalizações.</p>

<p>Enquanto as linguagens de extensibilidade forem fracas, os usuários terão
que usar apenas a linguagem que você forneceu. O que significa que as
pessoas que gostam de determinada linguagem têm que competir pela escolha
dos desenvolvedores de aplicativos &ndash; dizendo “Por favor, desenvolvedor
do aplicativo, coloque minha linguagem em seu aplicativo e não em sua
linguagem”. Então, os usuários ficam sem escolhas &ndash; Qualquer
aplicativo que eles estejam usando vem com uma linguagem e eles estão presos
[a essa linguagem]. Mas quando você tem uma linguagem poderosa que pode
implementar outras traduzindo-as, então você dá ao usuário uma escolha de
linguagem e nós não precisamos mais ter uma guerra de linguagens. É o que
esperamos que “Guile”, nosso interpretador scheme, fará. Tivemos uma pessoa
trabalhando no último verão, terminando um tradutor do Python para o
Scheme. Eu não sei se está totalmente pronto ainda, mas para qualquer pessoa
interessada neste projeto, por favor entre em contato. Então esse é o plano
que temos para o futuro.</p>

<p>Eu não tenho falado sobre software livre, mas deixe-me contar um pouco sobre
o que isso significa. Software livre não se refere ao preço; não significa
que você pode obtê-lo de graça. (Você pode ter pago por uma cópia ou obtido
uma cópia grátis.) Significa que você tem liberdade como usuário. O
importante é que você esteja livre para executar o programa, livre para
estudar o que ele faz, livre para mudá-lo para atender às suas necessidades,
livre para redistribuir as cópias de outros e livre para publicar versões
aprimoradas e estendidas. Isto é o que significa software livre. Se você
estiver usando um programa não livre, você perdeu a liberdade crucial, então
nunca faça isso.</p>

<p>O objetivo do projeto GNU é facilitar para que as pessoas rejeitarem
softwares que dominam o usuário, não livres, que atropelam a liberdade, por
meio do fornecimento de software livre para substituí-los. Para aqueles que
não têm a coragem moral de rejeitar o software não livre, quando isso
significa algum inconveniente prático, o que tentamos fazer é dar uma
alternativa livre para que você possa se mover para a liberdade com menos
confusão e menos sacrifício em termos práticos. Quanto menos sacrifício,
melhor. Queremos que seja mais fácil viver em liberdade, cooperar.</p>

<p>Cooperação é uma questão de liberdade. Estamos acostumados a pensar que
liberdade e cooperação na sociedade são coisas opostas. Mas elas estão do
mesmo lado. Com o software livre, você é livre para cooperar com outras
pessoas, bem como para ajudar a si mesmo. Com software não-livre, alguém
está dominando você e mantendo as pessoas divididas. Você não tem permissão
para compartilhar com as pessoas, você não está livre para cooperar ou
ajudar a sociedade, para ajudar a si mesmo. Divididos e desamparados são os
estados dos usuários que usam software não-livre.</p>

<p>Nós produzimos uma tremenda variedade de software livre. Fizemos o que as
pessoas disseram que nunca poderíamos fazer; temos dois sistemas
operacionais de software livre. Temos muitos aplicativos e obviamente temos
muito mais caminhos para trilhar. Então precisamos da sua ajuda. Eu gostaria
de pedir para você ser voluntário no projeto GNU; Ajude-nos a desenvolver
software livre para mais tarefas. Dê uma olhada em <a
href="/help/">http://www.gnu.org/help</a> para encontrar sugestões de como
ajudar. Se você quiser encomendar coisas, há um <em>link</em> para isso na
página principal. Se você quiser ler sobre questões filosóficas, veja em
/philosophy. Se você está procurando por software livre para usar, veja em
/directory, que lista cerca de 1900 pacotes agora (o que é uma fração de
todo o software livre disponível). Por favor, escreva mais e contribua
conosco. Meu livro de ensaios, “Free Software and Free Society”, está à
venda e pode ser adquirido em <a
href="http://www.gnu.org/">www.gnu.org</a>. <i>Happy hacking</i>!</p>

<ol>
<li id="foot-1">Guy Steele projetou o conjunto original de comandos simétrico do Emacs;
então ele e eu começamos a implementar o Emacs (sobre o TECO), mas depois de
uma longa sessão de desenvolvimento conjunto, Steele começou a se afastar,
então terminei o Emacs. Outros, particularmente incluindo Eugene
C. Cicciarelli e Mike McMahon contribuíram substancialmente mais tarde.</li>

<li id="foot-2">Bernie Greenberg diz que a implementação de Dan Weinreb do Emacs para a
Máquina Lisp <i>(Lisp Machine)</i> veio antes da implementação de Greenberg
para o Multics. Peço desculpas pelo erro.</li>

<li id="foot-3">O plano de Greenblatt, como eu entendia, era contratar pessoal de
laboratório em meio período, para que eles pudessem continuar trabalhando no
AI Lab. A Symbolics os contratou em tempo integral, então pararam de
trabalhar no MIT.</li>

<li id="foot-4">O cenário por trás desse plano, que não mencionei explicitamente na
palestra, é que durante um período inicial os ex-hackers da AI Lab, seja na
Symbolics ou na LMI, continuaram contribuindo com suas mudanças no sistema
da Máquina Lisp do MIT &ndash; mesmo que o contrato não exigisse isso. O
plano da Symbolics era romper essa cooperação unilateralmente.</li>

<li id="foot-5">Não era que eu me importasse particularmente com o destino da LMI, mas eu
não queria deixar a Symbolics ganhar através de sua agressão contra o AI
Lab.</li>

<li id="foot-6">Esta declaração foi mal interpretada como dizendo que eu nunca olhei para o
código da Symbolics. Na verdade, diz que eu olhei, no começo. O código-fonte
da Symbolics estava disponível no MIT, onde eu tinha o direito de lê-lo e, a
princípio, foi assim que descobri suas mudanças.

<p>Mas isso significava que eu tinha que fazer um esforço especial para
resolver cada problema de forma diferente, para evitar copiar o código da
Symbolics. Depois de um tempo, concluí que era melhor nem olhar. Dessa
forma, eu poderia escrever o código da maneira que fosse melhor, sem me
preocupar com o que poderia estar no código da Symbolics.</p></li>

<li id="foot-7">A Symbolics, em certa altura, protestou ao MIT que meu trabalho, frustrando
o plano deles, havia custado à Symbolics um milhão de dólares.</li>

<li id="foot-8">Não me importo se uma função muito complexa e pesada requer argumentos de
palavras-chave. O que me incomoda é fazer funções básicas simples, como
“member” usá-los.</li>
</ol>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
 </div>
</div>

<!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.pt-br.html" -->
<div id="footer">
<div class="unprintable">

<p>Envie perguntas em geral sobre a FSF e o GNU para <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Também existem <a
href="/contact/">outros meios de contatar</a> a FSF. Links quebrados e
outras correções ou sugestões podem ser enviadas para <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>

<p>
<!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">

        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
A equipe de traduções para o português brasileiro se esforça para oferecer
traduções precisas e de boa qualidade, mas não estamos isentos de erros. Por
favor, envie seus comentários e sugestões em geral sobre as traduções para
<a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
</p><p>Consulte o <a href="/server/standards/README.translations.html">Guia
para as traduções</a> para mais informações sobre a coordenação e o envio de
traduções das páginas deste site.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->
<p>Copyright &copy; 2003, 2007, 2013, 2014, 2020 Free Software Foundation, Inc.</p>

<p>Esta página está licenciada sob uma licença <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.pt_BR">Creative
Commons Atribuição-SemDerivações 4.0 Internacional</a>.</p>

<!--#include virtual="/server/bottom-notes.pt-br.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
Traduzido por:
Rafael Fontenelle <a
href="mailto:rafaelff@gnome.org">&lt;rafaelff@gnome.org&gt;</a>,
2018-2020<br />
Revisado por: Cassiano Reinert Novais dos Santos <a
href="mailto:caco@member.fsf.org">&lt;caco@member.fsf.org&gt;</a>, 2019.</div>

<p class="unprintable"><!-- timestamp start -->
Última atualização:

$Date: 2020/09/29 18:29:24 $

<!-- timestamp end -->
</p>
</div>
</div>
</body>
</html>