java-trap.html (15918B)
1 <!--#set var="ENGLISH_PAGE" value="/philosophy/java-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>Libre mais entravé - le piège Java - Projet GNU - Free Software Foundation</title> 11 12 <!--#include virtual="/philosophy/po/java-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 19 <h2>Libre mais entravé - le piège Java</h2> 20 21 <address class="byline">par <a href="https://www.stallman.org/">Richard Stallman</a></address> 22 23 <div class="emph-box" style="background: none"> 24 <h3 class="footnote">Note préliminaire</h3> 25 <p>Depuis la parution de cet article, Sun (qui fait maintenant partie d'Oracle) 26 a <a href="https://www.fsf.org/news/fsf-welcomes-gpl-java.html">fait passer 27 l'essentiel de l'implémentation de référence de sa plateforme Java sous la 28 licence publique générale GNU</a> ; il y a donc maintenant un environnement 29 de développement libre pour Java. Ainsi le langage Java n'est plus un piège.</p> 30 31 <p>Vous devez faire attention, cependant, parce que toutes les plateformes Java 32 ne sont pas libres. Sun continue à distribuer une plateforme Java exécutable 33 qui n'est pas libre et d'autres sociétés font de même.</p> 34 35 <p>L'environnement libre pour Java s'appelle IcedTea ; le code source libéré 36 par Sun y est inclus. C'est donc cet environnement que vous devez 37 utiliser. Beaucoup de distributions GNU/Linux sont fournies avec IcedTea, 38 mais certaines contiennent des plateformes Java non libres. (Note ajoutée en 39 octobre 2015 : l'implémentation libre de Java s'appelle OpenJDK dans 40 beaucoup de distributions GNU/Linux.)</p> 41 42 <p>Pour vous assurer de manière fiable que votre programme Java s'exécutera 43 correctement dans un environnement libre, vous devez le développer avec 44 IcedTea. Théoriquement les plateformes Java devraient être compatibles, mais 45 elles ne le sont pas à 100%.</p> 46 47 <p>De plus, il y a des programmes non libres dont le nom contient « Java », 48 comme JavaFX, et il y a des paquets Java non libres qui pourraient vous 49 tenter mais que vous devez rejeter. Donc vérifiez les licences de tout 50 paquet que vous envisagez d'utiliser. Si vous utilisez Swing, faites en 51 sorte d'utiliser la version libre, qui est fournie avec IcedTea. (Note 52 ajoutée en octobre 2015 : un programme libre remplaçant JavaFX a été publié 53 sous le nom d'OpenJFX.)</p> 54 55 <p>Mis à part ces problèmes spécifiques à Java, le problème général décrit ici 56 demeure important, car toute bibliothèque ou plateforme de programmation non 57 libre peut causer un problème similaire. Nous devons retenir la leçon de 58 l'histoire de Java de manière à éviter d'autres pièges à l'avenir.</p> 59 60 <p>Veuillez aussi consulter : <a href="/philosophy/javascript-trap.html">Le 61 piège JavaScript</a>.</p> 62 </div> 63 <hr class="no-display" /> 64 65 <p><em>Le 12 avril 2004</em></p> 66 67 <p> 68 Si votre programme est un logiciel libre, il est éthique par nature, mais il 69 y a un piège dont il faut se méfier. Bien qu'intrinsèque, la liberté de 70 votre programme peut être restreinte à cause de logiciels non libres dont il 71 dépend. Comme c'est avec les programmes Java que ce problème est aujourd'hui 72 le plus évident, nous l'avons nommé le « piège Java ». 73 </p> 74 75 <p> 76 Un programme est un logiciel libre si ses utilisateurs possèdent certaines 77 libertés fondamentales. En gros, il s'agit de : la liberté d'exécuter le 78 programme, la liberté d'en étudier et modifier le code source, la liberté 79 d'en redistribuer les fichiers source et binaires, et la liberté d'en 80 publier des versions améliorées (voir la <a 81 href="/philosophy/free-sw.html">définition du logiciel libre</a>). Qu'un 82 programme donné soit un logiciel libre ne dépend que de la signification de 83 sa licence. 84 </p> 85 86 <p> 87 Que le programme puisse être utilisé dans le monde du Libre, utilisé par des 88 personnes qui entendent vivre en toute liberté, est une question plus 89 compliquée. La seule licence du programme ne détermine pas cela, car aucun 90 programme ne fonctionne en isolement total. Chaque programme dépend d'autres 91 programmes. Par exemple, il nécessite d'être compilé ou interprété, il 92 dépend donc d'un compilateur ou d'un interpréteur. S'il est compilé en 93 pseudo-code binaire, il dépend d'un interpréteur de pseudo-code. Qui plus 94 est, pour s'exécuter il a besoin de bibliothèques et peut faire appel à 95 d'autres programmes qui s'exécutent sous d'autres processus. Tous ces 96 programmes sont des dépendances. Ces dernières peuvent être totalement 97 indispensables à l'exécution du programme, ou juste nécessaires à certaines 98 de ses fonctionnalités. D'une façon ou d'une autre, tout ou partie du 99 programme ne peut pas fonctionner sans elles. 100 </p> 101 102 <p> 103 Que certaines des dépendances d'un programme ne soient pas libres signifie 104 que tout ou partie du programme ne peut s'exécuter sur un système totalement 105 libre – il est inutilisable dans le monde du Libre. Bien sûr, nous pouvons 106 distribuer le programme et en avoir des copies sur nos machines, mais cela 107 ne sert pas à grand-chose s'il ne s'exécute pas. Ce programme est un 108 logiciel libre, mais il est en fait entravé par des dépendances non libres. 109 </p> 110 111 <p> 112 Ce problème peut se produire avec n'importe quel type de logiciel, n'importe 113 quel langage. Par exemple, un programme libre qui ne fonctionne que sous 114 Microsoft Windows est parfaitement inutilisable dans le monde du Libre. Mais 115 des logiciels qui tournent sous GNU/Linux peuvent aussi être inutilisable 116 lorsqu'ils dépendent d'autres logiciels non libres. Par le passé, Motif 117 (avant que nous ayons LessTif) et Qt (avant que ses développeurs n'en 118 fassent un logiciel libre) étaient les causes principales de ce problème. La 119 plupart des cartes vidéo 3D ne fonctionnent pleinement qu'avec des pilotes 120 non libres, ceci pose également un problème. Mais en ce moment, la cause 121 principale de ce problème est Java, parce que certaines personnes qui 122 écrivent des logiciels libres pense que le langage Java est sexy. Aveuglés 123 par l'attrait du langage, ils sous-estiment le problème des dépendances et 124 tombent dans le piège Java. 125 </p> 126 127 <p> 128 L'implémentation Java de Sun est non libre. Les bibliothèques Java standard 129 sont aussi non libres ; c'est une adaptation du code privateur 130 (propriétaire) de Sun. Les bibliothèques de base de Java sont non libres 131 aussi. Bien sûr, nous disposons d'implémentations libres de Java, comme le 132 <a 133 href="https://objectcomputing.com/resources/publications/sett/january-2003-gcj-the-gnu-compiler-for-java">compilateur 134 GNU pour Java</a> (GCJ) et <a href="/software/classpath">GNU Classpath</a>, 135 mais ils ne gèrent pas encore toutes les fonctionnalités. Nous sommes encore 136 en train de rattraper le retard. 137 </p> 138 139 <p> 140 Si vous développez un programme Java sur la plateforme Java de Sun, vous 141 êtes voué à utiliser des fonctionnalités Sun exclusives sans même vous en 142 rendre compte. Vous pourriez les avoir utilisées pendant des mois avant de 143 le découvrir et reprendre la tâche pourrait prendre plus de mois 144 encore. Vous pourriez vous dire : « Recommencer demande trop de travail. » 145 Alors votre programme sera tombé dans le piège Java ; il sera inutilisable 146 dans le monde du Libre. 147 </p> 148 149 <p> 150 Le truc fiable pour éviter le piège Java est de n'avoir qu'une 151 implémentation libre de Java sur votre système. Ainsi, si vous utilisez une 152 fonctionnalité ou une bibliothèque que le logiciel libre ne supporte pas 153 encore, vous vous en rendrez compte immédiatement et vous pourrez réécrire 154 ce code tout de suite. 155 </p> 156 157 <p> 158 Sun continue de créer des bibliothèques « de base » supplémentaires, presque 159 toutes non libres ; dans bien des cas, même les spécifications de la 160 bibliothèque sont des secrets de fabrication. De plus, la dernière licence 161 de Sun concernant ces spécifications interdit la publication d'une mise en 162 œuvre partielle de ces dernières (voir par exemple <a 163 href="https://jcp.org/aboutJava/communityprocess/JSPA2.pdf"><i>Java 164 Specification Participation Agreement</i></a> et <a 165 href="https://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html"><i>J2ME™ 166 Personal Basis Profile Specification</i></a>). 167 </p> 168 169 <p> 170 Heureusement, la licence de ces spécifications permet d'en publier une mise 171 en œuvre libre ; ceux qui recevraient une telle bibliothèque peuvent être 172 autorisés à la modifier et ne sont pas tenus d'en suivre les 173 spécifications. Mais cette clause a pour effet d'interdire l'utilisation 174 d'un modèle de développement collaboratif pour produire cette mise en œuvre 175 libre. L'utilisation d'un tel modèle impliquerait la parution de versions 176 incomplètes, ce qui est interdit aux personnes ayant lu les spécifications. 177 </p> 178 179 <p> 180 Aux premiers jours du mouvement du logiciel libre, il était impossible de ne 181 pas dépendre de programmes non libres. Avant que nous ne disposions du 182 compilateur C de GNU, tous les programmes C (qu'ils fussent libres ou non) 183 dépendaient d'un compilateur C non libre. Avant que nous ne disposions de la 184 bibliothèque C de GNU, tous les programmes dépendaient d'une bibliothèque C 185 non libre. Avant que nous ne disposions de Linux, le premier noyau libre, 186 tous les programmes dépendaient d'un noyau non libre. Avant que nous ne 187 disposions de BASH, chaque script shell devait être exécuté par un 188 interpréteur non libre. Il était inévitable que nos premiers programmes 189 soient initialement sous le joug de ces dépendances, mais ceci était 190 acceptable car leur sauvetage ultérieur faisait partie de notre plan. Notre 191 objectif global, un système d'exploitation autonome, comprenait des 192 remplacements libres à toutes ces dépendances ; si nous atteignions ce but, 193 tous nos programmes seraient sauvés. Et c'est ce qui se produisit : avec le 194 système GNU/Linux, nous pouvons à présent exécuter ces programmes sur des 195 plateformes libres. 196 </p> 197 198 <p> 199 La situation est différente aujourd'hui. Nous disposons à présent de 200 systèmes d'exploitation puissants et de nombreux outils de programmation 201 libres. Quelle que soit la tâche que vous ayez à exécuter, vous pouvez le 202 faire sur une plateforme libre ; il n'est plus nécessaire, même 203 temporairement, d'accepter des dépendances non libres. À ce jour, la raison 204 principale pour laquelle les gens tombent dans le piège est que cela ne leur 205 vient pas à l'esprit. La plus simple des solutions concernant le piège Java 206 est d'apprendre aux gens à ne pas tomber dedans. 207 </p> 208 209 <p> 210 Afin de protéger votre code Java du piège Java, installez un environnement 211 de développement Java libre et utilisez-le. De façon générale, quel que soit 212 le langage que vous utilisiez, ouvrez l'œil et assurez-vous du statut libre 213 des programmes dont dépend le code de vos programmes. La façon la plus 214 simple de vérifier si ce programme est libre est de s'assurer qu'il possède 215 une entrée dans le <a href="https://www.fsf.org/directory">répertoire du 216 logiciel libre</a>. Si un programme n'est pas dans ce répertoire, vous 217 pouvez vérifier si la licence qui l'accompagne est dans la <a 218 href="/licenses/license-list.html">liste des licences de logiciel libre</a>. 219 </p> 220 221 <p> 222 Nous sommes en train d'essayer de sauver les programmes Java piégés, alors 223 si vous aimez le langage Java, nous vous invitons à nous aider à développer 224 GNU Classpath. Vous pouvez aussi aider en essayant vos programmes avec le 225 compilateur GCJ et GNU Classpath. Toutefois, cela prendra du temps pour 226 terminer GNU Classpath ; si d'autres bibliothèques non libres continuent à y 227 être ajoutées, il se peut que nous n'ayons jamais les plus récentes. Alors 228 s'il vous plaît, ne placez pas d'entraves sur vos logiciels libres. Faites 229 en sorte que l'application que vous écrivez en ce moment soit conçue pour 230 fonctionner dans un environnement libre dès le départ. 231 </p> 232 233 <h3 class="footnote">Voir également :</h3> 234 <p><a href="/philosophy/sun-in-night-time.html">Le curieux non-événement de Sun 235 dans la pénombre</a></p> 236 </div> 237 238 <div class="translators-notes"> 239 240 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 241 </div> 242 </div> 243 244 <!-- for id="content", starts in the include above --> 245 <!--#include virtual="/server/footer.fr.html" --> 246 <div id="footer" role="contentinfo"> 247 <div class="unprintable"> 248 249 <p>Veuillez envoyer les requêtes concernant la FSF et GNU à <<a 250 href="mailto:gnu@gnu.org">gnu@gnu.org</a>>. Il existe aussi <a 251 href="/contact/">d'autres moyens de contacter</a> la FSF. Les liens 252 orphelins et autres corrections ou suggestions peuvent être signalés à 253 <<a href="mailto:webmasters@gnu.org">webmasters@gnu.org</a>>.</p> 254 255 <p> 256 <!-- TRANSLATORS: Ignore the original text in this paragraph, 257 replace it with the translation of these two: 258 259 We work hard and do our best to provide accurate, good quality 260 translations. However, we are not exempt from imperfection. 261 Please send your comments and general suggestions in this regard 262 to <a href="mailto:web-translators@gnu.org"> 263 264 <web-translators@gnu.org></a>.</p> 265 266 <p>For information on coordinating and contributing translations of 267 our web pages, see <a 268 href="/server/standards/README.translations.html">Translations 269 README</a>. --> 270 Merci d'adresser vos commentaires sur les pages en français à <<a 271 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a>>, et sur les 272 traductions en général à <<a 273 href="mailto:web-translators@gnu.org">web-translators@gnu.org</a>>. Si 274 vous souhaitez y contribuer, vous trouverez dans le <a 275 href="/server/standards/README.translations.html">guide de traduction</a> 276 les infos nécessaires.</p> 277 </div> 278 279 <!-- Regarding copyright, in general, standalone pages (as opposed to 280 files generated as part of manuals) on the GNU web server should 281 be under CC BY-ND 4.0. Please do NOT change or remove this 282 without talking with the webmasters or licensing team first. 283 Please make sure the copyright date is consistent with the 284 document. For web pages, it is ok to list just the latest year the 285 document was modified, or published. 286 287 If you wish to list earlier years, that is ok too. 288 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 289 years, as long as each year in the range is in fact a copyrightable 290 year, i.e., a year in which the document was published (including 291 being publicly visible on the web or in a revision control system). 292 293 There is more detail about copyright years in the GNU Maintainers 294 Information document, www.gnu.org/prep/maintain. --> 295 <p>Copyright © 2004, 2010, 2015, 2021 Richard Stallman</p> 296 297 <p>Cette page peut être utilisée suivant les conditions de la licence <a 298 rel="license" 299 href="http://creativecommons.org/licenses/by-nd/4.0/deed.fr">Creative 300 Commons attribution, pas de modification, 4.0 internationale (CC BY-ND 301 4.0)</a>.</p> 302 303 <!--#include virtual="/server/bottom-notes.fr.html" --> 304 <div class="translators-credits"> 305 306 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 307 Traduction : Francis Pied.<br /> Révision : <a 308 href="mailto:trad-gnu@april.org">trad-gnu@april.org</a></div> 309 310 <p class="unprintable"><!-- timestamp start --> 311 Dernière mise à jour : 312 313 $Date: 2021/10/01 17:39:49 $ 314 315 <!-- timestamp end --> 316 </p> 317 </div> 318 </div> 319 <!-- for class="inner", starts in the banner include --> 320 </body> 321 </html>