English [en]   العربية [ar]   español [es]   فارسی [fa]   français [fr]   hrvatski [hr]   italiano [it]   日本語 [ja]   lietuvių [lt]   Nederlands [nl]   polski [pl]   português do Brasil [pt-br]   русский [ru]   українська [uk]  

Los miembros de la Free Software Foundation son su fuerza. ¡Ayúdenos a lograr nuestra meta de 700 nuevos miembros o haga una donación antes del 31 de diciembre!

Asociarse

80.055 $
450.000 $

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

La trampa JavaScript

por Richard Stallman

Por medio de su navegador, sin darse cuenta, puede estar utilizando a diario programas que no son libres.

Webmasters: existen varias maneras de indicar la licencia de los programas de JavaScript en un sitio web.

En la comunidad del software libre, que los programas que no son libres maltratan a sus usuarios es una idea familiar. Algunos de nosotros defendemos nuestra libertad rechazando cualquier software privativo en nuestros ordenadores. Otros muchos reconocen que el hecho de que no sea libre es un serio defecto en un programa.

Muchos usuarios son conscientes de que esto también es aplicable a los accesorios que los navegadores ofrecen instalar. Pero los navegadores ejecutan otros programas que no son libres sobre los que no te preguntan ni 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 ornamentales en páginas web, tales como bonitas pero innecesarias características de navegación y maquetación. Era aceptable considerarlos como meras extensiones del lenguaje de etiquetas HTML, más que como verdadero software, y despreocuparse del asunto.

Muchos sitios todavía usan JavaScript de este modo, pero algunos lo usan para programas importantes que hacen grandes tareas. Por ejemplo, Google Docs trata de descargar en el equipo del usuario un programa JavaScript de medio megabyte, en una forma compacta que podríamos llamar Obscurscript, ya que no tiene comentarios, apenas espacios en blanco, y nombres de método que no tienen más que una letra. 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.

Además de tratarse de software que no es libre, muchos de estos programas maliciosos, ya que espían al usuario.

Normalmente, los navegadores no avisan cuando cargan programas JavaScript. Algunos tienen una opción para desactivar JavaScript totalmente, pero incluso si es consciente de este problema le llevaría mucho trabajo identificar y bloquear los programas no triviales que no son libres. No obstante, incluso en la comunidad del software libre la mayoría de los usuarios no son conscientes del problema, y el silencio de los navegadores suele ocultarlo.

Es posible publicar un programa de JavaScript como software libre, distribuyendo el código fuente con una licencia de software libre. Si el programa es autónomo (si su funcionamiento y su propósito son independientes de la página en la que se encuentra), no hay problema: puede copiarlo en un archivo de su equipo, modificarlo y abrir ese archivo con un navegador para ejecutarlo. Pero se trata de un caso poco habitual.

Habitualmente, los programas de JavaScript están pensados para funcionar en una página o sitio web en particular, y la página o el sitio dependen de ellos para su funcionamiento. Entonces surge otro problema: incluso si el código fuente del programa está disponible, los navegadores libres no le ofrecen un modo al usuario de ejecutar su propia versión modificada en vez de la original cuando visita esa página o sitio. El efecto es comparable a la «tivoización», aunque en principio no tan difícil de solucionar.

JavaScript no es el único lenguaje utilizado por sitios web para programas enviados al usuario. Flash soporta programación a través de una variante apliada de JavaScript; si alguna vez disponemos de un reproductor de Flash completamente libre, tendremos que vérnoslas con el problema de los programas de Flash que no son libres. Parece probable que Silverlight cree un problema similar a Flash; solo que peor, ya 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 suscitan cuestiones similares. En general, cualquier sistema de applet plantea este tipo de problema. Disponer de un entorno de ejecución libre para un applet no evita que al final no encontramos con ese problema.

En teoría se puede programar en HTML y CSS, pero en la práctica esta posibilidad es limitada y engorrosa; ya solo conseguir que haga algo es toda una hazaña. Tales programas deberían ser libres, pero en la actualidad CSS no constituye un serio problema para la libertad de los usuarios.

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». La expresión «aplicación web» se acuñó para obviar la distinción fundamental entre el software que se entrega a usuarios y el que se ejecuta en un 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? En un artículo aparte proponemos un método por medio del cual 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 está incluido en IceCat y disponible como aplicación complementaria para 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.

Webmasters: existen varias maneras de indicar la licencia de los programas de JavaScript en un sitio web.

Agradecimientos: Gracias a Matt Lee y John Resig por su ayuda en la concreción del criterio que proponemos, y a David Parunakian por hacerme reparar en este problema.

VOLVER ARRIBA


[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.