Bonjour, Habr! Je vous présente la traduction de l'article Julie Marchant Corriger ou tuer le JavaScript installé automatiquement?
L'essai de Richard Stallman, The Javascript Trap, note que les gens exécutent des programmes propriétaires qui s'installent automatiquement et silencieusement dans leur navigateur tous les jours. En fait, il a considérablement minimisé le problème. Non seulement la plupart des utilisateurs exécutent quotidiennement des programmes propriétaires en naviguant sur le Web, mais ils exécutent chaque jour des dizaines, voire des centaines de ces programmes. Le piège JavaScript est extrêmement réel et prolifique. On pense que le travail avec les sites sera violé sans ces extensions HTML non standard, généralement propriétaires, que les navigateurs Web n'offrent même pas l'opportunité évidente de désactiver JavaScript. Il est soutenu que la désactivation de JavaScript ne fera que créer de la confusion.
De toute évidence, nous devons résoudre ce problème. Cependant, en se concentrant sur la question de savoir si les scripts sont "triviaux" ou gratuits, M. Stallman passe à côté d'un point important: l'installation automatique silencieuse du logiciel lui-même est le principal problème. Le fait que la plupart des logiciels soient propriétaires n'est qu'un effet secondaire.
En réponse à l'article de M. Stallman, une extension a été développée pour le navigateur Firefox et ses dérivés appelée LibreJS. Cette extension analyse automatiquement tout le JavaScript de la page pour déterminer s'il est trivial ou gratuit, et si l'une de ces conditions est vraie, les scripts sont exécutés, sinon ils sont bloqués. J'apprécie le projet LibreJS et ce qu'il essaie de faire. Mais je pense que LibreJS est fondamentalement la mauvaise approche pour résoudre le problème.
LibreJS échoue en ce moment car il nécessite un format qui n'est reconnu nulle part, mais théoriquement il peut être résolu à l'avenir, supposons donc que tout est en ordre. Supposons que LibreJS connaisse un tel succès qu'il force la majeure partie d'Internet à publier des scripts sous des licences gratuites et à décrire les licences dans un format que LibreJS comprend.
Cela semble génial à première vue, mais il en résulte que le logiciel est toujours installé discrètement dans nos navigateurs chaque jour. La seule différence est que LibreJS considère les programmes comme gratuits.
Je ne veux pas minimiser l'importance de garantir que tous les programmes sont gratuits. Cependant, lorsqu'un logiciel est automatiquement installé sur nos ordinateurs à la demande d'un tiers, cela rend impossible l'exercice de la liberté. On suppose que vous voulez que tous ces programmes JavaScript, qui peuvent facilement créer des centaines de nouveaux scripts chaque jour, soient exécutés sur votre ordinateur, généralement avant même de pouvoir vérifier leur code source.
Pire encore, le système d'installation sans assistance de JavaScript installe le logiciel temporairement pour ne s'exécuter qu'une seule fois. En fait, chaque fois que le serveur met à jour JavaScript qui est envoyé aux navigateurs Web, cette mise à jour est propagée aux utilisateurs. Même si le script est gratuit, il semble avoir une porte dérobée intégrée.
Ceci est très similaire au cas de la tivoisation, quand théoriquement vous avez la liberté de contrôler ce que fait le programme, mais vous ne pouvez pas le faire dans la pratique en raison des circonstances. Il ne suffit pas d'avoir un contrôle théorique. Un contrôle réel est également nécessaire. Dans le cas de JavaScript, ce manque de contrôle n'est pas le résultat d'une intention malveillante, mais plutôt le résultat de l'hypothèse imprudente des navigateurs Web que l'utilisateur souhaite exécuter tous les scripts qu'une page Web peut offrir. Ce n'est pas nécessairement le cas. Ce serait comme si Windows était installé sur mon ordinateur chaque fois que je lis un article recommandant d'utiliser Windows ou si le blog parlait de la qualité de Chrome, cela entraînerait l'installation automatique de Chrome sur mon système.
Alors, que pouvons-nous faire? Je connais deux solutions possibles.
Solution 1: corriger JavaScript
La première solution possible et la plus évidente consiste à modifier le comportement des navigateurs Web concernant les demandes de logiciels JavaScript. Je suggère que pour que le système soit acceptable, toutes les conditions suivantes DOIVENT être remplies:
- Le navigateur doit installer le code JavaScript en permanence et uniquement lorsque l'utilisateur l'autorise explicitement de quelque manière que ce soit.
- Le navigateur doit fournir à l'utilisateur la possibilité d'installer n'importe quel script arbitraire, et pas seulement le script demandé par la page Web.
- Le navigateur ne doit pas mettre à jour automatiquement le code JavaScript, sauf si l'utilisateur a indiqué qu'il doit être mis à jour, et l'utilisateur doit pouvoir choisir d'où proviennent ces mises à jour.
Vous remarquerez que la découverte automatique de licence n'est incluse dans aucun de ces points. Alors, comment l'utilisateur obtient-il uniquement du JavaScript gratuit sans vérifier manuellement chaque fichier source? La solution est en fait assez simple: comme tout autre logiciel gratuit. Je fais confiance aux développeurs Trisquel pour inclure uniquement des programmes gratuits sans fonctionnalités malveillantes dans le référentiel. Soit dit en passant, les développeurs de Trisquel peuvent protéger les utilisateurs contre les logiciels malveillants , qu'ils soient propriétaires ou non; LibreJS - ne peut pas. De même, nous pouvons créer et maintenir un référentiel de code JavaScript gratuit.
Pour que cela fonctionne, les programmes JavaScript installés doivent également fonctionner sur toutes les pages Web qui le demandent, et pas seulement sur une seule page. En ce qui concerne le code JavaScript déjà installé, la possibilité de son utilisation peut être déterminée en obtenant un hachage des versions minifiées des scripts installés, puis en recevant un hachage des scripts demandés après leur minification de la même manière. Si les hachages ne correspondent pas, vous pouvez vérifier les noms de fichier de script pour une correspondance complète ou partielle et il peut être demandé à l'utilisateur si ces scripts doivent être utilisés. Il sera également utile pour une sorte de base de données dans le navigateur de l'utilisateur, identifiant les sites sur lesquels certains scripts peuvent être utilisés.
Je pense que cette approche exigera des efforts considérables et c'est probablement pourquoi le développeur LibreJS n'a pas essayé de le faire. Cela n'aide pas que la réalisation de la fiabilité implique un travail continu en suivant le rythme des pages.
Solution 2. Tuez JavaScript
Lorsque j'ai suggéré quelque chose comme la solution 1 sur la liste de diffusion bug-gnuzilla, l'une des réponses a noté qu'il y avait une solution beaucoup plus simple: au lieu d'essayer de corriger JavaScript, nous pouvions désactiver complètement l'exécution de JavaScript dans nos navigateurs (en d'autres termes tuer javascript). Bien sûr, je veux dire JavaScript installé automatiquement . Par exemple, il n'y a rien de mal à utiliser JavaScript pour développer des extensions Firefox. Des scripts et des extensions personnalisés peuvent même être conçus pour remplacer un code JavaScript propriétaire important.
Cependant, cette solution n'est pas sans problèmes. En particulier, cela nécessite un énorme changement social, bien que moins que LibreJS essaie de faire. Les navigateurs qui suppriment la prise en charge de JavaScript peuvent aider à cet égard, mais il y a un problème avec le poulet et l'œuf dans le sens où les navigateurs sans prise en charge de JavaScript seront considérés comme inférieurs, tandis que de nombreux sites Web nécessitent des scripts pour fonctionner.
L'une des étapes intermédiaires pour y parvenir peut être un navigateur qui prend en charge JavaScript, mais par défaut, JS doit être désactivé, et donner à l'utilisateur un moyen simple d'activer temporairement JavaScript sur une seule page. Ainsi, l'utilisateur gagnera en expérience sans utiliser JavaScript, mais il pourra toujours utiliser JavaScript pour les pages sur lesquelles il est nécessaire, sans aucun inconvénient qui rend le navigateur inconfortable. Il y aurait même un effet secondaire agréable pour les utilisateurs - leur travail sur Internet deviendrait plus fluide. De nombreux sites Web ont d'énormes scripts gonflés que vous pouvez éviter complètement en désactivant simplement JavaScript.
Conclusion
Chacune de ces approches a ses forces et ses faiblesses.
La première solution peut donner de bons résultats tout de suite pour des sites comme Diaspora et Reddit, qui nécessitent du code JavaScript, mais surtout gratuit. Cela n'entraînera probablement pas de changements importants sur Internet, mais ce n'est pas nécessaire pour le travail. Cependant, cela nécessitera un certain travail pour configurer correctement le comportement du navigateur par rapport à JavaScript, et il y aurait beaucoup plus de travail pour maintenir un référentiel de programmes JavaScript gratuits.
La deuxième solution est assez similaire à ce que LibreJS essaie actuellement de faire, bien qu'à une échelle beaucoup plus petite. Cela dépend du changement sur Internet: convaincre la plupart des développeurs Web d'arrêter d'utiliser le code JavaScript. Si cette solution fonctionne, l'effet peut être impressionnant. D'un autre côté, cette solution peut facilement échouer, ou simplement conduire à une autre méthode émergente d'installation automatique de logiciels dans les navigateurs des utilisateurs.
Je ne sais pas ce qui est le mieux, mais LibreJS n'est ni une bonne ni une bonne solution de contournement, ni même un pas dans la bonne direction. Tant qu'un navigateur gratuit qui corrige correctement JavaScript devient disponible, toute personne qui souhaite la liberté dans l'informatique doit désactiver toutes les actions JavaScript habituelles dans ses navigateurs, même si le code est gratuit, et les développeurs Web qui respectent la liberté de leurs utilisateurs doivent éliminer tout le JavaScript requis sur leurs sites.