javascript-trap.html (19075B)
1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" --> 2 3 <!--#include virtual="/server/header.fr.html" --> 4 <!-- Parent-Version: 1.96 --> 5 <!-- This page is derived from /server/standards/boilerplate.html --> 6 <!--#set var="TAGS" value="essays licensing traps" --> 7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> 8 9 <!-- This file is automatically generated by GNUnited Nations! --> 10 <title>Le piège JavaScript - Projet GNU - Free Software Foundation</title> 11 12 <!--#include virtual="/philosophy/po/javascript-trap.translist" --> 13 <!--#include virtual="/server/banner.fr.html" --> 14 <!--#include virtual="/philosophy/ph-breadcrumb.fr.html" --> 15 <!--GNUN: OUT-OF-DATE NOTICE--> 16 <!--#include virtual="/server/top-addendum.fr.html" --> 17 <div class="article reduced-width"> 18 <h2>Le piège JavaScript</h2> 19 20 <address class="byline">par <a href="https://www.stallman.org/">Richard Stallman</a></address> 21 22 <p><strong>Vous exécutez peut-être des programmes non libres sur votre 23 ordinateur chaque jour sans même vous en apercevoir – par l'intermédiaire de 24 votre navigateur web.</strong></p> 25 26 <!-- any links that used to point to the appendices should point to 27 free-your-javascript.html instead. --> 28 <div class="announcement"> 29 <hr class="no-display" /> 30 <p>À l'attention des webmestres : il y a <a 31 href="/software/librejs/free-your-javascript.html">plusieurs moyens</a> 32 d'indiquer la licence des programmes JavaScript présents sur un site web.</p> 33 <hr class="no-display" /> 34 </div> 35 36 <p>Dans la communauté du logiciel libre, l'idée que <a 37 href="/philosophy/free-software-even-more-important.html">les programmes non 38 libres nuisent à leurs utilisateurs</a> est familière. Certains d'entre nous 39 défendent leur liberté en interdisant l'accès de leur machine à tous les 40 logiciels privateurs<a id="TransNote1-rev" 41 href="#TransNote1"><sup>1</sup></a> et beaucoup d'autres considèrent que la 42 non-liberté d'un programme est un point négatif.</p> 43 44 <p>Beaucoup d'utilisateurs sont conscients que ce problème s'applique aussi aux 45 modules que les navigateurs proposent d'installer, puisqu'ils peuvent être 46 libres ou non. Mais les navigateurs exécutent d'autres programmes non libres 47 sans vous demander votre avis ni même vous prévenir – des programmes inclus 48 dans des pages web ou vers lesquels elles ont des liens. Ces programmes sont 49 le plus souvent écrits en JavaScript, bien que d'autres langages puissent 50 être utilisés.</p> 51 52 <p>JavaScript (dont le nom officiel, mais peu utilisé, est ECMAScript) servait 53 autrefois à orner les pages web de fioritures mineures, comme des 54 fonctionnalités de navigation et d'affichage agréables mais non 55 essentielles. Il était acceptable de les considérer comme de pures 56 extensions du langage de balises HTML et d'ignorer le problème.</p> 57 58 <p>Certains sites utilisent encore JavaScript de cette façon, mais beaucoup 59 l'utilisent pour des programmes conséquents réalisant des tâches 60 importantes. Par exemple, Google Docs essaie d'installer dans votre 61 navigateur un programme JavaScript qui pèse un demi mégaoctet, sous une 62 forme compactée que nous pourrions appeler ObfuScript. Cette forme compactée 63 s'obtient à partir du code source en supprimant les espaces supplémentaires 64 qui rendent le code lisible ainsi que les remarques explicatives qui le 65 rendent compréhensible, et en remplaçant chaque nom évocateur par un nom 66 court arbitraire pour qu'on ne puisse pas savoir ce qu'il est censé 67 représenter.</p> 68 69 <p>Le logiciel libre est <a href="/philosophy/free-sw.html">par définition</a> 70 un logiciel qui, entre autres, permet aux utilisateurs d'avoir accès à son 71 code source (c'est-à-dire à son plan). Le code source d'un programme est la 72 forme préférée des programmeurs pour effectuer des modifications – et il 73 comprend les espaces supplémentaires, les remarques explicatives et les noms 74 évocateurs. Le code compacté est un substitut bidon et inutile au code 75 source ; le véritable code source de ces programmes n'est pas disponible 76 pour les utilisateurs, donc ces derniers ne peuvent pas le comprendre ; par 77 conséquent, le programme est non libre.</p> 78 79 <p>Outre qu'ils ne sont pas libres, beaucoup de ces programmes sont 80 <em>malveillants</em> parce qu'ils <a 81 href="https://github.com/w3c/fingerprinting-guidance/issues/8">espionnent 82 l'utilisateur</a>. Pire encore, certains sites utilisent des services qui 83 enregistrent <a 84 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">toutes 85 ce que fait l'utilisateur quand il regarde une page</a>. Ces services sont 86 censés « caviarder » les enregistrements pour en exclure certaines données 87 sensibles dont le site web ne doit pas avoir connaissance. Mais en admettant 88 même que cela soit fait de manière fiable, le but de ces services est de 89 donner au site d'autres données personnelles qu'il ne devrait pas posséder.</p> 90 91 <p>Normalement, les navigateurs ne vous disent pas quand ils chargent des 92 programmes JavaScript. Certains d'entre eux ont un moyen de désactiver 93 JavaScript totalement, mais même si vous êtes conscient du problème, vous 94 aurez beaucoup de mal à identifier les programmes non triviaux et non libres 95 pour les bloquer. De toute façon, même au sein de la communauté du logiciel 96 libre, la plupart des utilisateurs ne sont pas conscients de ce problème ; 97 le silence des navigateurs tend à le dissimuler.</p> 98 99 <p>D'abord une mise au point : le langage JavaScript n'est pas intrinsèquement 100 meilleur ou pire pour la liberté des utilisateurs que n'importe quel autre 101 langage. Il est possible de publier un programme JavaScript en tant que 102 logiciel libre, en distribuant le code source sous une licence libre. Si le 103 programme est autonome (c'est-à-dire si son fonctionnement et son but sont 104 indépendants de la page qui l'a amené), tout va bien ; vous pouvez le copier 105 dans un fichier sur votre machine, le modifier, puis l'exécuter en lisant ce 106 fichier avec votre navigateur. Il est même possible de l'empaqueter pour 107 l'installer comme les autres programmes libres et l'invoquer avec une 108 commande du shell. Ces programmes ne posent pas de problèmes éthiques 109 différents de ceux des programmes C.</p> 110 111 <p>Le problème du piège JavaScript s'applique lorsque le programme JavaScript 112 accompagne la page web visitée par l'utilisateur. Ces programmes sont conçus 113 pour fonctionner avec une page ou un site particulier, qui en dépend pour 114 fonctionner.</p> 115 116 <p>Supposons que vous modifiez le code JavaScript de la page. Alors se présente 117 un autre problème : même si le code source du programme est disponible, les 118 navigateurs ne proposent aucun moyen d'exécuter votre version modifiée à la 119 place de l'original lorsque vous êtes sur cette page ou ce site. L'effet est 120 comparable à la tivoïsation bien qu'il soit, en principe, un peu moins 121 difficile à contourner.</p> 122 123 <p>JavaScript n'est pas le seul langage que les sites web utilisent pour les 124 programmes envoyés aux utilisateurs. Flash permettait la programmation à 125 l'aide d'une variante étendue de JavaScript, mais cette époque est révolue ; 126 si un jour nous avons un lecteur Flash libre suffisamment complet, il nous 127 faudra traiter le problème des programmes Flash non libres. Microsoft 128 Silverlight est susceptible de poser un problème similaire à Flash, en pire, 129 car Microsoft l'utilise comme plateforme pour des codecs non libres. Un 130 remplacement libre de Silverlight ne ferait pas l'affaire pour le monde du 131 libre, à moins qu'il ne propose normalement des codecs de remplacement 132 libres.</p> 133 134 <p>Les applets Java s'exécutent aussi dans le navigateur et soulèvent des 135 problèmes similaires. En général, n'importe quel système d'applet pose ce 136 genre de problème. Avoir un environnement d'exécution libre pour un applet 137 ne fait que déplacer le problème.</p> 138 139 <p>Il est théoriquement possible de programmer en HTML et CSS, mais en pratique 140 les possibilités sont limitées et c'est assez pénible ; le simple fait de 141 réaliser quelque chose par cette technique est un hack impressionnant. De 142 tels programmes doivent être libres, mais aujourd'hui, en 2019, cela ne pose 143 pas de réel problème pour la liberté de l'utilisateur.</p> 144 145 <p>Un fort mouvement s'est développé qui appelle les sites web à ne communiquer 146 qu'avec des formats et des protocoles libres (certains disent « ouverts ») ; 147 c'est-à-dire des formats dont la documentation est publiée et que chacun est 148 libre de mettre en œuvre. Cependant, la présence de programmes JavaScript 149 dans les pages web rend ce critère insuffisant. Le langage JavaScript 150 lui-même, en tant que format, est libre ; utiliser JavaScript dans un site 151 web n'est donc pas nécessairement mauvais. Cependant, comme nous l'avons vu 152 plus haut, cela peut être mauvais si le programme JavaScript est non 153 libre. Quand le site transmet un programme à l'utilisateur, il ne suffit pas 154 que le programme soit écrit dans un langage documenté et libre d'entraves ; 155 ce programme doit aussi être libre. « Ne transmet que des programmes libres 156 aux utilisateurs » ; cette règle doit faire partie des critères définissant 157 un comportement correct des sites web.</p> 158 159 <p>Le chargement et l'exécution silencieux de programmes non libres est l'un 160 des nombreux problèmes soulevés par les « applications web ». Le terme 161 « application web » a été conçu pour ne pas tenir compte de la distinction 162 fondamentale entre un logiciel fourni aux utilisateurs et un logiciel 163 s'exécutant sur un serveur. Il peut faire référence à un programme client 164 spécialisé qui s'exécute dans un navigateur ; il peut faire référence à un 165 logiciel serveur spécialisé ; il peut faire référence à un programme client 166 spécialisé travaillant main dans la main avec un logiciel serveur 167 spécialisé. Les côtés client et serveur soulèvent des problèmes éthiques 168 différents, bien qu'ils soient si intimement intégrés qu'on pourrait les 169 considérer comme parties d'un seul et même programme. Cet article ne 170 s'occupe que du logiciel client. Nous traitons le problème du serveur 171 séparément.</p> 172 173 <p>Pratiquement, comment pouvons-nous traiter le problème des programmes 174 JavaScript non triviaux et non libres dans les sites web ? La première étape 175 est de ne pas les laisser s'exécuter.</p> 176 177 <p>Que voulons-nous dire par « non trivial » ? Puisque c'est une question 178 d'interprétation, il s'agit de concevoir un critère simple qui donne de bons 179 résultats, plutôt que de déterminer la seule réponse correcte.</p> 180 <p> 181 Actuellement, nous considérons un programme JavaScript comme non trivial 182 s'il répond à l'une des conditions suivantes :</p> 183 184 <ul> 185 <li>il est appelé en tant que script externe (à partir d'une autre page) ;</li> 186 187 <li>il déclare un tableau contenant plus de 50 éléments ;</li> 188 189 <li>il définit une entité nommée (fonction ou méthode) qui appelle autre chose 190 qu'une primitive ;</li> 191 192 <li>il définit une entité nommée comprenant plus de trois éléments de 193 construction conditionnels et une construction en boucle ;</li> 194 195 <li>le code n'appartenant pas aux définitions nommées appelle autre chose que 196 des primitives et des fonctions définies plus haut dans la page ;</li> 197 198 <li>le code n'appartenant pas aux définitions nommées comprend, au total, plus 199 de trois éléments de construction conditionnels et une construction en 200 boucle ;</li> 201 202 <li>il fait appel à <b>eval</b> ;</li> 203 204 <li>il fait des requêtes Ajax ;</li> 205 206 <li>Pour accéder de manière dynamique aux propriétés des objets, il utilise une 207 notation crochet qui ressemble à <b><em>objet</em>[<em>propriété</em>]</b>.</li> 208 209 <li>il modifie le <abbr title="Document Object Model">DOM</abbr> ;</li> 210 211 <li>il utilise des constructions dynamiques JavaScript qui sont difficiles à 212 analyser sans interpréter le programme, ou bien il est chargé en même temps 213 que des scripts qui utilisent de telles constructions ; cela concerne plus 214 précisément l'utilisation avec certaines méthodes (<b>Obj.write</b>, 215 <b>Obj.createElement</b>, etc.) de tout élément de construction autre qu'une 216 chaîne de caractères constante.</li> 217 </ul> 218 219 <p>Comment savoir si du code JavaScript est libre ? Dans un <a 220 href="/licenses/javascript-labels.html">autre article</a>, nous proposons 221 une méthode qui permet à un programme JavaScript non trivial inclus dans une 222 page web d'indiquer l'URL de son code source, ainsi que sa licence, en 223 utilisant des commentaires stylisés.</p> 224 225 <p>Enfin, nous devons modifier les navigateurs pour qu'ils détectent et 226 bloquent le JavaScript non trivial et non libre dans les pages web. Le 227 programme <a href="/software/librejs/">LibreJS</a> [en] détecte le 228 JavaScript non libre et non trivial dans les pages que vous visitez, et le 229 bloque. LibreJS est intégré à IceCat et peut être ajouté à Firefox en tant 230 que module complémentaire.</p> 231 232 <p>Les utilisateurs de navigateurs ont aussi besoin d'une fonctionnalité facile 233 d'emploi, indiquant le code JavaScript à <em>substituer</em> au JavaScript 234 d'une page donnée (le code spécifié pourrait être un remplacement total, ou 235 une version modifiée du programme JavaScript libre de cette 236 page). Greasemonkey arrive presque à le faire, mais pas tout à fait, car il 237 ne garantit pas de modifier le code JavaScript d'une page avant que le 238 programme ne commence à s'exécuter. On peut utiliser un proxy local, mais 239 c'est trop malcommode actuellement pour constituer une réelle solution. Nous 240 avons besoin de construire une solution fiable et pratique, ainsi que des 241 sites pour partager les modifications. Le projet GNU voudrait recommander 242 les sites dédiés exclusivement aux modifications libres.</p> 243 244 <p>Ces fonctionnalités rendront possible pour un programme JavaScript inclus 245 dans une page web d'être réellement libre. JavaScript ne sera plus un 246 obstacle particulier à notre liberté – pas plus que C et Java ne le sont 247 maintenant. Nous serons en mesure de rejeter et même de remplacer les 248 programmes JavaScript non triviaux et non libres, tout comme nous avons 249 rejeté et remplacé les paquets non libres pour les installations 250 classiques. Notre campagne pour libérer le code JavaScript des sites web 251 pourra alors commencer.</p> 252 253 <p>Entre-temps, il existe un cas où il est acceptable d'exécuter un programme 254 JavaScript non libre : l'envoi d'une réclamation aux opérateurs du site web 255 leur demandant de libérer le code JavaScript de leur site, ou bien de 256 l'éliminer. N'hésitez pas à activer JavaScript temporairement pour faire ça 257 – mais n'oubliez pas de le désactiver après coup.</p> 258 259 <!-- any links that used to point to the appendices should point to 260 free-your-javascript.html instead. --> 261 <div class="announcement"> 262 <hr class="no-display" /> 263 <p>À l'attention des webmestres : il y a <a 264 href="/software/librejs/free-your-javascript.html">plusieurs moyens</a> 265 d'indiquer la licence des programmes JavaScript présents sur un site web.</p> 266 <hr class="no-display" /> 267 </div> 268 269 <p><strong>Remerciements:</strong> Je remercie <a 270 href="/people/people.html#mattlee">Matt Lee</a> et <a 271 href="https://johnresig.com/">John Resig</a> pour leur aide dans la 272 définition de notre proposition de critère, et David Parunakian pour avoir 273 porté ce problème à mon attention.</p> 274 </div> 275 276 <div class="translators-notes"> 277 278 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 279 <hr /><b>Notes de traduction</b> <ol> 280 <li id="TransNote1"><a href="#TransNote1-rev" 281 class="nounderline">↑</a> également appelés « logiciels 282 propriétaires ».<br/><br/></li> 283 </ol></div> 284 </div> 285 286 <!-- for id="content", starts in the include above --> 287 <!--#include virtual="/server/footer.fr.html" --> 288 <div id="footer" role="contentinfo"> 289 <div class="unprintable"> 290 291 <p>Veuillez envoyer les requêtes concernant la FSF et GNU à <<a 292 href="mailto:gnu@gnu.org">gnu@gnu.org</a>>. Il existe aussi <a 293 href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens 294 orphelins et autres corrections ou suggestions peuvent être signalés à 295 <<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>>.</p> 296 297 <p> 298 <!-- TRANSLATORS: Ignore the original text in this paragraph, 299 replace it with the translation of these two: 300 301 We work hard and do our best to provide accurate, good quality 302 translations. However, we are not exempt from imperfection. 303 Please send your comments and general suggestions in this regard 304 to <a href="mailto:web-translators@gnu.org"> 305 306 <web-translators@gnu.org></a>.</p> 307 308 <p>For information on coordinating and contributing translations of 309 our web pages, see <a 310 href="/server/standards/README.translations.html">Translations 311 README</a>. --> 312 Merci d'adresser vos commentaires sur les pages en français à <<a 313 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>>, et sur les 314 traductions en général à <<a 315 href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>>. Si 316 vous souhaitez y contribuer, vous trouverez dans le <a 317 href="/server/standards/README.translations.html">guide de traduction</a> 318 les infos nécessaires.</p> 319 </div> 320 321 <!-- Regarding copyright, in general, standalone pages (as opposed to 322 files generated as part of manuals) on the GNU web server should 323 be under CC BY-ND 4.0. Please do NOT change or remove this 324 without talking with the webmasters or licensing team first. 325 Please make sure the copyright date is consistent with the 326 document. For web pages, it is ok to list just the latest year the 327 document was modified, or published. 328 329 If you wish to list earlier years, that is ok too. 330 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 331 years, as long as each year in the range is in fact a copyrightable 332 year, i.e., a year in which the document was published (including 333 being publicly visible on the web or in a revision control system). 334 335 There is more detail about copyright years in the GNU Maintainers 336 Information document, www.gnu.org/prep/maintain. --> 337 <p>Copyright © 2009-2013, 2016-2019, 2021 Richard Stallman</p> 338 339 <p>Cette page peut être utilisée suivant les conditions de la licence <a 340 rel="license" 341 href="http://creativecommons.org/licenses/by-nd/4.0/deed.fr">Creative 342 Commons attribution, pas de modification, 4.0 internationale (CC BY-ND 343 4.0)</a>.</p> 344 345 <!--#include virtual="/server/bottom-notes.fr.html" --> 346 <div class="translators-credits"> 347 348 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 349 Traduction : Cédric Corazza.<br /> Révision : <a 350 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a></div> 351 352 <p class="unprintable"><!-- timestamp start --> 353 Dernière mise à jour : 354 355 $Date: 2021/10/11 10:32:11 $ 356 357 <!-- timestamp end --> 358 </p> 359 </div> 360 </div> 361 <!-- for class="inner", starts in the banner include --> 362 </body> 363 </html>