Page suivante Page précédente Table des matières
6. Java et Linux
Par Shay Rojansky
6.1 Le langage Java
Récemment, Java a fêté son 3ème anniversaire. Java, qui n'a tout d'abord été perçu que comme un moyen parmi d'autres pour animer des pages web et y mettre un peu de sel, est finalement devenu bien plus que cela. À ce jour, des multinationales de l'informatique ont confirmé leur soutien à Java et de nouvelles bibliothèques Java ont été définies en un temps record. La technologie Java permet enfin aux programmeurs d'écrire des programmes vraiment multi-plateformes. Elle leur offre des outils avancés de conception d'interfaces aisément portables, inclut des mécanismes de programmation multi-fils dans le langage (multithreading), et bien plus encore.
Dans le même temps, nous avons assisté à des événements importants dans le monde informatique. Microsoft, jusqu'ici inattaquable, est sérieusement menacé par l'action anti-trust mené par le Département de la Justice et vingt autres états des États-Unis. Netscape a ouvert le code source de Communicator et sera peut-être la première grande société à profiter du mouvement des logiciels libres. Ceci a beaucoup attiré l'attention d'entreprises qui avaient jusque-là craint ce principe de développement.
Quelle est l'influence de tout ceci sur le système d'exploitation Linux ? Cela signifie qu'une porte nous est ouverte. Jamais la situation n'a été aussi propice à l'action qu'aujourd'hui. D'une part, l'industrie évalue sérieusement Linux en tant que système d'exploitation ouvert (et gratuit). Et puis, si Netscape ouvre le code de son navigateur, pourquoi ne pas employer un système d'exploitation ouvert ? D'autre part, la technologie Java offre un moyen d'écrire des applications indépendamment des machines sur lesquelles elles seront exécutées, et la majeure partie des acteurs industriels s'y est ralliée.
6.2 Java et la communauté Linux
La communauté Linux, pourtant, a toujours traité Java avec une certaine distance. Le langage qui a promis de renverser l'hégémonie de Microsoft, rêve que partage tout partisant de Linux, n'a pas été accepté au sein du mouvement de développement de Linux. Plusieurs raisons expliquent cet état de fait.
Tout d'abord, Java est un langage propriétaire de Sun Microsystems. Ce qui veut dire que Sun contrôle tous les aspects du langage, des bibliothèques standards aux conditions de license. Les tactiques employées par Microsoft, comme changer les bibliothèques de J++, leur environnement de programmation Java, et rendre leur machine virtuelle incompatible avec les machines virtuelles de leurs concurrents, ont forcé Sun à s'octroyer le droit exclusif d'accorder à un produit le label « Compatible Java ». Bien que ce soit probablement la seule solution pour contrer les pratiques malhonnêtes de Microsoft, aucun langage n'a jusqu'ici été autant sous le contrôle d'une seule et unique société. La communauté Linux a vivement réagi à ce type de contrôle.
Deuxièmement, l'aspect multi-plateformes de Java, qui repose sur la Machine Virtuelle Java, fait que les programmeurs ont plus l'impression de contribuer à l'environnement Java qu'à Linux. Ce aspect implique aussi qu'il est plus difficile d'exploiter les caractéristiques de Linux.
Troisièmement, Java est encore assez lent. De nombreuses améliorations sont cependant disponibles, tels les compilateurs « juste-à-temps » et Hotspot de Sun (qui n'est qu'en version bêta). Java a, sans consteste, progressé depuis sa création, mais son exécution demande encore des plateformes puissantes, or le monde Linux tend à accorder beaucoup d'importance à la vitesse et un des principaux avantages de Linux est sa capacité à fonctionner sur des matériels obsolètes.
6.3 Les avantages de la programmation Java
Malgré toutes les inconvénients liés à sa nature, Java reste la seule opposition sérieuse faite au monopole de Microsoft ces dernières années. C'est aussi un langage avancé, créé de toutes pièces en gardant à l'esprit les principes modernes de programmation. Toutes les complications conservées par le C++ pour assurer une compatibilité ascendante avec le C n'apparaissent pas dans Java, de même que d'autres caractéristiques trop complexes comme l'héritage multiple. De plus, un gestionnaire de mémoire automatique affranchi le programmeur de la nécessité de libérer « manuellement » la mémoire allouée, ce qui réduit de manière conséquente les temps de développement. Les fils d'exécution (threads) sont si bien intégrés au langage qu'ils deviennent un outil indispensable.
J'espère que les développeurs Linux réviseront leur opinion concernant Java et viendront à l'utiliser régulièrement comme langage de développement. Certains développeurs Linux ont déjà fait faire des progrès impressionants aux outils Java, je pense en particulier à plusieurs machines virtuelles et compilateurs Juste-A-Temps. Jettez un coup d'oeil à ces outils si vous envisagez d'utiliser Linux comme plateforme de développement Java. Pour plus d'informations concernant Java et Linux, consultez http://www.blackdown.org/java-linux.html.
Je vais maintenant passer en revue quelques éléments clefs du JDK 1.1.x. Notez que la prochaine version (1.2) est encore en bêta mais devrait être disponible sous peu.
6.4 La sérialisation des objets (Object serialisation)
La sérialisation des objets consiste à les transformer en une chaîne d'octets. En pratique, ceci est utilisé pour envoyer un objet à travers une connexion réseau ou pour le conserver dans un fichier. Généralement, le programmeur qui désire conserver une structure de données dans un fichier doit écrire un algorithme spécifique, ce qui est souvent pénible et ennuyeux. Java simplifie grandement cette opération en la réalisant automatiquement. Par exemple, si vous avez en mémoire un arbre que vous souhaitez envoyer à un autre programme par le réseau, il vous suffit d'envoyer l'objet racine et Java suivra les pointeurs de la structure pour copier l'arbre entier. Pour des utilisations particulières (considérations de sécurité), il est possible de spécifier comment l'objet doit être transformé en une chaîne d'octets.
6.5 Classes de Base de Java (Java Foundation Classes - Swing)
La version d'origine d'AWT, l'ensemble de classes Java permettant de composer des interfaces graphiques, était très peu pratique d'utilisation. Beaucoup de composants manquaient et le modèle de programmation était inutilement complexe. Le nouvel ensemble avalisé a pour nom de code Swing. Swing offre une grande variété de petits composants entièrement programmés en Java qui ne reposent pas sur l'architecture de fenêtrage de l'OS, contrairement à AWT. Ceci assure un comportement homogène sur toutes les plateformes. Un autre avantage est que le comportement et l'apparence peuvent être modifiés à la volée, ce qui vous permet de passer d'une présentation « à la windows » à une présentation « à la Motif » alors que le programme est en cours d'exécution. Il est même possible de définir sa propre présentation.
6.6 Invocation de méthodes distantes (RMI)
RMI (Remote Method Invocation) est l'équivalent Java de CORBA. Ce mécanisme permet d'invoquer les méthodes d'objets manipulés par une autre machine virtuelle (et donc éventuellement un autre ordinateur). Pour ceux d'entre vous qui connaissent RPC (Remote Procedure Call - Appel de procédures distantes), mécanisme fréquemment utilisé dans le monde UNIX, sachez que RMI (et CORBA) sont leurs équivalents orientés objets. Le principe de « programmation distribuée » est devenu très à la mode ces derniers temps. En général, il demande une intégration étroite des programmes s'exécutant sur le réseau : les objets qui s'exécutent sur différentes machines peuvent communiquer par simple appel de méthode. Ceci est accompli par le programme en conservant une copie de l'objet distant. Lorsque la méthode de cette copie est appelée, Java envoie la requête à travers le réseau et retourne la valeur obtenue de manière transparente. L'intégration poussée des mécanismes de sérialisation et de distribution des appels dans le langage montre clairement l'avantage d'un langage moderne conçu pour supporter ce type d'opérations.
6.7 Interface Native Java (JNI)
Les programmeurs sont souvent frustrés lorsqu'ils veulent profiter des avantages de Java dans un projet destiné à une plateforme unique. La JNI leur offre la possibilité d'interfacer Java avec des objets spécifiques à la plateforme choisie pour faire appel à leurs fonctions. Il est donc possible d'écrire un code C (ou autre) optimisé pour une architecture précise, qui sera utilisé depuis Java. Bien sûr, le résultat ne sera pas portable, à moins de proposer une version de l'objet en question pour chacune des plateformes d'exécution. Cela peut par exemple être utile pour accéder à la base de registres de Windows et pour recevoir les signaux UNIX.
6.8 Connexion Java aux Bases de Données (JDBC)
JDBC est une interface d'accès SQL aux bases de données, qui offre un moyen d'effectuer des requêtes SQL indépendamment de la base de données employée, pourvu qu'elle dispose de pilotes JDBC. Actuellement, de nombreuses bases de données en disposent, et pour celles qui ne proposeraient qu'un accès par ODBC, il est toujours possible d'utiliser le pont entre JDBC et ODBC. Pour plus d'information, lire http://java.sun.com/products/jdbc/jdbc.drivers.html.
6.9 Conclusion
Intéressez-vous sérieusement à Java. Si nous pouvions rendre les applications indépendantes des systèmes d'exploitation sur lesquels elles s'exécutent, nous pourrions librement choisir celui que nous préférons. Bien que l'esprit de la communauté Linux soit empreint d'une certaine forme « d'anti-conformise rebelle », Java a un gros potentiel qu'il serait dommage de négliger. L'association de Linux et Java pourrait sortir en-tête de la course actuelle.
6.10 En savoir plus
Paru dans le n°32 de la Linux Gazette.
Adaptation française Nicolas Chauvat
Page suivante Page précédente Table des matières