English [en]   العربية [ar]   español [es]   فارسی [fa]   français [fr]   hrvatski [hr]   italiano [it]   日本語 [ja]   polski [pl]   русский [ru]   українська [uk]  

Depuis trente ans, la Free Software Foundation est vue comme le phare du mouvement du logiciel libre, combattant au niveau mondial pour la liberté des utilisateurs de l'informatique.

Grâce à votre don, notre phare continuera à briller de tous ses feux. Aidez-nous à nous rapprocher de notre objectif, 450 000 $ au 31 janvier.

450k
314 k à ce jour

[Traduit de l'anglais]

Le piège JavaScript

par Richard Stallman

Vous exécutez peut-être des programmes non libres sur votre ordinateur chaque jour sans même vous en apercevoir – par l'intermédiaire de votre navigateur web.

Dans la communauté du logiciel libre, l'idée que les programmes non libres nuisent à leurs utilisateurs est familière. Certains d'entre nous refusent totalement d'installer des logiciels privateurs1, et beaucoup d'autres considèrent que la non-liberté est une attaque contre le programme. Beaucoup d'utilisateurs sont conscients que ce problème s'applique aussi aux modules que les navigateurs proposent d'installer, car ils peuvent être libres ou non.

Mais les navigateurs exécutent d'autres programmes non libres pour lesquels ils ne demandent pas votre avis – des programmes que contiennent certaines pages web ou vers lesquels elles ont des liens. Ces programmes sont le plus souvent écrits en JavaScript, bien que d'autres langages puissent être utilisés.

JavaScript (dont le nom officiel est ECMAscript, mais peu de gens utilisent ce nom) était autrefois utilisé pour faire des effets frivoles, certes jolis mais non essentiels à la navigation et aux fonctionnalités d'affichage. Il était acceptable de les considérer comme de pures extensions du langage de balises HTML, plutôt que comme de vrais logiciels ; ils ne représentaient pas un problème significatif.

Beaucoup de sites utilisent encore JavaScript de cette façon, mais certains l'utilisent pour des programmes conséquents réalisant des tâches importants. Par exemple, Google Docs télécharge sur votre machine un programme JavaScript qui pèse un demi megaoctet, dans une forme compactée que nous pourrions appeler Obscurscript car il n'y a aucun commentaire et très peu d'espaces, et les noms de méthodes ne font qu'une lettre. Le code source d'un programme est la forme préférée pour le modifier ; le code compacté n'est pas du code source, et le vrai code source n'est pas disponible pour l'utilisateur.

Normalement, les navigateurs ne vous disent pas quand ils chargent des programmes JavaScript. La plupart des navigateurs ont un moyen de désactiver JavaScript totalement, mais aucun d'eux ne peut vérifier si des programmes JavaScript sont non triviaux et non libres. Même si vous en étiez conscient, vous auriez beaucoup de mal à identifier et bloquer ces programmes. De toute façon, même au sein de la communauté du logiciel libre, la plupart des utilisateurs ne sont pas conscients de ce problème ; le silence des navigateurs tend à le dissimuler.

Il est possible de publier un programme JavaScript en tant que logiciel libre, en distribuant le code source sous une licence libre. Mais même si le code source du programme est disponible, il n'existe pas de moyen facile d'exécuter votre version modifiée à la place de l'original. Les navigateurs libres actuels ne proposent pas de fonctionnalité permettant d'exécuter votre version modifiée à la place de celle qui est fournie par la page. L'effet est comparable à la tivoïsation bien que moins difficile à outrepasser.

JavaScript n'est pas le seul langage que les sites web utilisent pour les programmes envoyés aux utilisateurs. Flash supporte la programmation par l'intermédiaire d'une variante étendue de JavaScript. Il nous faudra étudier le problème de Flash pour faire des recommandations appropriées. Silverlight semble poser un problème similaire à Flash, excepté qu'il est pire, car Microsoft l'utilise comme plateforme pour des codecs non libres. Un remplacement libre de Silverlight ne ferait pas l'affaire pour le monde du libre, à moins qu'il ne propose des codecs de remplacement libres.

Les applets Java s'exécutent aussi dans le navigateur et soulèvent des problèmes similaires. En général, toutes sortes d'applets système posent ce genre de problème. Avoir un environnement d'exécution libre pour un applet ne fait que déplacer le problème.

Un fort mouvement s'est développé qui appelle les sites web à ne communiquer qu'avec des formats et des protocoles libres (certains disent « ouverts ») ; c'est-à-dire, dont la documentation est publiée et que chacun est libre de mettre en œuvre. Avec la présence de programmes dans les pages web, ce critère est nécessaire mais pas suffisant. JavaScript lui-même, en tant que format, est libre : utiliser JavaScript dans un site web n'est pas nécessairement mauvais. Cependant, comme nous l'avons vu plus haut, ce n'est pas nécessairement bon. Quand le site transmet un programme à l'utilisateur, il n'est pas suffisant que le programme soit écrit dans un langage documenté et libre d'entraves ; ce programme doit être également libre. « Ne transmettre que des programmes libres aux utilisateurs », cette règle doit faire partie des critères définissant un comportement correct des sites web.

Le chargement et l'exécution silencieux de programmes non libres est l'un des nombreux problèmes soulevés par les « applications web ». Le terme « application web » a été conçu pour ne pas tenir compte de la distinction fondamentale entre un logiciel fourni aux utilisateurs et un logiciel s'exécutant sur un serveur. Il peut faire référence à un programme client spécialisé qui s'exécute dans un navigateur ; il peut faire référence à un logiciel serveur spécialisé ; il peut faire référence à un programme client spécialisé qui travaille main dans la main avec un logiciel serveur spécialisé. Les côtés client et serveur soulèvent des problèmes éthiques différents, même s'ils sont si intimement intégrés que l'on pourrait dire qu'ils font partie d'un seul programme. Cet article ne traite que du problème du logiciel client. Nous traiterons le problème du côté serveur séparément.

Pratiquement, comment pouvons-nous traiter le problème des programmes JavaScript non libres dans les sites web ? Voici un plan d'action.

Que voulons-nous dire par « non trivial » ? Puisque c'est une question d'interprétation, il s'agit de concevoir un critère simple qui donne de bons résultats, plutôt que de déterminer la seule réponse correcte.

A titre d'essai, nous considérons un programme JavaScript comme non trivial si

Comment savoir si du code JavaScript est libre ? À la fin de cet article, nous proposons une convention dans laquelle un programme JavaScript non trivial dans une page web peut indiquer l'URL de l'emplacement de son code source, ainsi que sa licence, en utilisant des commentaires stylisés.

Enfin, nous devons modifier les navigateurs pour qu'ils détectent et bloquent le JavaScript non trivial et non libre dans les pages web. Le programme LibreJS [en] détecte le JavaScript non libre et non trivial dans les pages que vous visitez, et le bloque. LibreJS est un module complémentaire d'IceCat et IceWeasel (ainsi que de Firefox).

Les utilisateurs de navigateurs ont aussi besoin d'une fonctionnalité pratique pour indiquer le code JavaScript à utiliser à la place du JavaScript d'une page donnée (le code spécifié pourrait être un remplacement total, ou une version modifiée du programme JavaScript libre de cette page). Greasemonkey est très près d'arriver à faire cela, mais pas tout à fait, car il ne garantit pas de modifier le code JavaScript d'une page avant que le programme ne commence à s'exécuter. Utiliser un proxy local fonctionne, mais c'est trop peu pratique actuellement pour être une réelle solution. Nous avons besoin de construire une solution fiable et pratique, ainsi que des sites pour partager les changements. Le projet GNU voudrait recommander les sites dédiés aux changements libres seulement.

Ces fonctionnalités rendront possible pour un programme JavaScript inclus dans une page web d'être réellement libre. JavaScript ne sera plus un obstacle particulier à notre liberté – pas plus que C et Java ne le sont maintenant. Nous serons capables de rejeter et même de remplacer les programmes JavaScript non triviaux et non libres, tout comme nous avons rejeté et remplacé les paquets non libres pour les installations classiques. Notre campagne pour libérer le code JavaScript des sites web pourra alors commencer.

Entre-temps, il existe un cas où il est acceptable d'exécuter un programme JavaScript non libre : l'envoi d'une réclamation aux opérateurs du site web disant qu'ils doivent rendre libre le code JavaScript de leur site, ou bien l'éliminer. N'hésitez pas, s'il vous plaît, à activer JavaScript temporairement pour faire ça – mais n'oubliez pas de le désactiver après coup.

Merci à Matt Lee et John Resig pour leur aide dans la définition de notre proposition de critère, et à David Parunakian pour avoir porté ce problème à mon attention.

Annexe A : une convention pour publier des programmes JavaScript libres

Pour des références au code source correspondant, nous recommandons


    // @source:

suivi de l'URL. Cela satisfait à l'exigence de la GNU GPL de distribuer le code source. Si ce dernier est sur un site différent, vous devez prendre soin de faire ce qu'il faut. Le code source est nécessaire pour qu'un programme soit libre.

Pour indiquer la licence du code JavaScript intégré dans la page, nous recommandons de mettre l'avis de licence entre deux notes de cette forme :



    @licstart  The following is the entire license notice for the 
    JavaScript code in this page.
    ...
    @licend  The above is the entire license notice
    for the JavaScript code in this page.2

Bien sûr, tout ceci doit être contenu dans un commentaire multiligne.

La GNU GPL [en], comme beaucoup de licences de logiciel libre, nécessite la distribution d'une copie de la licence avec les formes binaire et source du programme. Cependant, la GNU GPL est longue et l'inclure dans une page avec un programme JavaScript n'est pas pratique. Vous pouvez oublier ce prérequis pour du code dont vous détenez le copyright (droit d'auteur), avec un avis de licence comme celui-ci :


    Copyright (C) YYYY  Developer

    The JavaScript code in this page is free software: you can
    redistribute it and/or modify it under the terms of the GNU
    General Public License (GNU GPL) as published by the Free Software
    Foundation, either version 3 of the License, or (at your option)
    any later version.  The code is distributed WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

    As additional permission under GNU GPL version 3 section 7, you
    may distribute non-source (e.g., minimized or compacted) forms of
    that code without the copy of the GNU GPL normally required by
    section 4, provided you include this license notice and a URL
    through which recipients can access the Corresponding Source.3

Je remercie Jaffar Rumith pour avoir porté ce problème à mon attention.

Annexe B : Publier des programmes JavaScript libres en tant que webmestre

Si vous êtes webmestre et que vous déployez des logiciels JavaScript libres sur votre site, publier clairement et systématiquement les informations relatives aux licences et au code source de ces fichiers aidera vos visiteurs à s'assurer qu'ils exécutent du logiciel libre, et vous aidera à respecter les clauses des licences.

L'annexe A décrit l'une des méthodes possibles pour indiquer les licences. Une deuxième méthode, celle des étiquettes web de licence pour JavaScript, peut se révéler plus pratique pour les bibliothèques de code JavaScript compacté, surtout lorsque ce n'est pas vous qui les avez écrites.


Notes de traduction
  1.  également appelés « logiciels propriétaires ».

  2.  Traduction :
        @licstart  Ce qui suit est la totalité de l'avis de licence
        pour le code JavaScript de cette page.
        ...
        @licend  Ce qui précède est la totalité de l'avis de licence
        pour le code JavaScript de cette page.
    
  3.  Traduction :
        Copyright (C) YYYY  Développeur
    
        Le code JavaScript de cette page est un logiciel libre : vous
        pouvez le redistribuer et/ou le modifier selon les termes de la
        licence GNU General Public License (GNU GPL) telle que
        publiée par la Free  Software Foundation, en version 3 de
        la licence, ou (à votre discrétion) toute version ultérieure. Le code
        est distribué SANS AUCUNE GARANTIE ; sans même la garantie
        tacite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN BUT PARTICULIER.
        Consulter la GNU GPL pour plus de détails.
    
        En tant que permission supplémentaire selon les termes de la GNU
        GPL version 3 section 7, vous pouvez distribuer des formes
        « non source » (par ex., minimisées ou compactées) de ce code
        sans la copie de la GNU GPL normalement requise section 4, à
        condition d'inclure cet avis de licence et une URL par
        laquelle les destinataires peuvent accéder au code source
        correspondant.

[logo de la FSF]« Notre mission est de préserver, protéger et promouvoir la liberté d'utiliser, étudier, copier, modifier et redistribuer les programmes informatiques, et de défendre les droits des utilisateurs de logiciel libre. »

La Fondation pour le logiciel libre (FSF) est le principal sponsor institutionnel du système d'exploitation GNU. Soutenez GNU et la FSF en achetant des manuels et autres, en adhérant à la FSF en tant que membre associé, ou en faisant un don, soit directement à la FSF, soit via Flattr.

Haut de la page