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]   简体中文 [zh-cn]  

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

La trampa de JavaScript

por Richard Stallman

Sin darse cuenta, usted puede estar utilizando a diario en el navegador programas que no son libres.

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

En la comunidad del software libre estamos familiarizados con el hecho de que los programas que no son libres maltratan a los usuarios. Algunos de nosotros defendemos nuestra libertad rechazando todo software privativo en nuestros ordenadores. Otros muchos consideran que la falta de libertad en un programa es un serio defecto.

Muchos usuarios son conscientes de que este problema concierne a los accesorios que los navegadores ofrecen instalar, ya que estos pueden ser libres o no. Correcto, pero los navegadores ejecutan además otros programas que no son libres y sobre los que no nos preguntan ni nos avisan, programas que las páginas web contienen o enlazan. Tales programas están mayoritariamente escritos en JavaScript, aunque también se usan otros lenguajes.

JavaScript (oficialmente denominado ECMAScript, aunque pocos emplean 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 continúan usando JavaScript de aquella manera, mientras que otros lo usan para programas mayores que realizan operaciones importantes. Por ejemplo, Google Docs trata de descargar en el equipo del usuario un programa JavaScript de medio megabyte y tan compactado que podríamos llamarlo «Obscurscript», ya que se presenta sin comentarios, casi sin espacios y con 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 compactado no es código fuente, y en tal caso el verdadero código fuente no está disponible para el usuario.

Además de no ser libres, muchos de estos programas son malware, ya que espían al usuario. Aún peor, algunos sitios web utilizan servicios que registran todas las acciones del usuario mientras mira la página. Estos servicios «redactan» los registros supuestamente excluyendo ciertos datos sensibles que el sitio no debería obtener. Pero incluso si funcionan de forma fiable, el único propósito de estos servicios es proporcionar al sitio web otros datos personales que no debería tener.

Normalmente, los navegadores no avisan cuando cargan programas JavaScript. Algunos tienen una opción para desactivar JavaScript totalmente, pero incluso si somos conscientes de este problema, nos llevaría mucho trabajo identificar y bloquear los programas que no son libres ni tampoco triviales. 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.

Un programa JavaScript se puede publicar como software libre distribuyendo el código fuente bajo una licencia de software libre. Si el programa es autónomo (si su funcionamiento y su propósito son independientes de la página que lo contiene), no hay problema: se puede copiar y guardar como archivo en el ordenador, se modifica luego ese archivo y se abre con un navegador para ejecutarlo. Pero se trata de un caso poco habitual.

Los programas JavaScript casi siempre están pensados para una página o sitio web específico cuyo funcionamiento depende de ellos. Surge entonces otro problema: incluso si el código fuente del programa está disponible, los navegadores no le ofrecen al usuario un modo 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 que los sitios web utilizan para los programas que envían al usuario. Flash admite la programación mediante una variante ampliada de JavaScript. Si alguna vez disponemos de un reproductor libre para Flash lo bastante completo, tendremos que vérnoslas con el problema de los programas Flash que no son libres. Es probable que Silverlight cree un problema similar a Flash, solo que peor, ya que Microsoft lo usa como plataforma para códecs que no son libres. Un reemplazo libre para Silverlight no cumplirá su función en el mundo libre a menos que venga de serie con códecs de recambio libres.

Los applets Java también se ejecutan en el navegador, y plantean problemas similares. En general, cualquier sistema de applet presenta problemas de este tipo. Disponer de un entorno de ejecución libre para un applet no hace sino aplazar el 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, aunque desde 2016 CSS no constituye un serio problema para la libertad de los usuarios.

Se ha desarrollado un potente movimiento para reclamar que los sitios web empleen solo formatos y protocolos libres (algunos los llaman «abiertos»); esto es, aquellos cuya documentación sea pública y que cualquiera sea libre de implementar. Con la presencia de programas en las páginas web, este criterio es necesario, pero no suficiente. El propio JavaScript, en cuanto formato, es libre, y el uso de JavaScript en un sitio web no es necesariamente algo malo. Sin embargo, como hemos visto antes, tampoco es siempre correcto. Cuando el sitio transmite un programa al usuario, no basta con que el programa esté escrito en un lenguaje documentado y sin trabas, sino que además el programa mismo debe ser libre. «Transmitir al usuario únicamente programas libres» debe ser uno de los criterios que definen el comportamiento apropiado de un sitio web.

La carga y ejecución silenciosa de programas que no son libres es uno de los diversos problemas que presentan las «aplicaciones web». La expresión «aplicación web» se acuñó para obviar la distinción fundamental entre el software que se entrega a los usuarios y el que se ejecuta en un servidor. Puede referirse a un programa cliente especializado que se ejecuta en un navegador, puede referirse a un software especializado del servidor, o puede referirse a un programa cliente especializado que opera mano a mano con software especializado del servidor. La parte cliente y la parte servidor plantean problemas éticos diferentes, aun cuando estén tan integradas que se pueda considerar que forman parte de un solo programa. Este artículo se ocupa solo del software de la parte cliente. Tratamos lo referente al servidor por separado.

En la práctica, ¿cómo podemos afrontar el problema de la presencia en sitios web de programas Javascript que no son libres ni triviales? En primer lugar, no ejecutarlos.

¿A qué nos referimos cuando decimos que «no es trivial»? Es una cuestión de grado, por lo que no se trata de buscar una única respuesta correcta, sino de ofrecer un criterio sencillo que dé buenos resultados.

Nuestra propuesta provisional es considerar que un programa escrito en JavaScript no es trivial si se cumplen las siguientes condiciones:

¿Cómo hacemos para determinar si el código JavaScript es libre? En un artículo aparte proponemos un método para que un programa JavaScript que no sea trivial inserto en una página web indique la URL donde se encuentra su código fuente, y también su licencia, mediante comentarios estilizados.

Por último, tenemos que modificar los navegadores libres para que detecten y bloqueen el código JavaScript en las páginas web cuando no sea libre ni trivial. 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 Firefox.

Los usuarios de navegadores necesitan una funcionalidad fácil de usar que especifique el código JavaScript a utilizar en lugar del que se encuentre en una página dada (el código especificado podría ser un reemplazo completo o una versión modificada del programa JavaScript libre de esa página). Greasemonkey está cerca de poder hacerlo, pero no lo suficiente, pues no garantiza la modificación del código JavaScript de la página antes de que el programa comience a ejecutarse. Funciona si se utiliza un proxy local, pero esto es demasiado incómodo como para considerarlo una solución real. Tenemos que desarrollar un procedimiento que sea fiable y cómodo, así como sitios web para compartir los cambios. El Proyecto GNU desearía recomendar sitios dedicados únicamente a cambios libres.

Estas funcionalidades permitirán que un programa JavaScript que se incluya en una página web sea libre en un sentido real y práctico. JavaScript ya no será un obstáculo para nuestra libertad, no más de lo que C y Java lo son ahora. Tendremos la posibilidad de rechazar e incluso reemplazar los programas JavaScript que no sean libres ni triviales, tal y como ahora rechazamos y reemplazamos los paquetes privativos que se ofrecen para su instalación convencional. A partir de ese momento podremos iniciar nuestra campaña para que los sitios web liberen JavaScript.

Entretanto, existe un caso en el que es aceptable ejecutar un programa JavaScript que no es libre: cuando se hace para enviar una queja a los administradores del sitio señalándoles que deberían liberar o eliminar el código JavaScript de la página. No dude en habilitar temporalmente JavaScript con esa finalidad, pero recuerde desactivarlo después.

Webmasters: existen varias maneras de indicar la licencia de los programas 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 señalarme este problema.

VOLVER ARRIBA


[Logotipo de la FSF]«La FSF es una organización de ámbito mundial cuyo objetivo es promover la libertad de los usuarios de ordenadores. Defendemos los derechos de todos los usuarios de software.»

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.