Hola Habr! ¿Te presento la traducción del artículo Julie Marchant Fix o Kill JavaScript instalado automáticamente?
El ensayo de Richard Stallman, The Javascript Trap, señala que las personas ejecutan programas propietarios que se instalan automáticamente en silencio en sus navegadores todos los días. De hecho, le restó importancia al problema. La mayoría de los usuarios no solo ejecutan programas patentados a diario simplemente navegando por la web, sino que ejecutan docenas o incluso cientos de tales programas todos los días. La trampa de JavaScript es extremadamente real y prolífica. Se cree que se violará el trabajo con sitios sin estas extensiones HTML no estándar, generalmente propietarias, que los navegadores web ni siquiera ofrecen la oportunidad obvia de deshabilitar JavaScript. Se argumenta que deshabilitar JavaScript solo generará confusión.
Obviamente, necesitamos resolver este problema. Sin embargo, al centrarse en si los scripts son "triviales" o gratuitos, el Sr. Stallman pierde un punto importante: la instalación silenciosa automática del software en sí es el problema principal. El hecho de que en su mayor parte el software es propietario es solo un efecto secundario.
En respuesta al artículo del Sr. Stallman, se desarrolló una extensión para el navegador Firefox y sus derivados llamada LibreJS. Esta extensión analiza automáticamente todo JavaScript en la página para determinar si es trivial o libre, y si una de estas condiciones es verdadera, los scripts se ejecutan, de lo contrario se bloquean. Aprecio el proyecto LibreJS y lo que está tratando de hacer. Pero creo que LibreJS es fundamentalmente el enfoque equivocado para resolver el problema.
LibreJS está fallando en este momento, porque requiere un formato que no se reconoce en ningún lado, pero en teoría se puede resolver en el futuro, así que supongamos que todo está en orden. Supongamos que LibreJS es tan exitoso que obliga a la mayoría de Internet a lanzar scripts bajo licencias gratuitas y describir las licencias en un formato que LibreJS entiende.
Parece excelente a primera vista, pero de esto se deduce que el software todavía se instala silenciosamente en nuestros navegadores todos los días. La única diferencia es que LibreJS considera que los programas son gratuitos.
No quiero minimizar la importancia de garantizar que todos los programas sean gratuitos. Sin embargo, cuando cualquier software se instala automáticamente en nuestras computadoras a pedido de un tercero, esto hace que sea imposible ejercer la libertad. Se supone que desea que todos estos programas JavaScript, que pueden hacer fácilmente cientos de nuevos scripts todos los días, se ejecuten en su computadora, generalmente antes de que incluso pueda verificar su código fuente.
Peor aún, el sistema de instalación desatendida de JavaScript solo instala el software temporalmente para ejecutarse solo una vez. De hecho, cada vez que el servidor actualiza JavaScript que se envía a los navegadores web, esta actualización se propaga a los usuarios. Incluso si el script es gratuito, parece tener una puerta trasera incorporada.
Esto es muy similar al caso de la tivoización, cuando teóricamente tienes la libertad de controlar lo que hace el programa, pero no puedes hacerlo en la práctica debido a las circunstancias. No es suficiente tener un control teórico. El control real también es necesario. En el caso de JavaScript, esta falta de control no es el resultado de una intención maliciosa, sino más bien el resultado de la suposición descuidada de los navegadores web de que el usuario desea ejecutar cada script que una página web puede ofrecer. Este no es necesariamente el caso. Sería como si Windows se instalara en mi computadora cada vez que leí un artículo que recomienda usar Windows o si el blog hablara de lo bueno que es Chrome, causaría que Chrome se instale automáticamente en mi sistema.
Entonces, ¿qué podemos hacer? Sé dos posibles soluciones.
Solución 1: arreglar JavaScript
La primera solución posible y más obvia es cambiar el comportamiento de los navegadores web con respecto a las solicitudes de software de JavaScript. Sugiero que para que el sistema sea aceptable, DEBEN cumplirse todas las siguientes condiciones:
- El navegador debe instalar el código JavaScript constantemente y solo cuando el usuario lo permita explícitamente de alguna manera.
- El navegador debe proporcionar al usuario la oportunidad de instalar cualquier script arbitrario, y no solo el script solicitado por la página web.
- El navegador no debería actualizar automáticamente el código JavaScript, a menos que el usuario haya indicado que debería actualizarse, y el usuario debería poder elegir de dónde provienen dichas actualizaciones.
Notará que el descubrimiento automático de licencias no está incluido en ninguno de estos puntos. Entonces, ¿cómo obtiene el usuario solo JavaScript gratuito sin verificar manualmente cada archivo fuente? La solución es bastante simple: como cualquier otro software libre. Confío en que los desarrolladores de Trisquel incluyan solo programas gratuitos sin características maliciosas en el repositorio. Por cierto, los desarrolladores de Trisquel pueden proteger a los usuarios del malware , sea propietario o no; LibreJS no puede. Del mismo modo, podemos crear y mantener un repositorio de código JavaScript gratuito.
Para que esto funcione, los programas JavaScript instalados también deberían funcionar en todas las páginas web que lo soliciten, y no solo en una página. En cuanto al código JavaScript ya instalado, la posibilidad de su uso se puede determinar obteniendo un hash de versiones minimizadas de scripts instalados y luego recibiendo un hash de los scripts solicitados después de su minificación de la misma manera. Si los hashes no coinciden, puede verificar los nombres de los archivos de comandos para una coincidencia completa o parcial y se le puede preguntar al usuario si se deben usar estos scripts. También será útil para algún tipo de base de datos en el navegador del usuario, identificando sitios en los que se pueden usar ciertos scripts.
Creo que este enfoque requerirá un esfuerzo considerable y esa es probablemente la razón por la cual el desarrollador de LibreJS no intentó hacer esto. No ayuda que el logro de la fiabilidad implique un trabajo continuo que se mantenga al ritmo de las páginas cambiantes.
Solución 2. Eliminar JavaScript
Cuando sugerí algo como la Solución 1 en la lista de correo bug-gnuzilla, una de las respuestas señaló que había una solución mucho más simple: en lugar de tratar de arreglar JavaScript, podríamos deshabilitar completamente la ejecución de JavaScript en nuestros navegadores (en otras palabras matar a javascript). Por supuesto, me refiero a JavaScript instalado automáticamente . Por ejemplo, no hay nada de malo en usar JavaScript para desarrollar extensiones de Firefox. Las secuencias de comandos y extensiones personalizadas pueden incluso diseñarse para reemplazar importantes códigos JavaScript propietarios.
Sin embargo, esta solución no está exenta de problemas. En particular, esto requiere un tremendo cambio social, aunque menos de lo que LibreJS intenta hacer. Los navegadores que eliminan la compatibilidad con JavaScript pueden ayudar en este sentido, pero hay un problema con el huevo y la gallina en el sentido de que los navegadores sin compatibilidad con JavaScript se considerarán inferiores, mientras que muchos sitios web requieren scripts para funcionar.
Uno de los pasos intermedios para lograr esto puede ser un navegador que admita JavaScript, pero de forma predeterminada JS debe estar deshabilitado y ofrecer al usuario una manera fácil de habilitar JavaScript temporalmente en una página. Por lo tanto, el usuario ganará experiencia sin usar JavaScript, pero aún podrá usar JavaScript para las páginas en las que se necesita, sin ningún inconveniente que incomode al navegador. Incluso habría un efecto secundario agradable para los usuarios: su trabajo en Internet se volvería más fluido. Muchos sitios web tienen scripts enormes que puedes evitar por completo simplemente deshabilitando JavaScript.
Conclusión
Cada uno de estos enfoques tiene fortalezas y debilidades.
La primera solución puede dar buenos resultados de inmediato para sitios como Diáspora y Reddit, que requieren código JavaScript, pero en su mayoría gratuitos. Esto probablemente no conducirá a cambios significativos en Internet, pero esto no es necesario para el trabajo. Sin embargo, esto requerirá algo de trabajo para configurar correctamente el comportamiento del navegador con respecto a JavaScript, y habría mucho más trabajo para mantener un repositorio de programas de JavaScript gratuitos.
La segunda solución es bastante similar a lo que LibreJS está tratando de hacer actualmente, aunque en una escala mucho más pequeña. Depende del cambio en Internet: convencer a la mayoría de los desarrolladores web de que dejen de usar el código JavaScript. Si esta solución funciona, entonces el efecto puede ser impresionante. Por otro lado, esta solución puede fallar fácilmente o simplemente conducir a otro método emergente de instalación automática de software en los navegadores de los usuarios.
No estoy seguro de cuál es mejor, pero LibreJS no es ni una buena solución, ni siquiera un paso en la dirección correcta. Mientras que un navegador gratuito que corrige correctamente JavaScript está disponible, cualquiera que quiera libertad en la informática debe desactivar todas las acciones habituales de JavaScript en sus navegadores, incluso si el código es gratuito, y los desarrolladores web que respetan la libertad de sus usuarios deben eliminar todo el JavaScript requerido en sus sitios