HOWTO Java pour Linux <author>maintenu par Eric S. Raymond <htmlurl url="mailto:esr@snark.thyrsus.com" name="(esr@snark.thyrsus.com)"> &nl; Adaptation française par Arnaud Ruch <htmlurl url="mailto:ruch@donald.fdn.fr" name="(ruch@donald.fdn.fr)"> <date>v.2.2, 10 Fev 1996 <abstract> Ce document décrit de façon succinte la mise en place et l'utilisation de Java et HotJava sous Linux. Il s'adresse aussi bien aux utilisateurs qu'aux programmeurs. </abstract> <toc> <sect>Introduction <p> Ce document est une introduction Linux-centrique aux mondes de Java et HotJava. Ces technologies connaissant une évolution rapide, toute contribution est la bienvenue. <p> Certaines parties de ce document demandent sérieusement à être vérifiées ou complétées [cf. <ref id="needed" name="A ajouter...">]. Pour aider à l'amélioration de ce HOWTO, envoyez toute demande de mise à jour et de modification à <htmlurl url="mailto:esr@snark.thyrsus.com" name="esr@snark.thyrsus.com">. </sect> <sect>Questions d'ordre général sur Java et HotJava <p> Cette partie est une introduction générale (non spécifique à Linux) à Java et HotJava. <sect1>Que sont Java et HotJava ? En quoi sont-ils intéressants ? <p> Java est un langage orienté réseau. Similaire au C++, il est plus compact et a été conçu plus proprement. Il met en oeuvre une gestion mémoire semblable à celle du Lisp (ramasse-miettes), mais dispose en plus d'une vérification statique des types, raison pour laquelle il est parfois décrit avec ironie comme un <sq>Smalltalk doté d'une syntaxe cohérente</sq>. Les processus légers (threads) y sont intégrés et il dispose de nombreuses possibilités en termes de sécurité réseau. Jusqu'à présent, la principale application réalisée grâce à Java est le navigateur WWW HotJava, mais l'avenir de Java comme langage de développement d'applications de tous types semble prometteur. HotJava est un navigateur WWW écrit en Java. Son principal avantage sur ses concurrents est de pouvoir traiter une nouvelle construction HTML appelée <sq>APPLET</sq>. Une applet est un programme Java qui s'exécute sur la machine cliente. Les documents WWW peuvent par conséquent contenir des objets <sq>vivants</sq> et non plus de simples données. La possibilité de transférer des objets exécutables représente le progrès le plus significatif de la technologie du World Wide Web depuis l'apparition de Mosaic. L'application la plus immédiate en est de pouvoir concevoir un navigateur Web qui ne nécessite plus d'incessantes mises à jour pour être capable de traiter les nouveaux formats d'images et les nouvelles constructions. Un programme Java est transformé par compilation en un pseudo-code appelé <sq>J-code</sq> que l'interpréteur Java a pour rôle d'exécuter. Il se pourrait bien que le J-code soit en passe de devenir une référence universelle en matière de code indépendant s'exécutant sur une machine virtuelle, ou encore comme langage de compilation intermédiaire. Des rumeurs courent à propos de l'existence d'un compilateur ADA-95 générant du J-code et sur le développement d'un tel compilateur pour le langage C. Il est probable qu'en fin de compte, de nombreux langages de haut niveau permettront d'écrire des applets ou des programmes complets sur toute machine disposant d'un interpréteur Java. On peut aussi signaler l'apparition de microprocesseurs Java dont le jeu d'instruction est le J-code. <sect1>D'où viennent Java et HotJava ? Qui a le droit de les utiliser ? <p> Java et HotJava ont été développés chez Sun Microsystems, par une équipe conduite par James Gosling (déjà largement connu pour Gosling Emacs et NeWS). La dernière tentative menée par Sun pour imposer un standard technique majeur a été NeWS, son système de fenêtrage réseau (Network Window System). Bien que la supériorité de NeWS sur X ait été reconnue presque unanimement, X a gagné la bataille pour la simple raison que les sources en étaient gratuitement disponibles. Cet échec a été formateur pour Sun : Java et HotJava sont aisément accessibles, les fichiers source peuvent être téléchargés selon les termes d'une licence relativement souple [cf. <ref id="licence" name="Java, logiciel librement diffusable">] et Sun encourage les portages vers des environnements autres que Sun. Netscape est déjà capable d'interpréter du Java. Microsoft a acquis la licence de la technologie en Décembre 1995. Il semble donc que le support de Java soit en passe de devenir universel en 1996. A l'origine, Java s'appelait Oak. HotJava fut quant à lui dénommé WebRunner. </sect1> <sect1>Quelle est la maturité de Java ? <p> Le 12 Décembre 1995, Sun mettait à disposition du public la version 'Bêta 2' de Java. Un mois plus tard venait le tour de la version 1.0, première version dite de <sq>production</sq>. L'API (Application Programmers Interface) de l'environnement Java, qui définit son accès au système d'exploitation et au système de fenêtrage de la machine hôte, semble avoir été <sq>gelée</sq> : elle pourra être étendue, mais ne sera pas rendue incompatible avec la version actuelle. La version 1.0 de ce document a été rendue publique en même temps que la version bêta 1.0 du kit de développement Java (JDK) pour Linux, dont le portage a été réalisé par Randy Chapman. C'est un fait connu que de sérieux trous de sécurité existent dans l'implémentation de Java. Ce n'est donc pour l'instant pas une très bonne idée que d'utiliser Java pour des applications sensibles. Ces problèmes seront certainement résolus dans les versions de production (post-beta). </sect1> <sect1>Où peut-on trouver de la documentation sur Java et HotJava ? <p> Sun tient à jour un serveur Web complet proposant des documents sur Java et HotJava à l'adresse : <htmlurl url="http://java.sun.com" name="http://java.sun.com">.<newline> Des copies de ces documents se trouvent en d'autres endroits, tels que <htmlurl url="http://java.blackdown.com" name="http://java.blackdown.com"> (Sun fournit une liste de sites miroirs). </sect1> <sect1>Certes, mais où trouver une documentation papier ? <p> La série officielle des manuels Java de SunSoft Press est en cours de production chez Addison-Wesley. On peut trouver quelques détails sur ces ouvrages dans <htmlurl url="http://www.city-net.com/~krom/java-faq.html" name="comp.lang.java FAQ"> . Certains des pionniers de Java ont recommandé l'ouvrage <sq>Hooked on Java</sq>, écrit par les membres de l'équipe de développement de Java. L'un des commentaires qui ont été faits sur ce livre est : <sq>Bien écrit, mais j'aurais apprécié quelque chose de moins basique</sq>. O'Reilly & Associates travaille actuellement sur sa propre série d'ouvrages traitant de Java, en collaboration avec Sun. On trouvera (au moins) un <sq>Nutshell Guide to Java</sq>, un manuel de référence du langage, un manuel de référence des bibliothèques de classes et un ouvrage traitant de la machine virtuelle sous-jacente à Java (celle qui exécute le J-code). Information tout à fait non confidentielle : l'auteur de ce HOWTO a été prié par O'Reilly & Associates de servir de principal relecteur technique de ces ouvrages et il est rémunéré pour ce travail. SamsNet a publié un livre intitulé <sq>Learning Java in 21 Days</sq>. Aucun commentaire n'en a été fait pour l'instant. Un des contributeurs de ce document a trouvé dans des librairies proches de chez lui trois ouvrages déjà publiés : <itemize> <item>L'un, appelé <sq>Java in 60 minutes</sq> semble n'être qu'une simple description syntaxique du langage (environ $20) ; <item>Le second, publié par SamsNet, s'appelle tout simplement <sq>Java</sq> (environ $20) ; <item>Le troisième, écrit par Tim Ritchey, est intitulé <sq>Java!</sq>. Un CD-ROM est fourni avec (environ $35). </itemize> Notre informateur poursuit : <sq>J'ai acheté le troisième (écrit par Tim Ritchey). Les délais d'impressions étant ce qu'ils sont, le CD-ROM ne contient que des versions alpha, bien qu'il signale que la version bêta est probablement disponible au moment de la publication, et que les informations les plus à jour se trouvent sur java.sun.com. Cela mis à part, c'est un bon ouvrage et il juge même nécessaire de signaler qu'il est inutile de s'embarrasser de centaines de pages de description de l'API parce que : cela quadruplerait la taille du livre, l'API est encore en évolution, et ces informations se trouvent on-line...</sq> Dave Dittrich indique : <sq>Je dirais que <sq>Java in 60 minutes</sq> peut certes être lu en 60 minutes, mais qu'il ne vous apprendra certainement pas en 60 minutes comment programmer en Java (surprise, surprise !). J'ai l'impression que <sq>Java in 60 minutes</sq> est l'une de ces nombreuses tentatives de publication d'un ouvrage sur un sujet à la pointe de l'actualité. On n'y trouve apparemment pas grand'chose de plus que ce qui est disponible sur le Web et une grande quantité de texte donne l'impression d'avoir été reproduite telle quelle à partir du document <sq>Java Language Specification</sq> <htmlurl url="http://java.sun.com/JDK-beta2/psfiles/javaspec.ps" name="http://java.sun.com/JDK-beta2/psfiles/javaspec.ps">.</sq> Dave poursuit : <sq>Il en va de même avec <sq>Java!</sq>, mais ce dernier détaille beaucoup plus les concepts de la programmation orientée objet. Quelqu'un m'a signalé un autre ouvrage qui traite assez bien de l'abstraction données/méthodes et des autres concepts de la programmation orientée objet. Il s'agit de "Structure and Interpretation of Computer Programs", par Abelson, Sussman et Sussman (MIT Press).</sq> Dernière mise en garde : à l'heure actuelle (Janvier 1996), c'est probablement une bonne idée que d'éviter le livre de Ritchey ou tout ce qui peut être basé sur l'API alpha. L'API bêta est substantiellement différente et Java 1.0, qui devrait bientôt être disponible, aura encore ses propres différences. </sect1> <sect1>Où peut-on trouver des collections de code Java disponibles on-line ? <p> On trouve des archives d'applets sur le WWW, aux adresses suivantes : <itemize> <item><htmlurl url="http://java.sun.com/" name="http://java.sun.com/"> ; <item><htmlurl url="http://www.applets.com/" name="http://www.applets.com/"> ; <item><htmlurl url="http://www.gamelan.com/" name="http://www.gamelan.com/"> ; <item><htmlurl url="http://www.javasoft.com/applets/applets.html" name="http://www.javasoft.com/applets/applets.html">. </itemize> La plupart des applets présentées sur ces pages sont accompagnées de leur code source et les programmeurs sont encouragés à les utiliser. Des pointeurs vers d'autres ressources peuvent être trouvés dans le <htmlurl url="http://www.city-net.com/~krom/java-faq.html" name="comp.lang.java FAQ">. </sect1> </sect> <sect>Java, logiciel librement diffusable (Freely Redistributable Software) <label id="licence"> <p> Nombreux sont les programmeurs Linux qui tiennent à ce que les logiciels qu'ils produisent soient librement diffusables et qui évitent de consacrer trop de temps aux outils dont les sources ne sont pas largement disponibles. Dans cette partie sont discutées les relations de Sun et de Java avec le monde du logiciel librement diffusable. (Attention : l'auteur n'est pas juriste. Il n'est pas non plus employé, agent ni actionnaire de Sun Microsystems. Cette partie est fondée sur son interprétation des lois actuelles sur le copyright et sur la licence de Sun. Considérez-la comme une simple introduction, la page de Sun <htmlurl url="http://www.blackdown.org/Java/licensing.html" name="http://www.blackdown.org/Java/licensing.html"> étant la seule autorité en la matière. Si vous avez du mal à en saisir la signification, consultez un avocat.) <sect1>Peut-on redistribuer librement des programmes écrits en Java ? <p> Tout à fait, si vous en êtes l'auteur et choisissez de les placer sous une licence de type GPL ou BSD, ou encore si vous les déclarez du domaine public. <sect1>Quelles sont les droits et obligations associés aux exécutables de Java ? <p> La page de Sun concernant la licence indique que les exécutables de Java et HotJava peuvent être redistribués dans des applications (commerciales ou non), à condition qu'ils le soient gratuitement et sans être modifiés. Les entreprises ou individus qui souhaitent effectuer un nouveau portage du langage Java peuvent mettre les exécutables de ce portage à disposition sur l'Internet, mais ceux-ci doivent être gratuits et passer avec succès les tests publiquement disponibles (ces tests devraient être disponibles à la mi-1996). Les fichiers <sq>diff</sq> peuvent également être diffusés, à condition que les sources auxquels ils s'appliquent ne le soient pas. Ainsi, vous pouvez donner à vos amis les exécutables de Java et HotJava ou bien les mettre sur un CD-ROM, ou encore en faire ce que vous voudrez, sauf les modifier et en diffuser les versions modifiées comme étant Java (ceci est compréhensible, Sun doit se protéger contre les chevaux de Troie diffusés sous le déguisement de Java). Les exécutables peuvent être redistribués librement. </sect1> <sect1>Quelles parties des sources de Java peut-on redistribuer librement ? <p> Selon la page de Sun, aucune. Cependant, les choses sont en réalité moins strictes que cela. En pratique, tout le monde peut obtenir les sources de Java et HotJava à des fins non commerciales, d'enseignement ou de portage, et ce en remplissant sur le Web un formulaire qui en interdit la redistribution. De plus, il est permis de redistribuer des fichiers "diff" à appliquer aux sources. Le seul cas où il faut signer un accord commercial avec Sun et leur verser de l'argent est celui de l'utilisation des sources à des fins commerciales. Cependant, il est dans l'esprit de cet accord de signer la licence d'utilisation non-commerciale des sources, de les récupérer, de les porter et de distribuer totalement librement les exécutables résultants ! Sun affirme que le but principal d'un tel contrôle est d'empêcher le langage de muter vers des dialectes incompatibles. C'est ce vers quoi tend la licence. Elle semble cependant avoir été conçue de façon à permettre aux hackers de s'amuser gratuitement. </sect1> <sect1>Quelle est l'attitude de Sun vis-à-vis des implémentations et outils Java gratuits ? <p> D'après la page de licence de Sun : <quote> Les spécifications du langage Java et de la machine virtuelle Java sont OUVERTES et sous copyright de Sun Microsystems, Inc. </quote> <quote> Les nouvelles implémentations du compilateur et de l'interpréteur Java sont autorisées sans avoir besoin de licence de Sun, du moment que de telles implémentations sont créées à partir des spécifications publiées et sans utilisation directe ou indirecte d'implémentations, de propriétés intellectuelles ou marques commerciales de Sun. </quote> (NdT  la traduction ci-dessus n'engage ni Sun ni l'auteur de ce document) Ainsi, si vous voulez vous lancer dans la création d'un clone gratuit de Java à partir des spécifications publiées, Sun ne fera rien pour vous en empêcher. <p> Les gens de Sun utilisent le terme de <sq>portage sauvage</sq> pour désigner les implémentations de Java qui sont réalisées ailleurs que chez Sun ou ne s'appuient pas sur du code dont Sun detient la licence. Parfois le terme semble avoir l'une de ces significations, parfois l'autre. Ils ont l'air de penser que de telles implémentations existent déjà, mais nous ne savons pas où l'on peut les trouver, ni si elles sont gratuites. Les gens de Sun semblent envisager cette situation avec sérénité. <p> Sun a mis au point un ensemble de logiciels de validation. Sun affirme que sera certifié tout portage Java qui passe ces tests avec succès. Cela sera-t-il gratuit ? Nous n'en savons rien, mais Sun affirme que ces logiciels seront <sq>disponibles publiquement</sq> en 1996, ce qui semble orienter vers la gratuité. Ils sont également prêts à certifier des <sq>portages sauvages</sq> ce qui, apparemment, n'est pas encore arrivé. </sect1> <sect1>Peut-on trouver des clones de Java dont les sources soient librement redistribuables ? <p> On peut trouver un clone du compilateur Java en début de développement. Il s'appelle guavac et vous pourrez trouver des informations à son sujet à l'adresse <htmlurl url="http://http.cs.berkeley.edu/~engberg/guavac" name="http://http.cs.berkeley.edu/~engberg/guavac">. Des rumeurs ont couru indiquant que le projet GROW de Cygnus Software prévoyait d'intégrer un interpréteur de code objet Java. Elles étaient fausses : ce qui est en cours de développement est un traducteur de Java vers Scheme qui ne passe pas par le J-code. Pour plus de détails sur le projet GROW, consultez <htmlurl url="http://www.cygnus.com/tiemann/grow/" name="http://www.cygnus.com/tiemann/grow/">. Erik Troan de Red Hat et l'auteur de ce document tentent de former un groupe de développement pour mener à bien le reste du travail. Actuellement, l'idée est d'utiliser guavac comme compilateur, Erik Troan s'occupant de la bibliothèque de classes et l'auteur de ce HOWTO de l'interpréteur de J-code (si Cygnus n'y parvient pas auparavant). Ce projet devait être nommé <sq>Mr Coffee</sq>, ce qui était tentant, mais s'appellera probablement JOE (Java Open to Everyone). <sect1>Peut-on trouver des outils Java librement redistribuables ? <p> Vous pourrez trouver un mode GNU Emacs pour l'édition de Java à l'adresse <newline> <htmlurl url="ftp://java.sun.com/pub/java/contrib/emacs" name="ftp://java.sun.com/pub/java/contrib/emacs">.<newline> Note : ce mode requiert l'utilisation de <tt>c++-mode.el</tt> et ne fonctionne pas avec le mode <tt>cc-mode.el</tt> distribué avec Emacs 19. </sect1> </sect> <sect>Questions concernant Java sous Linux <p> Vous apprendrez ici les astuces de base permettant d'utiliser Java sous Linux. <sect1>Peut-on trouver Java et HotJava dans une distribution Linux ? <p> Pas pour l'instant, mais cela ne devrait être qu'une question de semaines. </sect1> <sect1>Où trouver la dernière distribution de Java pour Linux ? <p> Jetez un coup d'oeil à <htmlurl url="ftp://java.blackdown.org/pub/Java/linux" name="ftp://java.blackdown.org/pub/Java/linux">. Le dernier Java pour Linux peut y être récupéré. Il vaut mieux cependant commencer par lire <htmlurl url="ftp://java.blackdown.org/pub/Java/linux/README" name="ftp://java.blackdown.org/pub/Java/linux/README">. Les fichiers dont vous aurez besoin sont : <tscreen><verb> linux.jdk-1.0-try1.common.tar.gz et soit : linux.jdk-1.0-try3.static-motif-bin.tar.gz soit : linux.jdk-1.0-try3.shared-motif-bin.tar.gz, </verb></tscreen> suivant la présence ou non des bibliothèques partagées Motif sur votre système. Si vous utilisez Red Hat Linux ou tout autre système connaissant RPM, vous pouvez installer la beta 1.0 à partir de :<newline> <htmlurl url="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux-common-1.0b-1.i386.rpm" name="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux-common-1.0b-1.i386.rpm"><newline> et<newline> <htmlurl url="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux-static-1.0b-1.i386.rpm" name="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux-static-1.0b-1.i386.rpm"><newline> ou<newline> <htmlurl url="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux-shared-1.0b-1.i386.rpm" name="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux-shared-1.0b-1.i386.rpm"><newline>. Pour les utilisateurs Européens, le contenu de <htmlurl url="ftp://java.blackdown.org/pub/Java/linux" name="ftp://java.blackdown.org/pub/Java/linux"> et <newline> <htmlurl url="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux*" name="ftp://java.blackdown.org/pub/Linux/RPMS/i386/JDK-linux*"> est désormais répliqué en Grande-Bretagne à l'adresse : <htmlurl url="ftp://ftp.linux.org.uk/pub/linux/java" name="ftp://ftp.linux.org.uk/pub/linux/java">. Si cela intéresse quelqu'un, il s'agit de la machine <tt>zen.btc.uwe.ac.uk</tt>. Le miroir est réactualisé tous les jours vers 6 heures du matin, heure locale. Ce portage (réalisé par Randy Chapman à partir des sources de Sun) est celui auquel il est fait référence partout ailleurs dans ce document sous le nom de JDK (Java Development Kit). </sect1> <sect1>Quel est l'environnement requis pour exécuter Java ? <p> Pour commencer, il faut un système Linux ELF. Aucun support a.out n'est disponible et, vue la vitesse à laquelle le monde Linux passe à ELF, il est peu probable qu'il y en ait jamais un. <p> Il vous faut un noyau 1.2.13 ou plus récent. Il semble y avoir un bug dans la fonction <tt>getcwd(3)</tt> des noyaux antérieurs, ce qui est fatal à bin/javac qui n'en vérifie pas le code de retour. <p> Ces bibliothèques sont également nécessaires : <descrip> <tag>libc.so.5 => /lib/libc.so.5.2.18</tag> (La bibliothèque C standard) <tag>libX11.so.6 => /usr/X11/lib/libX11.so.6.0</tag> (La bibliothèque de base de X11R6) <tag>libXt.so.6 => /usr/X11/lib/libXt.so.6.0</tag> (La bibliothèque de la boîte à outils Athena) <tag>libXext.so.6 => /usr/X11/lib/libXext.so.6.0</tag> (La bibliothèque d'extensions X) <tag>libXpm.so.4 => /usr/X11/lib/libXpm.so.4.3</tag> (La bibliothèque X de gestion des pixmaps) <tag>libdl.so.1 => /lib/libdl.so.1.7.9</tag> (Le support du chargement dynamique de modules objet) </descrip> Il n'est pas impossible que les bibliothèques de support du C et de X soient déjà installées sur votre système. <p> Si vous ne l'avez pas déjà, récupérez <tt>libc.5.2.18.bin.tar.gz</tt> sur <htmlurl url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/" name="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">.<newline> Décompressez et détarez-le, puis copiez dans /lib les fichiers contenus dans le répertoire lib créé. Si vous n'avez pas une version récente de <tt>ld.so</tt> (ou <tt>libdl.so.1.7.*</tt>), il vous faut la mettre à jour. <tt>ld.so.1.7.9</tt> et <tt>ld.so.1.7.11</tt> fonctionnent, mais pas les versions plus anciennes ni <tt>ld.so.1.7.10</tt>. Récupérez <tt>ld-so.1.7.14.tar.gz</tt> sur <htmlurl url="ftp://ftp.ods.com/linux/" name="ftp://ftp.ods.com/linux/">. <newline> Décompressez-le et détarez-le, puis lancez <em/instldso.sh/ qui se trouve à la racine de l'arborescence ainsi créée. Vous trouverez une bibliothèque Xpm adéquate sur <htmlurl url="ftp://sunsite.unc.edu/pub/Linux/libs/X/libXpm.3.4f-ELF.tar.gz" name="ftp://sunsite.unc.edu/pub/Linux/libs/X/libXpm.3.4f-ELF.tar.gz">. </sect1> <sect1>Ai-je besoin de Netscape ? Puis-je l'utiliser ? <p> Netscape est indispensable, car HotJava n'est pas encore disponible pour les versions beta 1.0. Selon Randy Chapman, <quote> Sun a fortement modifié l'interface awt dans le JDK et HotJava n'a pas encore été adapté. Sun a promis de le faire et la nouvelle version de HotJava devrait fonctionner parfaitement avec linux-jdk. </quote> Aucune date n'a été annoncée. <p> Netscape supporte Java depuis la version 2.0b3. On le trouve sur ftp[1-7].netscape.com (i.e. sur ftp1.netscape.com, ftp2.netscape.com,... etc.). La version 2.0b4 permet de lire des applets depuis les URL de type file:, ce que ne permettait pas la version 2.0b3. Ceci devrait être d'un grand secours pour ceux qui ne disposent que de peu de mémoire (il n'est plus nécessaire de faire tourner un démon httpd). La version actuelle est la 2.0b6. Le fichier à récupérer est : /2.0beta6/unix/netscape-v20b6a-export.i486-unknown-linux.tar.Z. <p> Notez que Netscape tourne aussi sur des systèmes a.out. Il est donc possible, en théorie, d'écrire une application Java, de la faire compiler par quelqu'un d'autre (comme par exemple <htmlurl url="http://mars.blackstar.com" name="BlackStar Public Compiler">), et d'en voir le résultat sur votre système. Si cela ne vous suffit pas, passez en ELF. Assurez-vous que la variable d'environnement CLASSPATH ne soit <em/pas/ positionnée lorsque vous lancez netscape : cela a tendance à provoquer des plantages de celui-ci. Si vous suivez ces conseils, vous ne devriez pas avoir trop de problèmes. La version Linux de netscape a quelques problèmes connus. D'une part, il n'y a pas de son. D'autre part, seul l'affichage en 8 bits fonctionne : l'affichage en 16 bits provoque des plantages. La version 2.0b3 est parfois sujette à des 'bus errors' lorsqu'elle fait appel à la fonction 'dispose' des frames. Bien que relativement robuste (cela mis à part), elle ne résiste pas à l'applet 'Impressionism' de Gamelan. </sect1> <sect1>Quels sont les newsgroups et mailing lists traitant de Java sur Linux ? <p> <itemize> <item><em/java-linux/ : (maintenue by karl@blackdown.org) Discussions et développements concernant le portage de Java sur le système d'exploitation Linux. Envoyez un mail à <htmlurl url="mailto:java-linux-request@java.blackdown.org" name="java-linux-request@java.blackdown.org"> avec le mot <sq>subscribe</sq> pour être ajouté à la liste ; <item><em/java-linux-announce/ : (maintenue by karl@blackdown.org) Liste modérée des annonces concernant les projets de portage Java-Linux. Envoyez un mail à <htmlurl url="mailto:java-linux-announce-request@java.blackdown.org" name="java-linux-announce-request@java.blackdown.org"> avec le mot <sq>subscribe</sq> pour être ajouté à la liste ; <item><htmlurl url="news:comp.lang.java" name="comp.lang.java"> : Newsgroup traitant de Java en général ; <item><htmlurl url="news:alt.www.hotjava" name="alt.www.hotjava"> : Newsgroup traitant du navigateur HotJava. </itemize> </sect1> </sect> <sect>Mise en place de Java sur les principales distributions Linux du marché <p> Dans cette partie, nous rassemblons les recettes que nous avons reçues concernant la mise en place du portage de Java par Randy Chapman sur les principales distributions de Linux. <sect1>Distribution Slackware ELF noyau 1.2.13. <p> John Franks <htmlurl url="mailto:john@math.nwu.edu" name="(john@math.nwu.edu)"> indique que les étapes suivantes ont été fructueuses : <itemize> <item>Récupérez linux-x86.jdk.static-motif.tar.gz sur <htmlurl url="ftp://www.blackdown.org/pub/Java/linux/" name="ftp://www.blackdown.org/pub/Java/linux/">, décompressez-le et détarez-le (les noms des fichiers à récupérer ont changé pour le JDK beta 1.0) ; <item>Récupérez libc.5.2.18.bin.tar.gz (la distribution compilée, pas les sources) sur <newline> <htmlurl url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/" name="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">. Décompressez-le et détarez-le, puis copiez dans le répertoire /lib les fichiers présents dans le sous-répertoire lib de la racine de l'arborescence créée. Assurez-vous que /lib/libc.so.5 soit un lien symbolique vers ce fichier ; <item>Récupérez ld-so.1.7.14.tar.gz sur ftp://ftp.ods.com/linux/. Décompressez-le et détarez-le , puis exécutez "instldso.sh", qui se trouve à la racine de l'arborescence résultante. </itemize> Vous devriez maintenant être en mesure de compiler et de tester le programme et l'applet "hello world" de Sun en suivant les indications de <htmlurl url="http://java.sun.com/progGuide/index.html" name="http://java.sun.com/progGuide/index.html">. </sect1> <sect1>RedHat 2.1/Caldera Preview 2 <p> Steve Greene <htmlurl url="mailto:sgreene@access.digex.net" name="(sgreene@access.digex.net)"> rapporte le succès des étapes suivantes. Nous avons quelque peu modifié la recette ; les erreurs sont donc à porter à notre compte. Le JDK auquel il fait allusion est le portage du Java Developer's Kit réalisé par Randy Chapman. <itemize> <item>Récupérez le fichier rpm contenant <tt>ld.so.1.7.14</tt> sur un site miroir de Red Hat. Pour le trouver, cherchez <tt>/pub/mirrors/redhat-2.1/updates/RPMS/ld.so-1.7.14-i386.rpm</tt> dans un site miroir quelconque de Red Hat. Je sais qu'on peut le trouver sur ftp.pht.com et ftp.caldera.com. Il se trouve probablement également sur d'autres sites miroir. Récupérez-le et lancez `<tt>rpm -Uvh ld.so-1.7.14-1.i386.rpm</tt>' sur votre machine ; <item>Les utilisateurs de Red Hat 2.0 ou de Caldera Preview 2 pourront avoir besoin du programme 'which' (qui est appelé par certains des scripts du JDK). Un fichier rpm pour 'which' est disponible sur les sites miroir habituels de RedHat, comme élément de la distribution Red Hat 2.1. Récupérez et installez <tt>which-1.0.i386.rpm</tt>. Les utilisateurs de RedHat 2.1 doivent normalement déjà avoir which sur leur machine ou disponible dans leur distribution ; <item>Récupérez le(s) fichier(s) tar du JDK linké en statique. Détarez-le en un endroit pratique. J'ai placé le mien dans <tt>/usr/local</tt>, si bien qu'est créé <tt>/usr/local/java/...</tt> ; <item>Afin de pouvoir exécuter java en tant qu'utilisateur autre que root (ce qui est une bonne idée !), faites un <tt>chmod 666 /dev/zero</tt>. Red Hat et Caldera ont par défaut des droits incorrects sur ce périphérique ; <item>Si vous ne l'avez pas déjà fait, lancez ldconfig en tant que root pour charger les nouvelles bibliothèques. Si vous utilisez '<tt>ldconfig -v</tt>', vous pourrez vérifier que toutes les bibliothèques soient bien chargées (au moins, nous n'avons pas à commencer par bâtir un système ELF !) ; <item>Assurez-vous d'être connecté en tant qu'utilisateur classique (e.g. pas root). Lancez X-Window, un xterm et essayez quelque chose ! </itemize> </sect1> <sect1>Unifix <p> Stefan Middenforf écrit : Unifix est une distribution de Linux en langue allemande, assez populaire. Quelques autres distribution s'en servent comme base : Linux Universe, vendue aux Etats-Unis, Linux 4U qui n'est pour l'instant distribuée qu'en Allemagne et Linux FT, que l'on trouve en Grande-Bretagne. La recette qui suit marche avec Unifix 1.7, Linux 4U 1st Edition, Linux Universe 2nd Edition et Linux FT 1.1. <itemize> <item>Copiez <tt>linux-x86.jdk.static-motif.tar.gz</tt> que l'on trouve à l'adresse :<newline> <htmlurl url="ftp://www.blackdown.org/pub/Java/linux/" name="ftp://www.blackdown.org/pub/Java/linux/"> dans le répertoire /usr/local, puis restaurez l'archive (grâce à gzip et tar) ; <item>Modifiez la première ligne du script <tt>.java_wrapper</tt> <tt>PRG=`which $0` >/dev/null 2>&1/ ennbsp;</tt>: <tt>PRG=`type $0 | cut -d ' ' -f 3` >/dev/null 2>&1/ </tt>; <item>Récupérez <tt>libc-5.2.18.bin.tar.gz</tt> (cela fonctionne aussi avec <tt>libc-5.2.16.bin.tar.gz</tt>), puis restaurez cette archive dans le répertoire / ; <item>Récupérez <tt>ld-so.1.7.12.tar.gz</tt> sur <tt>tsx-11.mit.edu</tt> (ou un site miroir) et restaurez-le dans /usr/local. Placez-vous dans le répertoire créé et lancez instldso.sh. Ceci exécutera également ldconfig. Il est probable que des versions plus récentes de ld-so fonctionneront également ; <item>Ajoutez /usr/local/java/bin à la variable d'environnement PATH ; <item>Récupérez netscape-v20b4-export.i486-unknown-linux.tar.Z, et restaurez-le dans /usr/local/<votre_Repertoire_Netscape> ; <item>Créez un lien de /usr/local/bin vers ../<votre_Repertoire_Netscape>/netscape ; <item>Placez /usr/local/<votre_Repertoire_Netscape>/moz2_0.zip dans /usr/local/lib/netscape/. </itemize> Une alternative à la modification du PATH est, selon Ralf Strobel, de : <itemize> <item>Copier les scripts .java_wrapper et appletviewer, ainsi que les liens @java, @javac, @javadoc, @javap et @jdb de /usr/local/java/bin vers /usr/local/bin, de façon à pouvoir les utiliser depuis n'importe où ; <item>Dans /java/bin/i586 vous pouvez ajouter un script appelé 'javadoc' #!/bin/sh `dirname $0`/java sun.tools.javadoc.Main -d <votre_Repertoire_HTML> $ où, si vous êtes l'utilisateur jrandom, <votre_Repertoire_HTML> correspond à ~jrandom/.java-html. </itemize> </sect1> </sect> <sect>Visualisation des applets <p> Pour lancer une démonstration sans passer par l'appletviewer, vous pouvez lancer la commande suivante depuis le haut de l'arborescence Java (/usr/local/java sur la plupart des machines) : <tscreen><verb> bin/java sun.applet.AppletViewer demo/<nom_repertoire>/exampleN.html </verb></tscreen> où <nom_repertoire> est le répertoire de la démonstration et N le numéro du fichier d'exemple (certains répertoires en contiennent plusieurs). Steve Green raconte qu'il a testé les tutoriels disponibles sur le site java de SUN et sur celui du NTMUG. Son expérience révèle quelques problèmes dans la syntaxe du tutoriel de Sun. C'est pourquoi il est passé à celui du NTMUG. L'application appletviewer requiert comme argument un fichier HTML contenant un marqueur APPLET. Par exemple, si votre fichier HTML Hello.html ressemble à : <tscreen><verb> <HTML> <HEAD> <TITLE> Programme Test Hello &etago;TITLE> &etago;HEAD> <BODY> Ceci est un test de l'appletviewer <APPLET CODE="Hello1.class" WIDTH=150 HEIGHT=25> &etago;APPLET> &etago;BODY> &etago;HTML> </verb></tscreen> La commande <tt>appletviewer Hello.html</tt> vous montrera l'applet. L'avantage de l'appletviewer est que les événements envoyés à l'applet (start(), init(), etc) sont conformes aux spécifications de Sun, ce qui n'est pas le cas de Netscape 2.0b4 (probablement à cause d'un bug). L'un des inconvénients d'appletviewer est sa grande lenteur par rapport à Netscape. Lorsque vous lancez Java pour la première fois, une fenêtre de licence similaire à celle de Netscape est affichée. </sect> <sect>Problèmes connus <p> <sect1>GNU make ne fonctionne plus après l'installation de Java <p> Les versions récentes de libc corrigent un bogue qui en cachait un autre dans la version GNU de make (le symptôme en est que make ne cherche plus les règles dans les Makefile). Un patch corrigeant ce problème est inclus dans la distribution 5.2.8 de libc. </sect1> <sect1>Vous avez des erreurs <tt>dirname: too many arguments</tt> <p> Votre variable d'environnement CLASSPATH n'est pas initialisée correctement. Dans le fichier .java_wrapper, on trouve quelques lignes ressemblant à : <tscreen><verb> PRG=`which $0` J_HOME=`dirname $PRG`/.. </verb></tscreen> Malheureusement, la commande which généralement fournie avec Linux est horriblement défectueuse et certains shells risquent d'affecter à $0 le chemin complet. Selon Randy Chapman, la solution est d'utiliser soit : <tscreen><verb> J_HOME=`dirname $0`/.. </verb></tscreen> soit, de façon plus sûre : <tscreen><verb> J_HOME=/usr/local/java </verb></tscreen> Un autre correctif, proposé par Dave Dittrich, est : <tscreen><verb> PRG=`csh -c "which $0"` </verb></tscreen> Quant à Tim Farnum, il propose de changer la ligne PRG=`which $0` en : <tscreen><verb> PRG=$0 </verb></tscreen> Lutz Behnke, enfin, suggère : <tscreen><verb> PRG=`type -path $0` >/dev/null 2>&1 </verb></tscreen> Une modification similaire doit être appliquée au script d'appletviewer. </sect1> <sect1>Vous avez des erreurs du type <tt>cannot find class java/lang/Thread</tt> <p> Votre variable d'environnement CLASSPATH n'est pas initialisée correctement. Voir plus haut. </sect1> <sect1>Un message d'erreur fait référence à /dev/zero <p> Passez root et faites un <tt>chmod 666 /dev/zero</tt>. </sect1> <sect1>SEGFAULT <p> Il peut arriver que votre écran se remplisse de messages d'erreurs, que le système remplisse joyeusement votre mémoire virtuelle, puis se bloque. Dans ce cas, il vous manque probablement une bibliothèque quelque part. Lancez ldconfig -v et regardez ce qu'il manque. Il est également possible que les variables d'environnement LD_LIBRARY_PATH ou CLASSPATH ne soient pas positionnées. Enfin, il se trouve que certaines applets sont boguées et bloquent le JDK Linux (il y a d'ailleurs un moyen d'éviter le blocage en ayant un autre xterm dans lequel tourne top. Il suffit alors d'utiliser top pour tuer le processus java AVANT qu'il remplisse la mémoire virtuelle et bloque le système). Java semble nécessiter d'importantes ressources. Il est donc conseillé de restreindre au maximum le nombre d'applications ouvertes ou qui s'exécutent. Il parvient à se charger sur un 486DX-2-75 avec 8 Mo de RAM et 16 Mo de swap (cela prend tout de même une minute). L'auteur a ainsi réussi à faire tourner deux applets animées simultanément (ou à peu près) avant que le système se retrouve à court de mémoire virtuelle et se bloque. </sect1> <sect1>bin/java, bin/javac, ou bin/appletviewer vous renvoie un message d'aide <p> Vous avez oublié des paramètres de la ligne de commande. </sect1> <sect1>Les applets apparaissent bien dans l'appletviewer, mais pas lorsqu'elles sont placées sur un serveur Web. <p> Une erreur classique ayant cette conséquence est d'associer aux applets un type MIME incorrect. Votre serveur doit renvoyer avec l'applet un en-tête indiquant qu'elle est du type MIME <tt>text/plain</tt>, <tt>application/octet-stream</tt> ou tout autre type pour lequel le client ne dispose pas d'un module de traitement spécial. La manière de remédier à cela dépend du serveur que vous utilisez. (John Franks) Il semble également que <tt>tinyhttpd</tt>, un serveur HTTP écrit en Perl, renvoie un <tt>content type</tt> incorrect. Apache, en revanche, semble fonctionner relativement correctement. </sect1> <sect1>Fichier de traces <p> Selon Joey Oravec, HotJava conserve un fichier de traces des actions qu'il accomplit et des éventuels problèmes qu'il rencontre. Si vous devez établir un diagnostic par vous-même, examinez le fichier $HOME/.hotjava/weblog, dans le répertoire racine de l'utilisateur. Ce fichier vous permettra de repérer plus aisément s'il vous manque une bibliothèque ou s'il s'agit d'un problème similaire. </sect1> </sect> <sect>Ressources associées <p> Les informations générales concernant Java peuvent être trouvées dans la FAQ publiée dans le newsgroup <htmlurl url="news:comp.lang.java" name="comp.lang.java"> et disponible à l'adresse <htmlurl url="http://www.city-net.com/~krom/java-faq.html" name="http://www.city-net.com/~krom/java-faq.html">. <p> Un autre document du type FAQ, plus ancien, a été écrit par Joey Oravec <htmlurl url="mailto:joey@sun.science.wayne.edu" name="joey@sun.science.wayne.edu">. On peut le trouver à l'adresse <htmlurl url="http://www.science.wayne.edu/~joey/java/linux.html" name="http://www.science.wayne.edu/~joey/java/linux.html">. Il traite principalement de la version alpha, mais il se pourrait qu'il fusionne avec la FAQ citée ci-dessus. <p> Voici une liste de quelques pages WWW traitant de Java : <itemize> <item><htmlurl url="http://substance.blackdown.org/java-linux.html" name="Karl Asha's General Linux Java Page"> ; <item><htmlurl url="http://homer.ncm.com/java-linux/" name="LinuxJava Mailing List"> ; <item><htmlurl url="http://www.cs.utexas.edu/users/hiep/netjav.html" name="Netrek for Java"> ; <item><htmlurl url="http://cirrus.sprl.umich.edu/javaweather/" name="Blue-Skies for Java"> ; <item><htmlurl url="http://www.parnasse.com/java.shtml" name="Java Hints Page">. </itemize> </sect> <sect>A ajouter... <label id="needed"> <p> <itemize> <item>Plus de recettes propres aux différentes déclinaisons de Linux. </itemize> </sect> <sect>Remerciements <p> L'auteur adresse ses plus vifs remerciements à tous ceux qui ont contribué à ce document, en particulier à : <itemize> <item>John Franks <john@math.nwu.edu> ; <item>Zachary DeAquila <zachary@zachs.place.org> ; <item>Steve Greene <sgreene@access.digex.net> ; <item>Dave Dittrich <dittrich@cac.washington.edu> ; <item>Dave Flanagan <dave@ora.com> ; <item>Joey Oravec <joey@sun.science.wayne.edu> ; <item>Adam Smith <aws@cs.brown.edu> ; <item>Joe Buck <jbuck@Synopsys.com> ; <item>Omar Loggiodice <ologgio@netdepot.com> ; <item>Stefan Middendorf <mdorf@stud.fh-heilbronn.de>. </itemize> La présente version de ce document inclut le mini-HOWTO de Steve Greene pour Red Hat/Caldera, souvent annoncé mais jamais publié. L'auteur a également pêché quelques informations utiles sur la page WWW de Joey Oravec -- grâces lui en soit rendues. La liste des autres HOWTOs et FAQs maintenus par l'auteur peut être consultée sur sa page d'accueil <htmlurl url="http://www.locke.ccil.org/~esr/home.html" name="http://www.locke.ccil.org/~esr/home.html">. La liste des HOWTOs en français peut être consultée sur <htmlurl url="http://www.loria.fr/linux/" name="http://www.loria.fr/linux/">. Le traducteur, enfin, souhaite remercier Pierre Vassellerie <htmlurl url="mailto:Pierre.Vassellerie@obspm.fr" name="(Pierre.Vassellerie@obspm.fr)"> et Bernard Choppy <htmlurl url="mailto:choppy@imaginet.fr" name="(choppy@imaginet.fr)"> pour leur aide dans la mise en forme et la correctionde ce document. </sect> </article>