English [en]   العربية [ar]   español [es]   فارسی [fa]   français [fr]   hrvatski [hr]   italiano [it]   日本語 [ja]   polski [pl]   русский [ru]   українська [uk]  

En su lucha por la libertad de los usuarios, la Free Software Foundation ha sido guía y referente del movimiento del software libre a lo largo de los últimos treinta años.

Contribuya con una donación a mantener viva la llama, ayúdenos a lograr el objetivo de alcanzar los 450.000 dólares hasta el 31 de enero.

450 k
314 k hasta ahora

Esta es una traducción de la página original en inglés.

La trampa de JavaScript

por Richard Stallman

Puede estar ejecutando programas que no son libres en su ordenador cada día sin saberlo, a través de su navegador web.

En la comunidad del software libre, los usuarios están familiarizados con el maltrato de los programas que no son libres. Algunos de nosotros rechazamos totalmente instalar software privativo, y muchos otros consideran que se daña a un programa si no es libre. Muchos usuarios son conscientes que esta cuestión se aplica a las extensiones que los navegadores ofrecen instalar, debido a que pueden ser libres o no.

Pero los navegadores ejecutan otros programas que no son libres sobre los que no te preguntan o incluso no te avisan, programas que las páginas web contienen o enlazan. Estos programas están mayoritariamente escritos en JavaScript, aunque también se usan otros lenguajes.

JavaScript, oficialmente denominado ECMAScript (aunque pocos usan este nombre), al principio se usaba para pequeños detalles en páginas web, tales como bonitas pero innecesarias características de navegación y maquetación. Era aceptable considerarlo como meras extensiones del lenguaje de etiquetas HTML, en vez de como verdadero software. No constituía un problema significativo.

Muchos sitios todavía usan JavaScript de este modo, pero algunos lo usan para programas grandes que hacen largas tareas. Por ejemplo, Google Docs descarga en su máquina un programa JavaScript que pesa medio megabyte, en una forma compacta que podríamos llamar Obfuscript porque no tiene comentarios, ni casi espacios en blanco, y los nombre de método tienen una letra de largo. El código fuente de un programa es la forma preferida para modificarlo; el código compacto no es código fuente, y el código fuente real de este programa no está disponible para el usuario.

Los navegadores normalmente no avisan cuando cargan programas JavaScript. La mayoría tienen una opción para desactivar JavaScript totalmente, pero ninguno de ellos puede comprobar si los programas JavaScript son no triviales o si no son libres. Incluso si está al corriente de este asunto, tomaría considerables problemas identificar y después bloquear estos programas. Sin embargo, incluso en la comunidad del software libre la mayoría de los usuarios no están al corriente de la cuestión, el silencio de los navegadores tiende a ocultarlo.

Es posible publicar un programa JavaScript como software libre, distribuyendo el código fuente con una licencia de software libre. Pero incluso si el código fuente del programa está disponible, no hay un camino fácil para ejecutar su versión modificada en vez de la original. Los actuales navegadores libres no ofrecen una facilidad para ejecutar su propia versión modificada en vez de una entregada en la página. El efecto es comparable a la «tivoización», aunque no tan difícil de solucionar.

JavaScript no es el único lenguaje para sitios web con programas enviados al usuario. Flash soporta programación a través de una extendida variante de JavaScript. Necesitaremos estudiar el asunto de Flash para dar las recomendaciones apropiadas. Parece probable que Silverlight cree un problema similar a Flash; o peor, desde que Microsoft lo usa como una plataforma para codecs que no son libres. Un reemplazo libre para Silverlight no hará el mismo trabajo para el mundo libre a menos que venga de serie con codecs de recambio libres.

Los applets de Java también se ejecutan en el navegador, y conllevan cuestiones similares. En general, cualquier clase de sistema applet plantea este tipo de problema. Tener un entorno de ejecución libre para un applet solo nos lleva suficientemente lejos como para encontrar el problema.

Un fuerte movimiento ha desarrollado una motivación para que los sitios web se comuniquen solo a través de formatos y protocolos que son libres (algunos dirían «abiertos»), esto significa aquellos que la documentación se publique y que cualquiera sea libre de implementarla. Con la presencia de programas en páginas web, este criterio es necesario, pero no suficiente. JavaScript por sí mismo, como formato, es libre, y el uso de JavaScript en un sitio web no es necesariamente malo. Sin embargo, como ya hemos visto antes, ello tampoco es necesariamente aceptable. Cuando el sitio transmite un programa al usuario, no es suficiente que sea escrito en un lenguaje documentado y legible. Este programa debe ser libre también. «Sólo programas libres transmitidos al usuario» debe llegar a ser parte del criterio para el comportamiento apropiado de sitios web.

La silenciosa carga y ejecución de programas que no son libres es una entre varias cuestiones que surgen por las «aplicaciones web». El término «aplicación web» se diseñó para ignorar la distinción fundamental entre software entregado a usuarios y software ejecutándose en el servidor. Puede referirse a un programa cliente especializado ejecutándose en un navegador, puede referirse a software especializado en el servidor, puede referirse a un programa cliente especializado que trabaja mano a mano con software de servidor especializado. El lado cliente y el lado servidor traen diferentes cuestiones éticas, incluso si están tan integrados que se cuestiona que forme parte de un solo programa. Este artículo trata sólo la cuestión del software del lado cliente. Tratamos la cuestión del servidor de separadamente.

En términos prácticos, ¿cómo podemos tratar el problema de los programas hechos con JavaScript que no son libres en sitios web? El primer paso es no usarlos.

¿A qué nos referimos cuando decimos que «no es trivial»? Es cuestión gradual, se trata de diseñar un criterio simple que dé buenos resultados en lugar de buscar una única respuesta correcta.

La política que proponemos es considerar JavaScript como programa que no es trivial si:

¿Cómo hacemos para determinar si el código de JavaScript es libre? Al final de este artículo proponemos una convención por la que un programa escrito en JavaScript que no sea trivial en una página web, pueda declarar la URL donde se encuentra su código fuente, y también pueda declarar su licencia mediante comentarios estilizados.

Por último, tenemos que modificar los navegadores libres para que detecten y bloqueen el código JavaScript que no es libre en las páginas web. El programa LibreJS detecta y bloquea el código JavaScript que no es libre ni trivial en las páginas que se visitan. LibreJS es una aplicación complementaria para IceCat y IceWeasel (y Firefox).

Los usuarios de navegadores necesitan una conveniente facilidad para especificar el código JavaScript a utilizar en lugar del JavaScript que ya hay en cierta página (el código especificado podría ser el reemplazo total, o una versión modificada del programa libre escrito en JavaScript en esa página). Greasemonkey está cerca de poder hacerlo, pero no garantiza modificar el código antes que el programa comience a ejecutarse. Usando un proxy local funciona, pero es demasiado inconveniente para ser una solución real. Necesitamos construir una solución que sea confiable y conveniente, así como sitios para compartir los cambios. Al Proyecto GNU le gustaría recomendar sitios dedicados sólo cambios libres.

Estas funcionalidades harán posible que un programa escrito en JavaScript que se incluya en una página web sea libre en sentido real y práctico. JavaScript no será un largo obstáculo para nuestra libertad, no más que C y Java lo son ahora Seremos capaces de rechazar e incluso reemplazar los programas escritos en JavaScript que no sean libres y no sean triviales, tal y como ahora rechazamos y reemplazamos paquetes que no sean libres que son ofrecidos para su instalación de la forma convencional. Nuestra campaña para que sitios web liberen su JavaScript puede entonces empezar.

Mientras tanto, existe un caso en el que es aceptable ejecutar un programa JavaScript que no es libre: para enviar un reclamo a los administradores de un sitio diciéndoles que deberían liberar o eliminar el código JavaScript del sitio. Le rogamos que no dude en habilitar JavaScript temporalmente para esta finalidad, pero recuerde desactivarlo una vez que haya concluido.

Agradezco a Matt Lee y John Resig su ayuda en la definición de nuestro criterio propuesto. Y también a David Parunakian por hacerme conciente de este problema.

Apéndice A: convención para publicar programas JavaScript libres

Para referencias al correspondiente código fuente recomendamos


    // @source:

seguido por la URL. De esta manera se cumple con el requisito de la GPL de GNU sobre la distribución del código fuente. En caso de que los archivos fuente se encuentren en un sitio diferente, deberá gestionarlos adecuadamente. El código fuente es necesario para que un programa sea libre.

Para indicar la licencia del código JavaScript incluido en una página, recomendamos poner la notificación de licencia entre dos notas de esta forma:



    @licstart  Lo siguiente es la nota de licencia entera para el 
    código JavaScript en esta página.
    ...
    @licend  Lo anterior es la nota de licencia entera para el
    código JavaScript en esta página.

Por supuesto, todo esto estaría en un comentario de varias líneas.

La GPL de GNU, como muchas otras licencias de software libre, requiere que se distribuya una copia de la licencia con las formas de código fuente y binaria del programa. Sin embargo, la GPL de GNU es lo suficientemente larga para que incluirla en una página con un programa escrito en JavaScript pueda ser inconveniente. Puede eliminar este requisito, para el código del que sea titular de los derechos de autor con una aviso de licencia como el siguiente:


    Copyright (C) YYYY  Developer

    The JavaScript code in this page is free software: you can
    redistribute it and/or modify it under the terms of the GNU
    General Public License (GNU GPL) as published by the Free Software
    Foundation, either version 3 of the License, or (at your option)
    any later version.  The code is distributed WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

    As additional permission under GNU GPL version 3 section 7, you
    may distribute non-source (e.g., minimized or compacted) forms of
    that code without the copy of the GNU GPL normally required by
    section 4, provided you include this license notice and a URL
    through which recipients can access the Corresponding Source.

Doy las gracias a Jaffar Rumith por avisarme de esta cuestión.

Apéndice B: De qué manera los webmasters pueden publicar programas JavaScript libres

Si usted es el administrador y quiere implementar JavaScript libre en su sitio, publique de forma clara y sistemática toda la información sobre las licencias de esos archivos y el código fuente para ayudar a los visitantes a asegurarse de que están ejecutando software libre. Eso también le ayudará a usted a cumplir con cláusulas de las licencias.

Uno de los métodos que puede usar para publicar información sobre las licencias es el que describimos en la sección anterior, Apéndice A. En el artículo Etiquetas web para licencias de JavaScript describimos un segundo método que puede resultar más cómodo para bibliotecas con código JavaScript reducido, especialmente si usted no es el autor.

[Logotipo de la FSF]«Nuestra misión es preservar, proteger y promover la libertad de usar, estudiar, copiar, modificar y redistribuir programas de ordenador, así como defender los derechos de los usuarios de software libre.»

La Free Software Foundation es la principal organización que patrocina el Sistema Operativo GNU. Apoye a GNU y la FSF mediante la compra de manuales y otros artículos, uniéndose a la FSF como miembro asociado o haciendo una donación, ya sea directamente a la FSF o mediante Flattr.

volver arriba