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>< ></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 <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  <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  <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 <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 <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 <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  <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 <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 <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"><gnu@gnu.org></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"><webmasters@gnu.org></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 <web-translators@gnu.org></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"><web-translators@gnu.org></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 © 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>