taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

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 &ndash; tinha algo
     42 como 8k de memória &ndash; 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 &ndash; 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 &ndash; 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>&lt;&nbsp;&gt;</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&#8239;<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 &ndash; 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&#8239;<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 &ndash; 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 &ndash; um programa que faz algo
    127 útil para você &ndash; 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 &ndash; na
    132 fase em que é o mais difícil &ndash; 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 &ndash; era um sistema Lisp completo &ndash; 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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; uma instrução <code>car</code> &ndash;
    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&#8239;<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&#8239;<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.&#8239;<a href="#foot-5">[5]</a> &ndash; 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&#8239;<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&#8239;<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 &ndash; 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 &ndash; 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&#8239;<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 &ndash; 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 &ndash; 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&#8239;<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 &ndash; 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">&lt;gnu@gnu.org&gt;</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">&lt;webmasters@gnu.org&gt;</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         &lt;web-translators@gnu.org&gt;</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">&lt;web-translators@gnu.org&gt;</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 &copy; 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">&lt;rafaelff@gnome.org&gt;</a>,
    609 2018-2022<br />
    610 Revisado por: Cassiano Reinert Novais dos Santos <a
    611 href="mailto:caco@member.fsf.org">&lt;caco@member.fsf.org&gt;</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>