taler-merchant-demos

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

rms-lisp.html (38892B)


      1 <!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
      2 
      3 <!--#include virtual="/server/header.es.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>Mis experiencias con Lisp y el desarrollo de Emacs de GNU - Proyecto 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.es.html" -->
     19 <!--#include virtual="/gnu/gnu-breadcrumb.es.html" -->
     20 <!--GNUN: OUT-OF-DATE NOTICE-->
     21 <!--#include virtual="/server/top-addendum.es.html" -->
     22 <div class="article reduced-width">
     23 <h2>Mis experiencias con Lisp y el desarrollo de Emacs de GNU</h2>
     24 
     25 <div class="infobox">
     26 <p>Transcripción de la conferencia pronunciada por Richard Stallman el 28 de
     27 octubre de 2002 en el Congreso Internacional de Lisp.</p>
     28 </div>
     29 <hr class="thin" />
     30 
     31 <p>Dado que ninguna de mis charlas habituales tiene nada que ver con Lisp,
     32 ninguna era apropiada para hoy. Así que voy a tener que improvisar. En
     33 cualquier caso, la cantidad de trabajo relacionado con Lisp que he hecho a
     34 lo largo de mi carrera es bastante amplia y debería ser capaz de decir algo
     35 interesante al respecto.</p>
     36 
     37 <p>Mi primera experiencia con Lisp tuvo lugar en la escuela secundaria, cuando
     38 leí el manual de Lisp 1.5. Entonces quedé maravillado con la idea de que
     39 pudiera haber un lenguaje de programación así. La primera vez que tuve la
     40 oportunidad de hacer algo en Lisp fue siendo un novato en Harvard, cuando
     41 escribí un intérprete de Lisp para el <abbr title="Programmed Data
     42 Processor" lang="en">PDP</abbr>-11. Era una máquina muy pequeña, tenía algo
     43 así como 8k de memoria, y me las arreglé para escribir el intérprete en unas
     44 mil instrucciones. Eso me dejó sitio para unos pocos datos. Aquello fue
     45 antes de que llegara a conocer cómo era el software real, el que hacía el
     46 trabajo en los sistemas reales.</p>
     47 
     48 <p>Fue tras comenzar mi trabajo en el <abbr title="Instituto de Tecnología de
     49 Massachusetts">MIT</abbr> cuando empecé a trabajar en una implementación
     50 real de Lisp con JonL White. No fui contratado para el Laboratorio de
     51 Inteligencia Artificial gracias a JonL, sino por Russ Noftsker, lo cual es
     52 muy irónico teniendo en cuenta lo que vendría después. Debe de haber
     53 lamentado realmente lo ocurrido aquel día.</p>
     54 
     55 <p>En la década de los 70, antes de que mi vida se politizara a causa de
     56 terribles sucesos, simplemente me dedicaba a hacer una extensión tras otra
     57 de varios programas, la mayoría de los cuales no tenía nada que ver con
     58 Lisp. Pero, al mismo tiempo, escribí un editor de textos: Emacs. Lo
     59 interesante de Emacs era que no solo incluía un lenguaje de programación,
     60 sino que además los comandos de edición de los que disponía el usuario
     61 estaban escritos en ese mismo lenguaje, de forma que permitía cargar nuevas
     62 instrucciones mientras se estaba editando. Podía modificar los programas que
     63 estaba utilizando e, inmediatamente, editar utilizando los programas recién
     64 modificados. Es decir, teníamos un sistema que resultaba útil para tratar
     65 con texto además de programar, y que, sin embargo, permitía al usuario
     66 programar el editor mientras lo estaba usando. No sé si era el primer
     67 sistema de estas características, pero, desde luego, sí el primer editor con
     68 tales prestaciones.</p>
     69 
     70 <p>Esta construcción de programas complejos y gigantescos para usarlos en las
     71 ediciones de textos de uno, y después intercambiarlos con otros, alimentó el
     72 espíritu de cooperación espontánea que teníamos entonces en el Laboratorio
     73 de Inteligencia Artificial. La idea era que podía dar una copia de cualquier
     74 programa que tuviera a quien quisiera una. Compartíamos programas con todo
     75 el que deseara usarlos, eran conocimiento humano. Así que, a pesar de que no
     76 había un pensamiento político organizado que relacionara la forma en que
     77 compartíamos software con el diseño de Emacs, estoy convencido de que había
     78 una conexión entre ellos, quizá una conexión inconsciente. Creo que fue la
     79 naturaleza de la forma de vida que llevábamos en el Laboratorio de
     80 Inteligencia Artificial lo que condujo a Emacs e hizo de él lo que fue.</p>
     81 
     82 <p>El Emacs original no incluía Lisp. Su lenguaje, de más bajo nivel y no
     83 interpretado, era Ensamblador del PDP-10. El intérprete que escribimos
     84 nosotros en realidad no fue escrito para Emacs, sino para <abbr title="Text
     85 Editor and COrrector" lang="en">TECO</abbr>. <abbr>TECO</abbr> era nuestro
     86 editor de textos y era un lenguaje de programación extremadamente feo, no
     87 podía haber sido más feo. La razón era que no fue diseñado para ser un
     88 lenguaje de programación, sino como un lenguaje de órdenes y un editor de
     89 textos. Había órdenes como <code>5l</code>, que significaba «mover cinco
     90 líneas», o <code>i</code> seguido de una cadena de caracteres y después ESC
     91 para insertar esa cadena de caracteres. Podría escribir una cadena de
     92 caracteres que fuera una secuencia de órdenes, lo que se llamaba una cadena
     93 de órdenes, terminada con ESC ESC, y sería ejecutada.</p>
     94 
     95 <p>Bien. La gente quería extender este lenguaje con elementos útiles para la
     96 programación, así que añadió algunos. Por ejemplo, uno de los primeros fue
     97 una estructura iterativa: <code>&lt;&nbsp;&gt;</code>. Encerrar algo entre
     98 estos signos hacía que se ejecutara en un bucle. Había otras crípticas
     99 órdenes que podían usarse para salir del bucle condicionalmente. Para
    100 construir Emacs, nosotros&#8239;<a href="#foot-1">[1]</a> añadimos
    101 mecanismos para tener subrutinas con nombres. Antes de esto, de forma
    102 análoga a lo que ocurre con Basic, los nombres de las subrutinas sólo podían
    103 estar formados por una letra. Con esta limitación era difícil escribir
    104 programas grandes, así que añadimos código que permitió que pudieran tener
    105 nombres más largos. De hecho, había algunos mecanismos bastante
    106 sofisticados; creo que Lisp tomó su mecanismo <span
    107 style="font-style:italic;">unwind-protect</span>, llamémosle,
    108 «de-aplicación-abierta», de TECO.</p>
    109 
    110 <p>Empezamos a añadir otros mecanismos sofisticados, todos ellos con la
    111 sintaxis más horrible que puedan imaginar, y funcionó, por lo menos la gente
    112 fue capaz de escribir programas extensos con él. La lección obvia fue que
    113 utilizar un lenguaje como TECO, que no había sido diseñado como lenguaje de
    114 programación, fue una opción equivocada. El lenguaje sobre el que construye
    115 sus extensiones no debería ser considerado como un lenguaje de programación
    116 a posteriori, sino que debería ser diseñado como un lenguaje de programación
    117 desde un principio. De hecho, descubrimos que el mejor lenguaje de
    118 programación para ese propósito era Lisp.</p>
    119 
    120 <p>Fue Bernie Greenberg quien descubrió que lo era &#8239;<a
    121 href="#foot-2">[2]</a>. Escribió una versión de Emacs en Multics MacLisp, y
    122 programó sus órdenes en MacLisp de forma sencilla. El propio editor estaba
    123 escrito enteramente en Lisp. Multics Emacs fue un gran éxito: programar
    124 nuevas órdenes de edición era tan práctico que incluso los administrativos
    125 empezaron a aprender a hacerlo en sus oficinas. Utilizaban un manual que
    126 mostraba cómo extender Emacs, pero que no lo llamaba programación, de forma
    127 que los administrativos, que pensaban que no sabían programar, no se
    128 asustaran. Leyeron el manual, descubrieron que podían hacer cosas útiles y
    129 aprendieron a programar.</p>
    130 
    131 <p>Así que Bernie vio que una aplicación, un programa creado para solucionar
    132 problemas prácticos, que llevara incorporado LISP, de forma que pudiera
    133 extender las funcionalidades que este trae por defecto, incluso
    134 reescribirlas enteramente, era en sí misma un muy buen medio de aprender a
    135 programar. Le da a uno la oportunidad de ajustar dichas utilidades a su
    136 medida, algo que en la mayoría de las situaciones simplemente no puede
    137 hacer. Lo cual es estimulante en sí mismo y le mueve a extender las
    138 aplicaciones, y transitar así desde el momento más duro, en el que asume que
    139 no es capaz de programar, hasta aquel en que está, de hecho, programando.</p>
    140 
    141 <p>Llegado este punto, la gente se empezó a preguntar cómo podría conseguir
    142 algo así en una plataforma que no poseyera una implementación de Lisp
    143 completa. Multics MacLisp tenía tanto un compilador como un intérprete, era
    144 un sistema Lisp con todas las de la ley, pero la gente quería implementar
    145 algo similar en otros sistemas para los cuales todavía no había programado
    146 un compilador de Lisp. Bien, si no tenía el compilador de Lisp no podía
    147 escribir todo el editor en Lisp: resultaría demasiado lento, especialmente
    148 al refrescar la pantalla, si tenía que ejecutarse en Lisp interpretado. Así
    149 que desarrollamos una técnica híbrida. La idea era escribir conjuntamente un
    150 intérprete de Lisp y los fragmentos de nivel más bajo del editor, de forma
    151 que algunos fragmentos del editor fueran mecanismos incorporados en el
    152 intérprete de Lisp. Estos fragmentos serían todas aquellas partes que
    153 consideráramos que teníamos que optimizar. Ya habíamos utilizado esta
    154 técnica en el Emacs original, cuando reescribimos en lenguaje máquina
    155 algunas funciones de nivel relativamente alto, transformándolas en
    156 primitivas TECO. Por ejemplo, había una primitiva TECO para rellenar un
    157 párrafo (en realidad, para hacer casi todo el trabajo necesario para
    158 rellenar un párrafo, porque algunas de las tareas que menos tiempo consumían
    159 eran realizadas en un nivel superior por un programa TECO). Se podría haber
    160 hecho todo el trabajo con un programa TECO, pero habría resultado demasiado
    161 lento, por eso lo optimizamos escribiendo parte de él en lenguaje
    162 máquina. Esa misma idea es la que usamos aquí (en la técnica híbrida):
    163 escribimos la mayoría del editor en Lisp, pero escribimos en un nivel
    164 inferior algunas partes que tenían que ejecutarse particularmente rápido.</p>
    165 
    166 <p>Por lo tanto, cuando escribí mi segunda implementación de Emacs seguí el
    167 mismo esquema. El lenguaje de bajo nivel ya no era lenguaje máquina, sino
    168 C. C era un lenguaje bueno y eficiente para programas portátiles que fueran
    169 a ejecutarse en un sistema operativo tipo Unix. Había un intérprete de Lisp,
    170 pero implementé directamente en C funciones para tareas de edición de
    171 propósito específico: manipular las zonas de memoria intermedia [buffers]
    172 del editor, insertar texto por delante, leer y escribir ficheros, refrescar
    173 la pantalla con el contenido de la memoria intermedia y gestionar la
    174 ventanas del editor.</p>
    175 
    176 <p>Ahora bien, este no fue el primer Emacs escrito en C y que se ejecutaba en
    177 Unix. El primero lo escribió James Gosling, y era conocido como GosMacs. Con
    178 James ocurrió algo extraño. Al principio parecía estar influido por el mismo
    179 espíritu de participación y cooperación del Emacs original. En primer lugar
    180 liberé el Emacs original para personal del MIT. Alguien quería adaptarlo
    181 para su ejecución en Twenex, inicialmente sólo se podía ejecutar sobre el
    182 <span style="font-style:italic;">Incompatible Timesharing System</span>
    183 [sistema de tiempo compartido incompatible] que usábamos en el MIT. Lo
    184 adaptaron a Twenex, lo cual significaba que había unos pocos cientos de
    185 instalaciones alrededor del mundo que podían, potencialmente,
    186 usarlo. Empezamos a distribuírselo junto con la norma de que «usted debía
    187 enviarnos todas sus mejoras» para que así todos nos pudiéramos
    188 beneficiar. Nadie intentó nunca hacer cumplir esta norma pero, hasta donde
    189 yo sé, la gente cooperaba.</p>
    190 
    191 <p>Inicialmente Gosling parecía participar de este espíritu. Escribió en un
    192 manual que llamó Emacs al programa con la esperanza de que otros miembros de
    193 la comunidad lo mejoraran hasta que llegara a ser merecedor de ese
    194 nombre. Esa es la forma correcta de enfocar la relación con la comunidad,
    195 pedirle que se una al proyecto y mejore el programa. Pero más adelante
    196 pareció cambiar el espíritu, y lo vendió a una empresa.</p>
    197 
    198 <p>Por aquel entonces yo estaba trabajando en el sistema GNU (un sistema
    199 operativo libre tipo Unix al que mucha gente llama erróneamente «Linux»). No
    200 había ningún editor Emacs que pudiera ejecutarse en Unix y que fuera
    201 software libre. No obstante, tenía un amigo que había participado en el
    202 desarrollo del Emacs de Gosling. Gosling le había dado permiso, por correo
    203 electrónico, para distribuir su propia versión. Me propuso que usara esa
    204 versión. Entonces me di cuenta de que el Emacs de Gosling no incluía un Lisp
    205 real. Tenía un lenguaje de programación conocido como «mocklisp», que
    206 sintácticamente parece Lisp pero que no tiene sus estructuras de datos. Así,
    207 los programas no eran datos, y carecía de elementos vitales de Lisp. Sus
    208 estructuras de datos eran cadenas de caracteres, números y unos pocos
    209 elementos especializados más.</p>
    210 
    211 <p>Llegué a la conclusión de que no podía utilizarlo y tuve que reemplazarlo
    212 por completo, para lo cual el primer paso fue escribir un intérprete de Lisp
    213 real. Gradualmente adapté cada componente del editor basándolo en
    214 estructuras de datos de Lisp real, en lugar de estructuras de datos ad hoc,
    215 y haciendo las estructuras de datos internas del editor visibles y
    216 manipulables por los programas Lisp del usuario.</p>
    217 
    218 <p>La excepción fue <span style="font-style:italic;">redisplay</span>. Durante
    219 mucho tiempo, <span style="font-style:italic;">redisplay</span> fue una
    220 especie de universo paralelo. El editor pasaba al universo de <span
    221 style="font-style:italic;">redisplay</span> y todo funcionaba con
    222 estructuras de datos muy especiales que no eran seguras para la recolección
    223 de memoria [<span style="font-style:italic;">garbage collection</span>], no
    224 eran seguras frente a interrupciones, y no podía ejecutar ningún programa
    225 Lisp mientras tanto. Posteriormente lo hemos modificado, ahora se puede
    226 ejecutar código Lisp concurrentemente con <span
    227 style="font-style:italic;">redisplay</span>. Es algo muy práctico.</p>
    228 
    229 <p>Este segundo Emacs era «software libre» en el sentido moderno del término:
    230 formaba parte de una campaña política explícita para la elaboración de
    231 software libre. La esencia de la campaña era que todo el mundo debería tener
    232 la libertad de hacer lo que nosotros hacíamos en el MIT en los viejos
    233 tiempos: trabajar conjuntamente en el software y colaborar con todo el que
    234 quisiera trabajar con nosotros. Esta es la base del movimiento por el
    235 software libre, la experiencia que tuve, la vida que viví en el Laboratorio
    236 de Inteligencia Artificial del MIT: trabajar para el conocimiento, y no
    237 obstaculizar su uso ni su expansión.</p>
    238 
    239 <p>En esa época, podía construir un ordenador por un precio similar al de otros
    240 ordenadores que no estaban pensados para usar Lisp, en el cual Lisp se
    241 ejecutaría mucho más rápido y que incluiría validación de tipos en cada
    242 operación. Los ordenadores normales típicamente le forzaban a elegir entre
    243 velocidad de ejecución y buena validación de tipos. O sea que sí, podía
    244 tener un compilador de Lisp y ejecutar sus programas con velocidad, pero
    245 cuando sus programas intentaban tomar <code>car</code> de un número,
    246 obtenían resultados absurdos y terminaban por fallar o bloquearse.</p>
    247 
    248 <p>La máquina Lisp podía ejecutar instrucciones aproximadamente a la misma
    249 velocidad que esas otras máquinas, pero para cada instrucción una
    250 instrucción <code>car</code> validaría los tipos de los datos, de modo que
    251 cuando se intentara obtener el <code>car</code> de un número en un programa
    252 compilado, devolvería un error inmediato. Construimos la máquina y un
    253 sistema operativo Lisp para ella. Estaba escrito en Lisp casi en su
    254 totalidad, con las únicas excepciones de algunos fragmentos escritos en
    255 microcódigo. Hubo quien se interesó en fabricarla, lo que significaba fundar
    256 una empresa.</p>
    257 
    258 <p>Había dos visiones diferentes sobre cómo debería ser esa empresa. Greenblatt
    259 quería fundar lo que él llamaba una empresa «hacker». Esto quería decir que
    260 sería una empresa gestionada por hackers y que operaría de un modo propicio
    261 para hackers. Otro objetivo era mantener la cultura del Laboratorio de
    262 Inteligencia Artificial &#8239;<a class="ftn"
    263 href="#foot-3">[3]</a>. Desafortunadamente, Greenblatt no tenía experiencia
    264 empresarial, por lo que otros miembros del grupo de la máquina Lisp
    265 expresaron sus dudas sobre el éxito de la empresa. Pensaban que su plan para
    266 evitar inversiones externas no funcionaría.</p>
    267 
    268 <p>¿Por qué quería evitar la inversión externa? Porque cuando una empresa tiene
    269 inversores externos, éstos toman el control y no permiten que tenga ningún
    270 escrúpulo. Y, si usted tiene algún escrúpulo, finalmente le relevan de sus
    271 funciones directivas.</p>
    272 
    273 <p>La idea de Greenblatt era encontrar un cliente que pagara sus máquinas por
    274 adelantado para poder comprar las piezas necesarias. Construirían las
    275 máquinas y las entregarían; con los beneficios obtenidos podrían comprar las
    276 piezas para unas pocas máquinas más, venderlas, comprar piezas para un
    277 número mayor de máquinas, y así sucesivamente. Los otros miembros del grupo
    278 pensaban que lo más probable era que el plan no saliera bien.</p>
    279 
    280 <p>Entonces Greenblatt reclutó a Russell Noftsker, la persona que me había
    281 contratado, quien había dejado el Laboratorio de Inteligencia Artificial y
    282 creado una empresa exitosa. Russell era considerado una persona con
    283 aptitudes para los negocios. Demostró serlo al decir a los otros miembros
    284 del grupo: «deshagámonos de Greenblatt, olvidad sus ideas, y fundaremos otra
    285 empresa». Apuñalando por la espalda, sin duda un auténtico hombre de
    286 negocios. Decidieron crear una empresa llamada Symbolics. Obtendrían
    287 financiación externa, no tendrían escrúpulos y harían todo lo posible por
    288 ganar.</p>
    289 
    290 <p>Pero Greenblatt no se dio por vencido. Fundó, junto con los pocos que
    291 permanecieron leales a él, Lisp Machines Inc. y siguió adelante con sus
    292 planes. ¡Y tuvieron éxito! Consiguieron el primer cliente y éste les pagó
    293 por adelantado. Construyeron las máquinas y las vendieron, y construyeron
    294 más y más máquinas. Tuvieron éxito a pesar de no contar con la ayuda de la
    295 mayor parte de los miembros del grupo. Symbolics también empezó con buen
    296 pie, así que había dos empresas de máquinas Lisp compitiendo. Cuando
    297 Symbolics vio que LMI no se iba a caer de bruces empezó a buscar maneras de
    298 destruirla.</p>
    299 
    300 <p>Por lo tanto, al abandono de nuestro laboratorio le siguió la «guerra»  en
    301 nuestro laboratorio. El abandono tuvo lugar cuando Symbolics se llevó a
    302 todos los hackers, excepto a los pocos que trabajaban a tiempo parcial en
    303 LMI y a mí mismo. Luego apelaron a una norma y eliminaron a la gente que
    304 trabajaba a tiempo parcial para el MIT, que tuvo que marcharse, lo cual me
    305 dejo sólo a mí. En ese momento el Laboratorio de Inteligencia Artificial
    306 estaba indefenso. Y, además, el MIT había llegado a un acuerdo muy poco
    307 sensato con esas dos empresas. Era un contrato a tres bandas por el que
    308 ambas empresas autorizaban el uso de las fuentes del sistema de la máquina
    309 Lisp. Estas empresas debían permitir al MIT usar sus modificaciones. Pero el
    310 contrato no decía que el MIT tuviera derecho a instalarlas en las máquinas
    311 Lisp para cuyo uso le habían otorgado licencia ambas empresas. Nadie había
    312 previsto que el grupo de hackers del Laboratorio de Inteligencia Artificial
    313 sería aniquilado, pero lo fue.</p>
    314 
    315 <p> A Symbolics se le ocurrió un plan&#8239;<a href="#foot-4">[4]</a>. Dijeron
    316 al laboratorio: «seguiremos permitiéndoles que usen nuestras modificaciones
    317 al sistema, pero no podrán instalarlas en la máquina Lisp del MIT. En su
    318 lugar, les daremos acceso al sistema de la máquina Lisp de Symbolics, y
    319 podrán ejecutarlo, pero eso será todo lo que podrán hacer».</p>
    320 
    321 <p>Esto, en la práctica, significaba que nos exigían posicionarnos en un bando
    322 y utilizar, o bien la versión del MIT del sistema, o bien la versión de
    323 Symbolics. Nuestra decisión determinaría a qué sistema irían nuestras
    324 mejoras. Si mejorábamos la versión de Symbolics, estaríamos apoyando a
    325 Symbolics exclusivamente. Si utilizábamos y mejorábamos la versión del
    326 sistema del MIT, ambas empresas tendrían acceso a nuestro trabajo. Pero
    327 Symbolics vio que estaríamos dando apoyo a LMI porque estaríamos ayudando a
    328 que siguiera existiendo. Así, no se nos permitió seguir siendo neutrales.</p>
    329 
    330 <p>Hasta ese momento yo no había tomado partido por ninguna de las dos
    331 empresas, aunque me entristecía ver lo que le había ocurrido a nuestra
    332 comunidad y al software. Pero ahora, Symbolics había forzado la
    333 situación. Así que, en un intento por ayudar a mantener Lisp Machines Inc. a
    334 flote&#8239;<a href="#foot-5">[5]</a>, empecé a duplicar todas las mejoras
    335 que había hecho Symbolics al sistema de la máquina Lisp. Escribí por mí
    336 mismo las mejoras equivalentes de nuevo (es decir, el código era mío).</p>
    337 
    338 <p>Después de un tiempo&#8239;<a href="#foot-6">[6]</a>, llegué a la conclusión
    339 de que sería mejor ni siquiera mirar su código. Cuando anunciaban la
    340 liberación de una actualización del código, podía ver en las notas
    341 correspondientes a la nueva liberación cuáles eran las modificaciones
    342 introducidas e implementarlas. Cuando ellos hacían finalmente la liberación
    343 de las modificaciones, yo también liberaba las mías.</p>
    344 
    345 <p>De esta manera, durante dos años evité que acabaran con Lisp Machines
    346 Incorporated, y las dos empresas siguieron adelante. Pero no quería pasarme
    347 años y años castigando a alguien, evitando que se cometiera un acto
    348 malvado. Supuse que ya habían sido castigados bastante puesto que estaban
    349 inmersos en una competición que no tendría fin &#8239;<a
    350 href="#foot-7">[7]</a>. Por otro lado, había llegado el momento de formar
    351 una nueva comunidad que reemplazara a la que las acciones suyas y de otros
    352 exterminaron.</p>
    353 
    354 <p>La comunidad Lisp en los setenta no estaba limitada al Laboratorio de
    355 Inteligencia Artificial del MIT, y no todos los hackers estaban en el
    356 MIT. La guerra iniciada por Symbolics fue lo que aniquiló el MIT, pero había
    357 otras actividades en marcha. Había gente que abandonó la cooperación, y esto
    358 también contribuyó a extinguir la comunidad.</p>
    359 
    360 <p>Una vez que dejé de castigar a Symbolics, tuve que pensar qué hacer a
    361 continuación. Tenía que hacer un sistema operativo libre, eso estaba
    362 claro. La única forma de que la gente pudiera trabajar conjuntamente y
    363 compartir era con un sistema operativo libre.</p>
    364 
    365 <p>Al principio pensé en hacer un sistema basado en Lisp, pero me di cuenta de
    366 que no sería una buena idea desde el punto de vista técnico. Para tener algo
    367 como el sistema de la máquina Lisp, se necesita un tipo de microcódigo
    368 llamado «de propósito específico». Eso es lo que hizo posible ejecutar
    369 programas con la misma velocidad con la que se ejecutaban programas en otros
    370 ordenadores y con el beneficio adicional de la validación de tipos. Sin eso,
    371 se habría visto limitado a algo similar a los compiladores Lisp para otras
    372 máquinas. Los programas habrían sido más rápidos, pero inestables. Ahora
    373 bien, eso puede ser admisible si está ejecutando un programa en un sistema
    374 de tiempo compartido: que un programa falle no es un desastre, es algo que
    375 ocurre ocasionalmente. Pero no es admisible cuando lo que escribimos es el
    376 sistema operativo, así que rechacé la idea de hacer un sistema como la
    377 máquina Lisp.</p>
    378 
    379 <p>En su lugar, decidí hacer un sistema operativo tipo Unix que tuviera
    380 implementaciones Lisp, las cuales serían ejecutadas como programas de
    381 usuario. El núcleo no estaría escrito en Lisp, pero tendríamos Lisp. Así que
    382 el desarrollo de ese sistema operativo, el sistema operativo GNU, fue lo que
    383 me llevó a escribir Emacs de GNU. Al hacerlo, me propuse como meta hacer la
    384 implementación de Lisp mínima posible. El tamaño de los programas era algo a
    385 tener muy en cuenta.</p>
    386 
    387 <p>Había gente en aquellos días, en 1985, que tenía máquinas con un megabyte de
    388 memoria y sin memoria virtual. Querían poder usar Emacs de GNU. Esto
    389 significaba que tenía que hacer que el programa fuera lo más pequeño
    390 posible.</p>
    391 
    392 <p>Por ejemplo, en aquel entonces la única estructura iterativa era
    393 <code>while</code>, implementada de forma extremadamente simple. No había
    394 ningún mecanismo para interrumpir la ejecución de la sentencia
    395 <code>while</code> y transferir el control a la instrucción siguiente a
    396 dicha sentencia, usted tenía que hacer un <cite>catch</cite> y un
    397 <cite>throw</cite>, o monitorizar una variable para salir del bucle. Esto
    398 muestra hasta dónde estaba llevando las cosas para mantener los programas
    399 pequeños. No teníamos <code>caar</code>, <code>cadr</code>, etc. Había que
    400 sacarle el mayor jugo posible, ese fue el espíritu de Emacs de GNU, el
    401 espíritu de Emacs Lisp desde el principio.</p>
    402 
    403 <p>Evidentemente, las máquinas actuales tienen mayor capacidad, y ya no hacemos
    404 las cosas así. Ahora incluimos <code>caar</code>, <code>cadr</code>, etc. Y
    405 podríamos añadir otra estructura iterativa un día de estos. Queremos
    406 ampliarlo en cierta medida, pero no hasta el punto de Common Lisp. Una vez
    407 implementé Common Lisp en una máquina Lisp, y no estoy muy satisfecho con el
    408 resultado. Algo que no me gusta gran cosa son los parámetros de palabra
    409 clave&#8239;<a href="#foot-8">[8]</a>. No me parecen muy de Lisp; los
    410 utilizo a veces pero intento hacerlo lo menos posible.</p>
    411 
    412 <p>Ese no fue el fin de los proyectos de GNU implicados con Lisp. Más tarde,
    413 alrededor de 1995, estábamos estudiando el inicio de un proyecto de
    414 escritorio gráfico. Teníamos claro que queríamos un lenguaje de programación
    415 que hiciera fácilmente extensibles, como el editor, los programas accesibles
    416 desde el escritorio. La cuestión era cuál.</p>
    417 
    418 <p>En aquel momento, <abbr title="Tool Command Language" lang="en">TCL</abbr>
    419 estaba recibiendo un fuerte impulso como lenguaje a utilizar para este
    420 propósito. Yo tenía una opinión muy negativa de TCL, básicamente porque no
    421 era Lisp. Tiene un ligerísimo parecido con Lisp, pero no semánticamente, y
    422 no es tan limpio. Después, me mostraron un anuncio en el que Sun ofrecía un
    423 puesto de trabajo para trabajar con TCL y hacer de él el «lenguaje de
    424 extensión estándar, de facto» en el mundo. Y pensé: «Tenemos que evitar que
    425 eso llegue a ocurrir.». Así que empezamos a hacer de Scheme el lenguaje para
    426 extensiones estándar para GNU. No Common Lisp, porque era demasiado
    427 voluminoso. La idea era tener un intérprete Scheme diseñado para ser
    428 enlazado en las aplicaciones de la misma manera que se enlazaba
    429 TCL. Entonces lo recomendaríamos como el paquete para extensiones
    430 prefererido para todos los programas GNU.</p>
    431 
    432 <p>Usted puede obtener un beneficio interesante del uso de un lenguaje tan
    433 potente como un dialecto de Lisp como su lenguaje primario de extensión:
    434 puede implementar otros lenguajes traduciéndolos a su lenguaje primario. Si
    435 su lenguaje primario es TCL, usted no podrá implementar Lisp fácilmente
    436 mediante su traducción a TCL. Pero si su lenguaje primario es Lisp, no es
    437 tan difícil implementar otros lenguajes traduciéndolos. Nuestra idea era que
    438 si cada aplicación extensible admitía Scheme, usted podría escribir una
    439 implementación de TCL o Python o Perl en Scheme que tradujera los programas
    440 en esos lenguajes a Scheme. Entonces, usted podría cargar su traductor en
    441 cualquier aplicación y extender dicha aplicación usando su lenguaje
    442 favorito.</p>
    443 
    444 <p>Mientras los lenguajes de extensión sean débiles, los usuarios sólo pueden
    445 usar los lenguajes proporcionados por el programador. Lo que significa que a
    446 quien le guste utilizar un lenguaje de programación determinado tiene que
    447 competir por la elección de los diseñadores de aplicaciones diciendo «por
    448 favor, programador, ponga mi lenguaje en su aplicación, no el lenguaje de
    449 aquél.». Después los usuarios no tienen ninguna opción, la aplicación viene
    450 con un lenguaje y tienen que quedarse con él. Pero cuando dispone de un
    451 lenguaje potente que puede implementar otros mediante la traducción, da al
    452 usuario la posibilidad de elegir el lenguaje y ya no hay necesidad de una
    453 guerra de lenguajes. Esto es lo que esperamos que haga «Guile», nuestro
    454 intérprete Scheme. El verano pasado tuvimos a una persona trabajando en la
    455 finalización de un traductor de Python a Scheme. No sé si ya está
    456 completamente terminado, pero cualquiera que esté interesado en este
    457 proyecto, por favor póngase en contacto. Este es nuestro plan para el
    458 futuro.</p>
    459 
    460 <p>Esta charla no es sobre software libre, pero déjenme comentarles brevemente
    461 lo que significa. Software libre no se refiere al precio<sup><a
    462 href="#TransNote1" id="IniTransNote1">1</a></sup>, no significa que usted lo
    463 obtiene gratis (puede haber pagado por una copia, o haberla obtenido
    464 gratis.). Lo que significa es que usted tiene libertad como usuario. Lo
    465 fundamental es que es libre de ejecutar el programa, libre de estudiar qué
    466 hace, libre de modificarlo para adaptarlo a sus necesidades, libre de
    467 redistribuir las copias de otros y libre de publicar versiones mejoradas,
    468 ampliadas. Esto es lo que significa software libre. Si utiliza un programa
    469 que no es libre, pierde una libertad crucial, así que no lo haga nunca.</p>
    470 
    471 <p>El propósito del proyecto GNU es hacer más fácil para la gente rechazar el
    472 software que no sea libre, pisotea libertades y domina usuarios,
    473 proporcionándole software libre para sustituirlo. Para aquellos que no
    474 tienen el valor moral de rechazar el software que no es libre cuando hacerlo
    475 representa un inconveniente práctico, lo que intentamos hacer es ofrecer una
    476 alternativa libre de forma que puedan mudarse a la libertad de forma más
    477 ordenada y con menos sacrificios en términos prácticos. Cuanto menor el
    478 sacrificio, mejor. Queremos hacer más fácil vivir en libertad, cooperar.</p>
    479 
    480 <p>Es una cuestión de libertad para cooperar. Solemos pensar en la libertad y
    481 en la cooperación con la sociedad como si fueran opuestos. Pero aquí están
    482 del mismo lado. Con software libre es libre de cooperar con otros así como
    483 libre de ayudarse a usted mismo. Con software que no es libre, alguien le
    484 está dominando y está manteniendo dividida a la gente. No se le permite
    485 compartir con el resto, no es libre de cooperar ni de ayudar a la sociedad,
    486 como tampoco es libre de ayudarse a usted mismo. Divididos y desamparados es
    487 como se encuentran los usuarios de software que no es libre.</p>
    488 
    489 <p>Hemos producido una enorme variedad de software libre. Hemos hecho lo que la
    490 gente decía que nunca lograríamos hacer; tenemos dos sistemas operativos de
    491 software libre. Tenemos muchas aplicaciones y, obviamente, todavía tenemos
    492 mucho camino por recorrer. Así que necesitamos su ayuda. Me gustaría
    493 pedirles que colaboraran como voluntarios para el proyecto GNU; ayúdennos a
    494 desarrollar software libre para más tareas. Echen un vistazo a <a
    495 href="/help/help.html">gnu.org/help</a> para encontrar sugerencias sobre
    496 cómo ayudar. Si quieren hacer algún pedido, hay un enlace disponible en la
    497 página principal. Si quieren leer sobre cuestiones filosóficas, miren en
    498 /philosophy. Si están buscando el software libre disponible, miren en
    499 /directory, donde se listan alrededor de 1900 paquetes en la actualidad (lo
    500 cual es una fracción de todo el software libre disponible ahí fuera). Por
    501 favor, escriban más software y contribuyan. Mi libro de ensayos, «<span
    502 style="font-style:italic,">Free Software and Free Society</span>» se
    503 encuentra a la venta y puede adquirirse en www.gnu.org&#8239;<a
    504 href="#foot-9">[9]</a><sup><a href="#TransNote2"
    505 id="IniTransNote2">2</a></sup>. ¡Feliz hacking!</p>
    506 <div class="column-limit"></div>
    507 
    508 <h3 class="footnote">Notas</h3>
    509 <ol>
    510 <li id="foot-1">Guy Steele diseñó el conjunto de órdenes simétrico original de Emacs; luego,
    511 él y yo empezamos a implementar Emacs (sobre TECO), pero, tras una larga
    512 sesión conjunta de desarrollo, Steele empezó a distanciarse, así que yo
    513 finalicé Emacs. Otros, entre los que destacan Eugene C. Cicciarelli y Mike
    514 McMahon, contribuyeron más tarde de forma sustancial.</li>
    515 
    516 <li id="foot-2">Bernie Greenberg dice que Dan Weinreb implementó Emacs para la Máquina Lisp
    517 antes de que Greenberg lo implementara para Multics. Pido disculpas por el
    518 error. </li>
    519 
    520 <li id="foot-3">El plan de Greenblatt, según lo entendía yo, era contratar a la gente del
    521 laboratorio a tiempo parcial, de forma que pudieran seguir trabajando en el
    522 Laboratorio de Inteligencia Artificial. En cambio, Symbolics les contrató a
    523 jornada completa, así que dejaron de trabajar en el MIT.</li>
    524 
    525 <li id="foot-4">Las circunstancias de este plan, que no expuse explícitamente en la charla,
    526 fueron las siguientes: durante un periodo inicial los hackers que habían
    527 dejado el Laboratorio de Inteligencia Artificial, tanto los que trabajaban
    528 para Symbolics como los que lo hacían para LMI, continuaron aportando al
    529 sistema de la máquina Lisp del MIT sus modificaciones, a pesar de que el
    530 contrato no lo exigía. El plan de Symbolics era provocar unilateralmente la
    531 ruptura de esta cooperación.</li>
    532 
    533 <li id="foot-5">No era que me preocupara especialmente el destino de LMI, sino más bien que
    534 no quería que Symbolics saliera vencedora gracias a haber agredido como lo
    535 hizo al Laboratorio de Inteligencia Artificial.</li>
    536 
    537 <li id="foot-6">Esta afirmación ha sido malinterpretada atribuyéndole el significado de que
    538 nunca miré el código de Symbolics. En realidad dice que sí lo hice, al
    539 principio. El código fuente de Symbolics estaba disponible en el MIT, por lo
    540 tanto yo podía leerlo, y al principio era así como me enteraba de sus
    541 modificaciones.
    542 
    543 <p>Pero eso significaba que tenía que hacer un esfuerzo especial para resolver
    544 cada problema de forma diferente, para evitar que mi código fuera una copia
    545 del código de Symbolics. Pasado un tiempo, llegué a la conclusión de que era
    546 mejor no mirarlo. De esa forma podía escribir el código de la forma que
    547 considerara mejor sin preocuparme de lo que contenía el código de Symbolics.</p></li>
    548 
    549 <li id="foot-7">En una ocasión Symbolics se quejó al MIT de que mi trabajo, al frustrar sus
    550 planes, le había costado un millón de dólares.</li>
    551 
    552 <li id="foot-8">No me molesta si una función muy compleja y avanzada toma parámetros de
    553 palabras clave. Lo que me molesta es ponerlas en funciones simples y básicas
    554 como «member».</li>
    555 
    556 <li id="foot-9">En 2021, este libro (en inglés) puede adquirirse en <a
    557 href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition">GNU
    558 Press</a>.</li>
    559 </ol>
    560 </div>
    561 
    562 <div class="translators-notes">
    563 
    564 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
    565 <b>Notas del traductor</b>:
    566 <ol>
    567 <li id="TransNote1">Software Libre es la traducción de <span
    568 style="font-style:italic;">Free Software</span>. Aquí se hace referencia al
    569 doble significado del término inglés <span
    570 style="font-style:italic;">Free</span>, que puede significar tanto «libre»
    571 como «gratis». <a href="#IniTransNote1" >Regresar al texto</a>.</li>
    572 <li id="TransNote2">Existe una traducción del libro publicada en España por
    573 la editorial Traficantes de Sueños. <a href="#IniTransNote2">Regresar al
    574 texto</a>.</li></ol></div>
    575 </div>
    576 
    577 <!-- for id="content", starts in the include above -->
    578 <!--#include virtual="/server/footer.es.html" -->
    579 <div id="footer" role="contentinfo">
    580 <div class="unprintable">
    581 
    582 <p>Envíe sus consultas acerca de la FSF y GNU a <a
    583 href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Existen también <a
    584 href="/contact/">otros medios para contactar</a> con la FSF. <br /> Para
    585 avisar de enlaces rotos y proponer otras correcciones o sugerencias,
    586 diríjase a <a
    587 href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
    588 
    589 <p>
    590 <!-- TRANSLATORS: Ignore the original text in this paragraph,
    591         replace it with the translation of these two:
    592 
    593         We work hard and do our best to provide accurate, good quality
    594         translations.  However, we are not exempt from imperfection.
    595         Please send your comments and general suggestions in this regard
    596         to <a href="mailto:web-translators@gnu.org">
    597 
    598         &lt;web-translators@gnu.org&gt;</a>.</p>
    599 
    600         <p>For information on coordinating and contributing translations of
    601         our web pages, see <a
    602         href="/server/standards/README.translations.html">Translations
    603         README</a>. -->
    604 El equipo de traductores al español se esfuerza por ofrecer traducciones
    605 fieles al original y de buena calidad, pero no estamos libres de cometer
    606 errores.<br /> Envíe sus comentarios y sugerencias sobre las traducciones a
    607 <a
    608 href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
    609 </p><p>Consulte la <a href="/server/standards/README.translations.html">Guía
    610 para las traducciones</a> para obtener información sobre la coordinación y
    611 el envío de traducciones de las páginas de este sitio web.</p>
    612 </div>
    613 
    614 <!-- Regarding copyright, in general, standalone pages (as opposed to
    615      files generated as part of manuals) on the GNU web server should
    616      be under CC BY-ND 4.0.  Please do NOT change or remove this
    617      without talking with the webmasters or licensing team first.
    618      Please make sure the copyright date is consistent with the
    619      document.  For web pages, it is ok to list just the latest year the
    620      document was modified, or published.
    621      
    622      If you wish to list earlier years, that is ok too.
    623      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    624      years, as long as each year in the range is in fact a copyrightable
    625      year, i.e., a year in which the document was published (including
    626      being publicly visible on the web or in a revision control system).
    627      
    628      There is more detail about copyright years in the GNU Maintainers
    629      Information document, www.gnu.org/prep/maintain. -->
    630 <p>Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p>
    631 
    632 <p>Esta página está bajo licencia <a rel="license"
    633 href="http://creativecommons.org/licenses/by-nd/4.0/deed.es_ES">Creative
    634 Commons Reconocimiento-SinObraDerivada 4.0 Internacional</a>.</p>
    635 
    636 <!--#include virtual="/server/bottom-notes.es.html" -->
    637 <div class="translators-credits">
    638 
    639 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
    640 <span style="text-weight:bold;">Traducción</span>: Rafa Pereira, julio 2009.</div>
    641 
    642 <p class="unprintable"><!-- timestamp start -->
    643 Última actualización:
    644 
    645 $Date: 2021/11/03 16:00:57 $
    646 
    647 <!-- timestamp end -->
    648 </p>
    649 </div>
    650 </div>
    651 <!-- for class="inner", starts in the banner include -->
    652 </body>
    653 </html>