rms-lisp.html (37108B)
1 <!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" --> 2 3 <!--#include virtual="/server/header.pt-br.html" --> 4 <!-- Parent-Version: 1.96 --> 5 <!-- This page is derived from /server/standards/boilerplate.html --> 6 <!--#set var="TAGS" value="gnu-history" --> 7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> 8 9 <!-- This file is automatically generated by GNUnited Nations! --> 10 <title>Minhas experiências com Lisp e o desenvolvimento do GNU Emacs - Projeto GNU 11 - Free Software Foundation</title> 12 <style type="text/css" media="print,screen"><!-- 13 a[href*='#foot-'] { font-size: .94em; } 14 --> 15 </style> 16 17 <!--#include virtual="/gnu/po/rms-lisp.translist" --> 18 <!--#include virtual="/server/banner.pt-br.html" --> 19 <!--#include virtual="/gnu/gnu-breadcrumb.pt-br.html" --> 20 <!--GNUN: OUT-OF-DATE NOTICE--> 21 <!--#include virtual="/server/top-addendum.pt-br.html" --> 22 <div class="article reduced-width"> 23 <h2>Minhas experiências com Lisp e o desenvolvimento do GNU Emacs</h2> 24 25 <div class="infobox"> 26 <p>Tradução da transcrição do discurso de Richard Stallman na International 27 Lisp Conference, 28 de outubro de 2002.</p> 28 </div> 29 <hr class="thin" /> 30 31 <p>Como nenhum dos meus discursos habituais tem nada a ver com Lisp, nenhum 32 deles era apropriado para hoje. Então eu vou ter que improvisar. Desde que 33 fiz coisas suficientes em minha carreira conectadas com Lisp, eu deveria 34 poder dizer algo interessante.</p> 35 36 <p>Minha primeira experiência com Lisp foi quando li o manual do Lisp 1.5 no 37 ensino médio. Foi quando tive a impressão de que poderia haver uma linguagem 38 de computação como essa. A primeira vez que tive a chance de fazer qualquer 39 coisa com Lisp foi quando eu era um calouro em Harvard e escrevi um 40 interpretador de Lisp para o <abbr title="Programmed Data 41 Processor">PDP</abbr>-11. Era uma máquina muito pequena – tinha algo 42 como 8k de memória – e consegui escrever o interpretador com mil 43 instruções. Isso me deu algum espaço para um pouco de dados. Isso foi antes 44 de eu ver como era o software real, que funcionava no sistema real.</p> 45 46 <p>Comecei a trabalhar em uma implementação real do Lisp com JonL White quando 47 comecei a trabalhar no <abbr title="Massachusetts Institute of 48 Technology">MIT</abbr>. Fui contratado no Laboratório de Inteligência 49 Artificial (<abbr title="Artificial Intelligence Laboratory">AI Lab</abbr>) 50 não por JonL, mas por Russ Noftsker, o que foi muito irônico considerando o 51 que estava por vir – ele deve ter realmente se arrependido daquele 52 dia.</p> 53 54 <p>Durante a década de 1970, antes de minha vida se tornar politizada por conta 55 de eventos horríveis, eu estava apenas fazendo uma extensão após a outra 56 para vários programas, e a maioria deles não tinha nada a ver com Lisp. Mas, 57 ao longo do caminho, escrevi um editor de texto, o Emacs. A ideia 58 interessante sobre o Emacs era que ele tinha uma linguagem de programação e 59 os comandos de edição do usuário seriam escritos naquela linguagem de 60 programação interpretada, para que você pudesse carregar novos comandos no 61 editor enquanto estava editando. Você poderia editar os programas que estava 62 usando e depois continuar editando com eles. Então, nós tínhamos um sistema 63 que era útil para outras coisas além de programação, e ainda assim você 64 poderia programá-lo enquanto você o estivesse usando. Não sei se foi o 65 primeiro deles, mas certamente foi o primeiro editor assim.</p> 66 67 <p>Este espírito de construir programas gigantescos e complicados para usar em 68 sua própria edição e depois trocá-los com outras pessoas, alimentou o 69 espírito de cooperação livre que tivemos no AI Lab. A ideia era que você 70 pudesse dar uma cópia de qualquer programa que você tivesse para alguém que 71 quisesse uma cópia dele. Nós compartilhamos programas para quem quisesse 72 usá-los, eles eram conhecimento humano. Assim, embora não houvesse um 73 pensamento político organizado relacionando à forma como compartilhamos 74 software com o design do Emacs, estou convencido de que havia uma conexão 75 entre eles, talvez uma conexão inconsciente. Eu acho que é a natureza do 76 jeito que vivemos no AI Lab que levou ao Emacs e fez dele o que se tornou.</p> 77 78 <p>O Emacs original não tinha Lisp nele. A linguagem de baixo nível, a 79 linguagem não interpretada – era o Assembler de PDP-10. O 80 interpretador que escrevemos na verdade não foi escrito para o Emacs, foi 81 escrito para o <abbr title="Text Editor and COrrector">TECO</abbr>. Era o 82 nosso editor de texto, e era uma linguagem de programação extremamente feia, 83 tão feia quanto poderia ser. O motivo foi que não foi projetado para ser uma 84 linguagem de programação, foi projetado para ser um editor e uma linguagem 85 de comando. Havia comandos como <code>5l</code>, significando <code>mover 86 cinco linhas</code>, ou <code>i</code> e, em seguida, uma sequência de 87 caracteres e, em seguida, um ESC para inserir essa sequência de 88 caracteres. Você digitaria uma string que era uma série de comandos, que era 89 chamada de string de comando. Você terminaria com ESC ESC, e o comando seria 90 executado.</p> 91 92 <p>Bem, as pessoas queriam estender essa linguagem com recursos de programação, 93 então elas adicionaram alguns. Por exemplo, um dos primeiros foi uma 94 construção em <i>loop</i>, que foi <code>< ></code>. Você 95 colocaria essas coisas em volta e os comandos dentro delas executariam em 96 <i>loop</i>. Havia outros comandos enigmáticos que poderiam ser usados para 97 sair condicionalmente do <i>loop</i>. Para fazer o Emacs, nós <a 98 href="#foot-1">[1]</a> adicionamos recursos para termos sub-rotinas com 99 nomes. Antes disso, era como o Basic, e as sub-rotinas só podiam ter letras 100 únicas como seus nomes. Foi difícil desenvolver programas grandes, então 101 adicionamos código para que eles pudessem ter nomes mais longos. Na verdade, 102 havia algumas instalações bastante sofisticadas; eu acho que o Lisp obteve 103 seu mecanismo de <i>unwind-protect</i> do TECO.</p> 104 105 <p>Começamos a colocar instalações bastante sofisticadas, todas com a sintaxe 106 mais feia que você poderia imaginar, e funcionou – as pessoas eram 107 capazes de escrever programas grandes de qualquer maneira. A lição óbvia foi 108 que uma linguagem como TECO, que não foi projetada para ser uma linguagem de 109 programação, era o caminho errado a seguir. A linguagem na qual você 110 constrói suas extensões não deve ser pensada como uma linguagem de 111 programação na reflexão posterior; deve ser projetada como uma linguagem de 112 programação. De fato, descobrimos que a melhor linguagem de programação para 113 esse propósito era Lisp.</p> 114 115 <p>Foi Bernie Greenberg, que descobriu que ela era <a 116 href="#foot-2">[2]</a>. Ele escreveu uma versão do Emacs no Multics MacLisp 117 e escreveu seus comandos no MacLisp de maneira direta. O editor em si foi 118 escrito inteiramente em Lisp. Multics Emacs provou ser um grande sucesso 119 – programar novos comandos de edição era tão conveniente que até os 120 secretários de seu escritório começaram a aprender como usá-lo. Eles usaram 121 um manual que alguém escreveu que mostrava como estender o Emacs, mas não 122 disse que era uma programação. Então os secretários, que acreditavam que não 123 podiam programar, não ficaram assustados. Eles leram o manual, descobriram 124 que podiam fazer coisas úteis e aprenderam a programar.</p> 125 126 <p>Então Bernie percebeu que um aplicativo – um programa que faz algo 127 útil para você – que tem Lisp dentro dele e que você poderia estender 128 reescrevendo os programas Lisp, é na verdade uma ótima maneira de as pessoas 129 aprenderem programação. Isso lhes dá a chance de escrever pequenos programas 130 que são úteis para eles, o que na maioria das arenas você não pode 131 fazer. Eles podem obter incentivo para seu próprio uso prático – na 132 fase em que é o mais difícil – onde eles não acreditam que podem 133 programar, até chegarem ao ponto em que são programadores.</p> 134 135 <p>Nesse ponto, as pessoas começaram a se perguntar como poderiam obter algo 136 assim em uma plataforma em que não tivessem a implementação de Lisp de 137 serviço completo. Multics MacLisp tinha um compilador, bem como um 138 interpretador – era um sistema Lisp completo – mas as pessoas 139 queriam implementar algo assim em outros sistemas onde elas não tinham 140 escrito um compilador Lisp. Bem, se você não tivesse o compilador Lisp você 141 não poderia escrever o editor inteiro em Lisp – seria muito lento, 142 especialmente para reexibição de tela, se tivesse que executar Lisp 143 interpretado. Então nós desenvolvemos uma técnica híbrida. A ideia era 144 escrever um interpretador Lisp e as partes de baixo nível do editor juntos, 145 de modo que partes do editor fossem recursos Lisp embutidos. Essas seriam as 146 partes que sentimos que precisávamos otimizar. Esta foi uma técnica que já 147 tínhamos praticado conscientemente no Emacs original, porque havia certos 148 recursos de alto nível que reimplementamos em linguagem de máquina, 149 transformando-os em primitivas do TECO. Por exemplo, havia uma primitiva do 150 TECO para preencher um parágrafo (na verdade, para fazer a maior parte do 151 trabalho de preencher um parágrafo, porque algumas das partes menos 152 demoradas do trabalho seriam feitas em um nível mais alto por um programa do 153 TECO). Você poderia fazer o trabalho inteiro escrevendo um programa do TECO, 154 mas isso era muito lento, então otimizamos isso colocando parte dele em 155 linguagem de máquina. Usamos a mesma ideia aqui (na técnica híbrida), que a 156 maior parte do editor seria escrita em Lisp, mas certas partes dele que 157 tinham que rodar particularmente rápido seriam escritas em um nível mais 158 baixo.</p> 159 160 <p>Portanto, quando escrevi minha segunda implementação do Emacs, segui o mesmo 161 tipo de design. A linguagem de baixo nível não era mais linguagem de 162 máquina, era C. C era uma linguagem boa e eficiente para programas portáveis 163 rodarem em um sistema operacional parecido com Unix. Havia um interpretador 164 Lisp, mas implementei recursos para trabalhos de edição para fins especiais 165 diretamente no C – manipulação de buffers do editor, inserção de texto 166 inicial, leitura e gravação de arquivos, exibição do buffer novamente na 167 tela, gerenciamento de janelas do editor.</p> 168 169 <p>Agora, este não foi o primeiro Emacs que foi escrito em C e rodou no Unix. O 170 primeiro foi escrito por James Gosling e foi referido como GosMacs. Uma 171 coisa estranha aconteceu com ele. No começo, ele parecia influenciado pelo 172 mesmo espírito de compartilhamento e cooperação do Emacs original. Eu lancei 173 pela primeira vez o Emacs original ao público no MIT. Alguém queria portá-lo 174 para rodar no Twenex – originalmente rodava apenas no Sistema de 175 Compartilhamento de Tempo Incompatível (<abbr title="Incompatible 176 Timesharing System">ITS</abbr>) que usávamos no MIT. Eles o levaram para o 177 Twenex, o que significava que havia algumas centenas de instalações em todo 178 o mundo que poderiam usá-lo. Nós começamos a distribuí-lo para eles, com a 179 regra de que “você tinha que mandar de volta todos os seus aprimoramentos” 180 para que todos pudéssemos nos beneficiar. Ninguém nunca tentou impor isso, 181 mas até onde eu sei, as pessoas cooperaram.</p> 182 183 <p>Gosling, a princípio, pareceu participar desse espírito. Ele escreveu em um 184 manual que ele chamou o programa Emacs, esperando que outros na comunidade o 185 melhorassem até que fosse digno desse nome. Essa é a abordagem correta a ser 186 adotada para com uma comunidade – pedir que participem e melhorem o 187 programa. Mas depois disso ele pareceu mudar o espírito e vendeu o programa 188 o vendeu para uma empresa.</p> 189 190 <p>Naquela época, eu estava trabalhando no sistema GNU (um sistema operacional 191 similar ao Unix, de software livre, que muitas pessoas erroneamente chamam 192 de “Linux”). Não havia um editor Emacs de software livre que fosse executado 193 no Unix. Eu tinha, no entanto, um amigo que participou do desenvolvimento do 194 Emacs de Gosling. Gosling havia lhe dado, por e-mail, permissão para 195 distribuir sua própria versão. Ele propôs-me que eu usasse essa 196 versão. Então eu descobri que o Emacs de Gosling não tinha um Lisp real. Ele 197 tinha uma linguagem de programação que era conhecida como “mocklisp”, que se 198 parece sintaticamente com o Lisp, mas não possui as estruturas de dados do 199 Lisp. Então os programas não eram dados e os elementos vitais do Lisp 200 estavam faltando. Suas estruturas de dados eram sequências de caracteres, 201 números e algumas outras coisas especializadas.</p> 202 203 <p>Eu concluí que não poderia usá-lo e tive que substituir tudo, o primeiro 204 passo foi escrever um interpretador Lisp. Gradualmente adaptei cada parte do 205 editor com base em estruturas de dados do Lisp real, em vez de estruturas de 206 dados <em>ad hoc</em>, tornando as estruturas de dados internas do editor 207 expostas e manipuláveis pelos programas Lisp do usuário.</p> 208 209 <p>A única exceção foi a reexibição. Durante muito tempo, a reexibição era uma 210 espécie de mundo alternativo. O editor entraria no mundo da reexibição e as 211 coisas continuariam com estruturas de dados muito especiais que não eram 212 seguras para a coleta de lixo, não eram seguras para a interrupção, e você 213 não poderia executar nenhum programa Lisp durante isso. Nós mudamos isso 214 desde então – agora é possível executar o código Lisp durante a 215 reexibição. É uma coisa bastante conveniente.</p> 216 217 <p>Este segundo programa Emacs era “software livre” no sentido moderno do termo 218 – foi parte de uma campanha política explícita para desenvolver 219 software livre. A essência dessa campanha era que todos deveriam ser livres 220 para fazer as coisas que fazíamos antigamente no MIT, trabalhando juntos em 221 software e trabalhando com quem quisesse trabalhar conosco. Essa é a base 222 para o movimento do software livre – a experiência que tive, a vida 223 que vivi no AI Lab do MIT de estar trabalhando no conhecimento humano, e não 224 estar no caminho impedindo as pessoas de usar e disseminar ainda mais o 225 conhecimento humano.</p> 226 227 <p>Na época, você poderia construir um computador com a mesma faixa de preço de 228 outros computadores que não fossem feitos para rodar Lisp, exceto que ele 229 executaria o Lisp muito mais rápido do que os outros, e com a verificação de 230 tipo completa em todas as operações também. Computadores comuns normalmente 231 o forçavam a optar pela velocidade de execução e boa verificação da 232 digitação. Então, sim, você poderia ter um compilador Lisp e rodar seus 233 programas rapidamente, mas quando eles tentavam pegar o <code>car</code> de 234 um número, ele obtinha resultados absurdos e eventualmente falhava em algum 235 ponto.</p> 236 237 <p>A máquina Lisp era capaz de executar instruções tão rápido quanto as outras 238 máquinas, mas cada instrução – uma instrução <code>car</code> – 239 faria uma verificação de tipo de dados de forma que quando se tentava obter 240 o <code>car</code> de um número em um programa compilado, ele causaria um 241 erro imediato. Nós construímos a máquina e tínhamos um sistema operacional 242 Lisp para ela. Ele foi escrito quase inteiramente em Lisp, as únicas 243 exceções sendo partes escritas no microcódigo. As pessoas ficaram 244 interessadas em fabricá-las, o que significava que deveriam abrir uma 245 empresa.</p> 246 247 <p>Havia duas ideias diferentes sobre como essa empresa deveria ser. Greenblatt 248 queria começar o que ele chamou de um empresa “hacker”. Isso significava que 249 seria uma empresa administrada por hackers e funcionaria de maneira 250 favorável aos hackers. Outro objetivo era manter a cultura do AI 251 Lab <a class="ftn" href="#foot-3">[3]</a>. Infelizmente, o Greenblatt 252 não tinha experiência em negócios, então outras pessoas do grupo de máquinas 253 Lisp disseram duvidar que ele pudesse ter sucesso. Eles pensaram que seu 254 plano para evitar investimentos externos não funcionaria.</p> 255 256 <p>Por que ele queria evitar investimentos externos? Porque quando uma empresa 257 tem investidores externos, eles assumem o controle e não deixam que você 258 tenha nenhum escrúpulo. E, eventualmente, se você tiver algum escrúpulo, 259 eles também o substituirão como administrador.</p> 260 261 <p>Então, Greenblatt teve a ideia de que encontraria um cliente que pagaria 262 antecipadamente para comprar as peças. Eles construiriam máquinas e as 263 entregariam; com os lucros dessas partes, eles poderiam comprar peças para 264 mais algumas máquinas, vendê-las e então comprar peças para um número maior 265 de máquinas, e assim por diante. As outras pessoas do grupo acharam que isso 266 possivelmente não funcionaria.</p> 267 268 <p>Greenblatt então recrutou Russell Noftsker, o homem que havia me contratado, 269 que posteriormente havia deixado o AI Lab e criado uma empresa de 270 sucesso. Acreditava-se que Russell tinha uma aptidão para negócios. Ele 271 demonstrou essa aptidão para os negócios, dizendo às outras pessoas do 272 grupo: “Vamos abandonar Greenblatt, esquecer suas ideias e faremos outra 273 empresa”. Esfaqueando pelas costas, claramente, um verdadeiro homem de 274 negócios. Essas pessoas decidiram que iriam formar uma empresa chamada 275 Symbolics. Eles obteriam investimento externo, não teriam escrúpulos e 276 fariam todo o possível para vencer.</p> 277 278 <p>Mas Greenblatt não desistiu. Ele e as poucas pessoas leais a ele decidiram 279 começar a Lisp Machines Inc. de qualquer forma, e seguir em frente com seus 280 planos. E sabe que eles conseguiram! Eles conseguiram o primeiro cliente e 281 foram pagos antecipadamente. Eles construíram máquinas e as venderam e 282 construíram mais máquinas e mais máquinas. Eles realmente conseguiram, 283 apesar de não terem a ajuda da maioria das pessoas do grupo. A Symbolics 284 também teve um começo bem-sucedido, então você tinha duas empresas 285 concorrentes de máquinas Lisp. Quando a Symbolics viu que a LMI não ia cair 286 de cara no chão, eles começaram a procurar maneiras de destruí-la.</p> 287 288 <p>Assim, o abandono do nosso laboratório foi seguido por uma “guerra” em nosso 289 laboratório. O abandono aconteceu quando a Symbolics contratou todos os 290 hackers, exceto eu e os poucos que trabalhavam na LMI em meio período. Então 291 eles invocaram uma regra e eliminaram pessoas que trabalhavam em meio 292 período para o MIT, então tiveram que sair completamente, restando apenas 293 eu. O AI Lab estava agora indefeso. E o MIT fez um acordo muito tolo com 294 essas duas empresas. Foi um contrato de três vias em que ambas as empresas 295 licenciaram o uso de fontes do sistema de máquinas Lisp. Essas empresas 296 foram obrigadas a deixar o MIT usar suas mudanças. Mas não disse no contrato 297 que o MIT tinha o direito de colocá-los nos sistemas de máquinas MIT Lisp 298 que ambas as empresas tinham licenciado. Ninguém previra que o grupo de 299 hackers do AI Lab seria aniquilado, mas foi.</p> 300 301 <p> Então, a Symbolics criou um plano <a href="#foot-4">[4]</a>. Eles 302 disseram para o laboratório, “Continuaremos a disponibilizar nossas 303 alterações no sistema para você usar, mas você não pode colocá-las no 304 sistema da máquina Lisp do MIT. Em vez disso, daremos acesso ao sistema de 305 máquina Lisp da Symbolics e você poderá executá-lo, mas isso é tudo que você 306 pode fazer.”</p> 307 308 <p>Isso, na verdade, significava que eles precisavam escolher um lado e, ou 309 usar a versão MIT do sistema ou a versão da Symbolics. A depender da escolha 310 que fizéssemos, seria determinado para qual sistema nossas melhorias 311 iriam. Se trabalhássemos e melhorássemos a versão da Symbolics, estaríamos 312 apoiando a Symbolics sozinha. Se usássemos e melhorássemos a versão do 313 sistema do MIT, estaríamos disponibilizando o trabalho para ambas as 314 empresas, mas a Symbolics viu que estaríamos apoiando a LMI porque 315 estaríamos ajudando-a a continuar existindo. Então não nos permitiram mais 316 ser neutros.</p> 317 318 <p>Até aquele momento, eu não havia tomado o lado de nenhuma das duas empresas, 319 embora isso me fizesse sentir infeliz ao ver o que havia acontecido com 320 nossa comunidade e com o software. Mas agora, a Symbolics tinha forçado a 321 barra. Então, em um esforço para ajudar a dar continuidade à Lisp Machines 322 Inc. <a href="#foot-5">[5]</a> – comecei a duplicar todas as 323 melhorias que a Symbolics tinha feito no sistema de máquinas Lisp. Escrevi 324 as melhorias equivalentes novamente (ou seja, o código era meu).</p> 325 326 <p>Após algum tempo <a href="#foot-6">[6]</a>, cheguei à conclusão de que 327 seria melhor se eu nem olhasse para o código deles. Quando eles fizeram um 328 anúncio da versão beta que dava as notas de lançamento, eu veria quais eram 329 os recursos e depois os implementaria. No momento em que eles tinham um 330 lançamento real, eu também lançava.</p> 331 332 <p>Desta forma, por dois anos, eu os impedi de eliminar a Lisp Machines 333 Incorporated, e as duas empresas sobreviveram. Mas eu não queria passar anos 334 e anos punindo alguém, apenas frustrando um ato maligno. Eu percebi que eles 335 tinham sido punidos muito bem porque estavam presos a uma competição que não 336 acabava e não ia desaparecer <a href="#foot-7">[7]</a>. Enquanto isso, 337 era hora de começar a construir uma nova comunidade para substituir aquela 338 que as ações da Symbolics e outros haviam eliminado.</p> 339 340 <p>A comunidade Lisp nos anos 70 não se limitou ao AI Lab do MIT, e os hackers 341 não estavam todos no MIT. A guerra que a Symbolics iniciou foi o que acabou 342 com o MIT, mas havia outros eventos acontecendo na época. Havia pessoas 343 desistindo da cooperação, e juntos eles acabaram com a comunidade e não 344 sobrou muito.</p> 345 346 <p>Quando parei de punir a Symbolics, tive que descobrir o que fazer em 347 seguida. Eu tinha que fazer um sistema operacional livre, isso estava claro 348 – a única maneira que as pessoas poderiam trabalhar juntas e 349 compartilhar era com um sistema operacional livre.</p> 350 351 <p>No começo, pensei em criar um sistema baseado em Lisp, mas percebi que não 352 seria uma boa ideia tecnicamente. Para ter algo como o sistema da máquina 353 Lisp, você precisava de um microcódigo de propósito especial. Foi isso que 354 tornou possível rodar programas tão rápido quanto outros computadores e 355 ainda assim obter o benefício da verificação de tipo. Sem isso, você seria 356 reduzido a algo como os compiladores Lisp para outras máquinas. Os programas 357 seriam mais rápidos, mas instáveis. Agora, tudo bem se você estiver 358 executando um programa em um sistema de tempo compartilhado – se um 359 programa falhar, isso não é um desastre, isso é algo que seu programa 360 ocasionalmente faz. Mas isso não era bom para escrever um sistema 361 operacional, então rejeitei a ideia de fazer um sistema como o da Lisp.</p> 362 363 <p>Decidi, em vez disso, criar um sistema operacional semelhante ao Unix que 364 tivesse implementações Lisp para serem executadas como programas do 365 usuário. O kernel não seria escrito em Lisp, mas teríamos Lisp. Então o 366 desenvolvimento desse sistema operacional, o sistema operacional GNU, é o 367 que me levou a escrever o GNU Emacs. Ao fazer isso, meu objetivo era fazer a 368 implementação mínima possível do Lisp. O tamanho dos programas foi uma 369 tremenda preocupação.</p> 370 371 <p>Havia pessoas naqueles dias, em 1985, que tinham máquinas de um megabyte sem 372 memória virtual. Eles queriam poder usar o GNU Emacs. Isso significava que 373 eu tinha que manter o programa o menor possível.</p> 374 375 <p>Por exemplo, naquele momento a única construção em <em>loop</em> era o 376 <code>while</code>, o que era extremamente simples. Não havia maneira de 377 sair da declaração <code>while</code>, você tinha que fazer um 378 <code>catch</code> e um <code>throw</code>, ou testar uma variável que 379 estava no <em>loop</em>. Isso mostra até onde eu estava indo para manter as 380 coisas pequenas. Nós não tínhamos <code>caar</code> e <code>cadr</code> e 381 assim por diante; “espremer tudo o que for possível” era o espírito do GNU 382 Emacs, o espírito do Emacs Lisp, desde o começo.</p> 383 384 <p>Obviamente, as máquinas são maiores agora, e nós não fazemos mais isso. Nós 385 colocamos em <code>caar</code> e <code>cadr</code> e assim por diante, e 386 podemos colocar em outra construção de <em>loop</em> um dia desses. Estamos 387 dispostos a estendê-lo agora, mas não queremos estendê-lo no nível do Lisp 388 comum. Eu implementei o Common Lisp uma vez na máquina Lisp, e não estou 389 muito feliz com isso. Uma coisa que eu não gosto muito é dos argumentos das 390 palavras-chave <a href="#foot-8">[8]</a>. Eles não se parecem muito 391 com algo do Lisp para mim; Às vezes faço isso, mas minimizo as vezes em que 392 faço isso.</p> 393 394 <p>Esse não foi o fim dos projetos GNU envolvidos com o Lisp. Mais tarde, por 395 volta de 1995, estávamos procurando iniciar um projeto de área de trabalho 396 gráfica. Ficou claro que, para os programas na área de trabalho, queríamos 397 que uma linguagem de programação escrevesse muito nela para torná-la 398 facilmente extensível, como o editor. A questão era o que deveria ser.</p> 399 400 <p>Na época, a <abbr title="Tool Command Language">TCL</abbr> estava sendo 401 intensamente utilizada para essa finalidade. Eu tinha uma opinião muito ruim 402 sobre a TCL, basicamente porque não era Lisp. Se parece um pouco com Lisp, 403 mas semanticamente não é, e não é tão limpa. Então, alguém me mostrou um 404 anúncio em que a Sun estava tentando contratar alguém para trabalhar em TCL 405 para torná-la a “linguagem de extensão padrão de fato” do mundo. E eu 406 pensei: “Temos que impedir que isso aconteça”. Então começamos a fazer do 407 Scheme a linguagem de extensibilidade padrão do GNU. Não Common Lisp, porque 408 era muito grande. A ideia era que teríamos um interpretador Scheme projetado 409 para ser vinculado a aplicativos da mesma forma que a TCL estava vinculada a 410 aplicativos. Recomendaríamos então que ela fosse o pacote de extensibilidade 411 preferido para todos os programas GNU.</p> 412 413 <p>Há um benefício interessante que você pode obter usando uma linguagem tão 414 poderosa quanto uma versão do Lisp como sua principal linguagem de 415 extensibilidade. Você pode implementar outras linguagens traduzindo-as em 416 sua linguagem principal. Se a sua linguagem principal é a TCL, você não pode 417 implementar facilmente o Lisp traduzindo-o para o TCL. Mas se a sua 418 linguagem principal é o Lisp, não é tão difícil implementar outras coisas 419 traduzindo-as. Nossa ideia era que, se cada aplicativo extensível suportasse 420 o Scheme, você poderia escrever uma implementação da TCL ou Python ou Perl 421 no Scheme que traduz esse programa em Scheme. Em seguida, você poderia 422 carregá-lo em qualquer aplicativo e personalizá-lo em seu idioma favorito e 423 também funcionaria com outras personalizações.</p> 424 425 <p>Enquanto as linguagens de extensibilidade forem fracas, os usuários terão 426 que usar apenas a linguagem que você forneceu. O que significa que as 427 pessoas que gostam de determinada linguagem têm que competir pela escolha 428 dos desenvolvedores de aplicativos – dizendo “Por favor, desenvolvedor 429 do aplicativo, coloque minha linguagem em seu aplicativo e não em sua 430 linguagem”. Então, os usuários ficam sem escolhas – Qualquer 431 aplicativo que eles estejam usando vem com uma linguagem e eles estão presos 432 [a essa linguagem]. Mas quando você tem uma linguagem poderosa que pode 433 implementar outras traduzindo-as, então você dá ao usuário uma escolha de 434 linguagem e nós não precisamos mais ter uma guerra de linguagens. É o que 435 esperamos que “Guile”, nosso interpretador scheme, fará. Tivemos uma pessoa 436 trabalhando no último verão, terminando um tradutor do Python para o 437 Scheme. Eu não sei se está totalmente pronto ainda, mas para qualquer pessoa 438 interessada neste projeto, por favor entre em contato. Então esse é o plano 439 que temos para o futuro.</p> 440 441 <p>Eu não tenho falado sobre software livre, mas deixe-me contar um pouco sobre 442 o que isso significa. Software livre não se refere ao preço; não significa 443 que você pode obtê-lo de graça. (Você pode ter pago por uma cópia ou obtido 444 uma cópia grátis.) Significa que você tem liberdade como usuário. O 445 importante é que você esteja livre para executar o programa, livre para 446 estudar o que ele faz, livre para mudá-lo para atender às suas necessidades, 447 livre para redistribuir as cópias de outros e livre para publicar versões 448 aprimoradas e estendidas. Isto é o que significa software livre. Se você 449 estiver usando um programa não livre, você perdeu a liberdade crucial, então 450 nunca faça isso.</p> 451 452 <p>O objetivo do projeto GNU é facilitar para que as pessoas rejeitarem 453 softwares que dominam o usuário, não livres, que atropelam a liberdade, por 454 meio do fornecimento de software livre para substituí-los. Para aqueles que 455 não têm a coragem moral de rejeitar o software não livre, quando isso 456 significa algum inconveniente prático, o que tentamos fazer é dar uma 457 alternativa livre para que você possa se mover para a liberdade com menos 458 confusão e menos sacrifício em termos práticos. Quanto menos sacrifício, 459 melhor. Queremos que seja mais fácil viver em liberdade, cooperar.</p> 460 461 <p>Cooperação é uma questão de liberdade. Estamos acostumados a pensar que 462 liberdade e cooperação na sociedade são coisas opostas. Mas elas estão do 463 mesmo lado. Com o software livre, você é livre para cooperar com outras 464 pessoas, bem como para ajudar a si mesmo. Com software não-livre, alguém 465 está dominando você e mantendo as pessoas divididas. Você não tem permissão 466 para compartilhar com as pessoas, você não está livre para cooperar ou 467 ajudar a sociedade, para ajudar a si mesmo. Divididos e desamparados são os 468 estados dos usuários que usam software não-livre.</p> 469 470 <p>Nós produzimos uma tremenda variedade de software livre. Fizemos o que as 471 pessoas disseram que nunca poderíamos fazer; temos dois sistemas 472 operacionais de software livre. Temos muitos aplicativos e obviamente temos 473 muito mais caminhos para trilhar. Então precisamos da sua ajuda. Eu gostaria 474 de pedir para você ser voluntário no projeto GNU; Ajude-nos a desenvolver 475 software livre para mais tarefas. Dê uma olhada em <a 476 href="/help/">gnu.org/help</a> para encontrar sugestões de como ajudar. Se 477 você quiser encomendar coisas, há um <em>link</em> para isso na página 478 principal. Se você quiser ler sobre questões filosóficas, veja em 479 /philosophy. Se você está procurando por software livre para usar, veja em 480 /directory, que lista cerca de 1900 pacotes agora (o que é uma fração de 481 todo o software livre disponível). Por favor, escreva mais e contribua 482 conosco. Meu livro de ensaios, “Free Software and Free Society”, está à 483 venda e pode ser adquirido em www.gnu.org <a 484 href="#foot-9">[9]</a>. <i>Happy hacking!</i></p> 485 <div class="column-limit"></div> 486 487 <h3 class="footnote">Notas de rodapé</h3> 488 <ol> 489 <li id="foot-1">Guy Steele projetou o conjunto original de comandos simétrico do Emacs; 490 então ele e eu começamos a implementar o Emacs (sobre o TECO), mas depois de 491 uma longa sessão de desenvolvimento conjunto, Steele começou a se afastar, 492 então terminei o Emacs. Outros, particularmente incluindo Eugene 493 C. Cicciarelli e Mike McMahon contribuíram substancialmente mais tarde.</li> 494 495 <li id="foot-2">Bernie Greenberg diz que a implementação de Dan Weinreb do Emacs para a 496 Máquina Lisp <i>(Lisp Machine)</i> veio antes da implementação de Greenberg 497 para o Multics. Peço desculpas pelo erro.</li> 498 499 <li id="foot-3">O plano de Greenblatt, como eu entendia, era contratar pessoal de 500 laboratório em meio período, para que eles pudessem continuar trabalhando no 501 AI Lab. A Symbolics os contratou em tempo integral, então pararam de 502 trabalhar no MIT.</li> 503 504 <li id="foot-4">O cenário por trás desse plano, que não mencionei explicitamente na 505 palestra, é que durante um período inicial os ex-hackers da AI Lab, seja na 506 Symbolics ou na LMI, continuaram contribuindo com suas mudanças no sistema 507 da Máquina Lisp do MIT – mesmo que o contrato não exigisse isso. O 508 plano da Symbolics era romper essa cooperação unilateralmente.</li> 509 510 <li id="foot-5">Não era que eu me importasse particularmente com o destino da LMI, mas eu 511 não queria deixar a Symbolics ganhar através de sua agressão contra o AI 512 Lab.</li> 513 514 <li id="foot-6">Esta declaração foi mal interpretada como dizendo que eu nunca olhei para o 515 código da Symbolics. Na verdade, diz que eu olhei, no começo. O código-fonte 516 da Symbolics estava disponível no MIT, onde eu tinha o direito de lê-lo e, a 517 princípio, foi assim que descobri suas mudanças. 518 519 <p>Mas isso significava que eu tinha que fazer um esforço especial para 520 resolver cada problema de forma diferente, para evitar copiar o código da 521 Symbolics. Depois de um tempo, concluí que era melhor nem olhar. Dessa 522 forma, eu poderia escrever o código da maneira que fosse melhor, sem me 523 preocupar com o que poderia estar no código da Symbolics.</p></li> 524 525 <li id="foot-7">A Symbolics, em certa altura, protestou ao MIT que meu trabalho, frustrando 526 o plano deles, havia custado à Symbolics um milhão de dólares.</li> 527 528 <li id="foot-8">Não me importo se uma função muito complexa e pesada requer argumentos de 529 palavras-chave. O que me incomoda é fazer funções básicas simples, como 530 “member” usá-los.</li> 531 532 <li id="foot-9">Em 2021, este livro pode ser comprado da <a 533 href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition"> 534 GNU Press</a>.</li> 535 </ol> 536 </div> 537 538 <div class="translators-notes"> 539 540 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 541 </div> 542 </div> 543 544 <!-- for id="content", starts in the include above --> 545 <!--#include virtual="/server/footer.pt-br.html" --> 546 <div id="footer" role="contentinfo"> 547 <div class="unprintable"> 548 549 <p>Envie perguntas em geral sobre a FSF e o GNU para <a 550 href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. Também existem <a 551 href="/contact/">outros meios de contatar</a> a FSF. Links quebrados e 552 outras correções ou sugestões podem ser enviadas para <a 553 href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> 554 555 <p> 556 <!-- TRANSLATORS: Ignore the original text in this paragraph, 557 replace it with the translation of these two: 558 559 We work hard and do our best to provide accurate, good quality 560 translations. However, we are not exempt from imperfection. 561 Please send your comments and general suggestions in this regard 562 to <a href="mailto:web-translators@gnu.org"> 563 564 <web-translators@gnu.org></a>.</p> 565 566 <p>For information on coordinating and contributing translations of 567 our web pages, see <a 568 href="/server/standards/README.translations.html">Translations 569 README</a>. --> 570 A equipe de traduções para o português brasileiro se esforça para oferecer 571 traduções precisas e de boa qualidade, mas não estamos isentos de erros. Por 572 favor, envie seus comentários e sugestões em geral sobre as traduções para 573 <a 574 href="mailto:web-translators@gnu.org"><web-translators@gnu.org></a>. 575 </p><p>Consulte o <a href="/server/standards/README.translations.html">Guia 576 para as traduções</a> para mais informações sobre a coordenação e a 577 contribuição com traduções das páginas deste site.</p> 578 </div> 579 580 <!-- Regarding copyright, in general, standalone pages (as opposed to 581 files generated as part of manuals) on the GNU web server should 582 be under CC BY-ND 4.0. Please do NOT change or remove this 583 without talking with the webmasters or licensing team first. 584 Please make sure the copyright date is consistent with the 585 document. For web pages, it is ok to list just the latest year the 586 document was modified, or published. 587 588 If you wish to list earlier years, that is ok too. 589 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 590 years, as long as each year in the range is in fact a copyrightable 591 year, i.e., a year in which the document was published (including 592 being publicly visible on the web or in a revision control system). 593 594 There is more detail about copyright years in the GNU Maintainers 595 Information document, www.gnu.org/prep/maintain. --> 596 <p>Copyright © 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p> 597 598 <p>Esta página está licenciada sob uma licença <a rel="license" 599 href="http://creativecommons.org/licenses/by-nd/4.0/deed.pt_BR">Creative 600 Commons Atribuição-SemDerivações 4.0 Internacional</a>.</p> 601 602 <!--#include virtual="/server/bottom-notes.pt-br.html" --> 603 <div class="translators-credits"> 604 605 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 606 Traduzido por: 607 Rafael Fontenelle <a 608 href="mailto:rafaelff@gnome.org"><rafaelff@gnome.org></a>, 609 2018-2022<br /> 610 Revisado por: Cassiano Reinert Novais dos Santos <a 611 href="mailto:caco@member.fsf.org"><caco@member.fsf.org></a>, 2019.</div> 612 613 <p class="unprintable"><!-- timestamp start --> 614 Última atualização: 615 616 $Date: 2022/01/03 11:06:49 $ 617 618 <!-- timestamp end --> 619 </p> 620 </div> 621 </div> 622 <!-- for class="inner", starts in the banner include --> 623 </body> 624 </html>