Écrire du code portable sous Linux - Trois méthodes différentes

Gazette Linux n°148 — Mars 2008

Hervé Ly-Sunnaram

Adaptation française 

Article paru dans le n°148 de la Gazette Linux de mars 2008.

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

1. Mono
2. Lazarus
3. Java
4. Conclusion

Vu le nombre de plateformes et de systèmes d'exploitation différents utilisés aujourd'hui, écrire du code qui fonctionne sur un seul système, une seule configuration ou une seule plateforme, peut entraîner une réduction considérable du nombre de personnes qui pourraient utiliser votre programme. Pour moi, si c'est du bon travail, c'est quand même du gaspillage.

Pour éviter ce problème, une personne peut avoir le choix entre plusieurs approches possibles. Dans cet article, nous allons présenter trois d'entre elles: Mono (avec MonoDevelop), Lazarus et Java (avec NetBeans). Nous verrons comment faire un "Hello World" basique avec chacune de ces méthodes et comment l'exécuter sous Linux et Windows.

1.  Mono

"Mono est une plateforme logicielle conçue pour permettre aux développeurs de créer facilement des applications multiplateformes" - http://www.mono-project.com/

Mono est une plateforme logicielle Open Source développée pour être une mise en oeuvre de la plate-forme de développement .Net de Microsoft. Elle permet d'exécuter des applications .Net sur des plateformes non supportées par Microsoft. Elle permet aussi de développer des applications Mono indépendantes de .Net qui fonctionnent sur tout système supporté par Mono (Linux, Mac OS X, Windows, etc.).

L'IDE [Integrated Development Environment, Environnement de développement intégré] le plus utilisé pour développer les applications Mono s'appelle MonoDevelop. C'est un IDE open source développé pour utiliser la plateforme Mono. Il est disponible essentiellement pour Linux mais il peut également être compilé et utilisé sous Windows et OS/X.

Avantages

  • Un seul exécutable peut être utilisé sur plusieurs systèmes, sans besoin de recompiler.

  • Mises à jour fréquentes.

Inconvénients

  • .Net n'est pas portable à 100%. Quelques applications peuvent nécessiter certains changements pour fonctionner.

  • Mono doit être installé sur la machine qui sera utilisée.

Développement d'une application Mono simple avec MonoDevelop:

Lancez MonoDevelop et, sur l'écran d'accueil, sélectionnez "Start a New Project". Ensuite, sélectionnez "GTK# 2.0 Project", donnez lui un nom, sélectionnez l'endroit où sera enregistré le projet et cliquez sur "Next". Sur l'écran suivant, appuyez sur "OK" et vous obtiendrez un projet vide avec un formulaire vide.

L'interface de MonoDevelop est assez simple. Sur la gauche de l'écran, on a la liste des fichiers des projets et sur la droite le contenu du fichier sélectionné. Si on appuie sur 'F5', le projet sera compilé et exécuté. Si on le fait maintenant, on verra apparaître un simple formulaire vide.

Essayons de développer notre application "Hello World". Dans la liste de fichiers, double-cliquez sur "MainWindow.cs". Cela vous affichera votre zone de saisie vide et une liste de composants que vous pouvez lui ajouter. Pour ajouter un composant, faites le glisser de la liste vers la zone.

Commencez en ajoutant "Fixed" qui se trouve dans le groupe de composants "Container". Cela vous permettra d'ajouter les composants de base, comme les boutons, à votre zone de saisie. Après avoir ajouté le conteneur "Fixed", ajoutez un bouton ("Button") et une étiquette ("Label").

Modifiez le nom de la zone de saisie en tapant "Hello World", le texte du bouton en tapant "Bonjour" et effacez le texte de l'étiquette. Pour y parvenir, premièrement, sélectionnez le formulaire (en cliquant sur son titre) et, dans le panneau des propriétés (juste en dessous de la liste des composants), cliquez pour agrandir le Window Properties. Ensuite, sélectionnez la propriété "Window Title" et modifiez-la en tapant "Hello World".

Maintenant, faites la même chose avec le bouton: modifiez sa propriété "Caption" (dans le groupe "Button Properties") en tapant "Hello"; puis avec le champ : modifiez sa propriété "Caption" en tapant "" (il suffit d'effacer tout ce qu'il y a dedans).

Maintenant que toutes les propriétés sont configurées, créons le code pour qu'un "Hello World!!!" s'affiche dès qu’un utilisateur clique sur le bouton. Sélectionnez le bouton, cliquez sur "Signals" (juste au-dessus de la liste des propriétés) et agrandissez le groupe "Button Signals". Ensuite, double-cliquez sur le signal "Clicked" pour que la procédure se crée pour vous. Puis double-cliquez dessus encore une fois pour y aller.

Vous verrez le code suivant:

    protected virtual void OnButton1Clicked(object sender, System.EventArgs e)
    {
    }
  

Remplacez-le par le code suivant (notez que les noms du bouton et du champ peuvent changer, les miens s'appellent "label1" et "button1". Si vous en ajoutez plus, ils pourraient s'appeler "label2", "button3", etc. Veillez à avoir les mêmes noms dans votre code et dans votre composant).

    protected virtual void OnButton1Clicked(object sender, System.EventArgs e)
    {
       label1.LabelProp = “Hello World!!!”;
    }

  

Arrivé là, notre application de test est prête à être exécutée. Il n'y a qu'à appuyer sur "F5" pour vérifier. Si vous voulez la compiler, appuyez sur "F8" et un fichier .exe sera généré dans le dossier "bin/Debug" où votre projet a été enregistré. Ce .exe peut être exécuté sur toute plateforme Mono installée sans qu'il n'y ait besoin de le modifier. Pour l'exécuter dans Windows, utilisez la commande suivante:

   mono "nom_du_fichier.exe"
 

2.  Lazarus

“Ecrivez une fois, compilez partout.” - http://www.lazarus.freepascal.org/

Lazarus est un IDE libre et Open-Source pour le compilateur 'free-pascal' (lui aussi libre et Open-Source) qui compile du code Pascal et Pascal-Objet (y compris le Delphi la plupart du temps). Cet IDE est porté actuellement sous Linux, Windows et FreeBSD. Le compilateur fonctionne dans bien d’autres systèmes d’exploitation, tels Windows CE et Mac OS/X.

Avantages

  • Le même code peut être compilé sur plusieurs systèmes différents.

  • Lazarus marche avec beaucoup de bibliothèques graphiques (GTK, GTK2, Win32, Carbon, etc.).

  • Lazarus n’a pas besoin que l’on installe des bibliothèques externes sur la machine de l’utilisateur.

Inconvénient

  • Il manque quelques composants (MaskEdit, Panels).

Développement d'une application Lazarus simple:

Quand on ouvre Lazarus pour la première fois, on voit apparaître un projet vide avec un formulaire vide. On appuie sur "F12" pour basculer sur l'affichage formulaire/code. En haut de l’interface, il y a une liste avec tous les composants déjà installés qui serviront à concevoir votre programme.

Pour notre exemple, commençons en plaçant un bouton et une étiquette dans la zone de saisie. Pour y parvenir, on double-clique sur le bouton "OK" dans la liste des composants, ce qui créera un bouton dans votre zone de saisie vide. Créez une étiquette ("label") de la même façon. L'étiquette est une petite boîte blanche contenant un ”A”. On peut faire glisser les composants dans le formulaire pour changer leurs emplacements ou pour les redimensionner.

Ensuite, nous allons changer certaines propriétés pour les commandes qu'on utilise. Pour ce faire, cliquez sur le bouton à l’intérieur de la fenêtre pour le sélectionner. Une fois fait, ses propriétés seront affichées dans la fenêtre ”liste des propriétés” (”Properties List”)  (par défaut, elle se trouve sur le côté gauche de l’écran). Cette fenêtre contient toutes les propriétés de la commande sélectionnée à ce moment-là et elle vous permet de changer leurs valeurs. Trouvez la propriété ”Caption” du bouton et modifiez la en tapant ”Hello”.

Après, faites la même chose avec l'étiquette et videz la propriété ”Caption” (il suffit d'effacer ce qu’il y a dedans). Finalement, sélectionnez la fenêtre (en cliquant sur un endroit vide) et modifiez sa propriété ”Caption” en tapant ”Hello World”.

Maintenant que toutes les propriétés sont configurées, nous pouvons ajouter le code pour que les éléments fonctionnent sur notre fenêtre. Ce que nous voulons, c'est faire apparaître "Hello World" dans l'étiquette quand l’utilisateur cliquera sur le bouton. Pour ajouter le code à notre bouton, double-cliquez dessus. Cela vous mènera à la fenêtre de code et créera la fonction qui sera lancée quand l’utilisateur double-cliquera sur le bouton. Il suffit d’ajouter le code indiquant ce que vous voulez qu'il fasse.

Pour ce faire, double-cliquez sur le bouton de votre fenêtre. Ceci nous amène au code du formulaire et crée une procédure vide appelée TForm1.Button1Click qui sera appelée quand l’utilisateur cliquera sur le bouton de la fenêtre. Remplacez le code par quelque chose dans ce style (notez que les noms du bouton et de l'étiquette peuvent changer, les miens s'appellent "label1" et "button1". Si vous en ajoutez plus, ils pourraient s'appeler label2, button3, etc. Changez-les pour avoir les mêmes noms dans votre code et dans votre composant).

    procedure TForm1.Button1Click(Sender :TObject) ;
    begin
	Label1.Caption:=’Hellow World!!!’;
    end;
  

C’est tout ce qu'il faut comme code et il ne fait que modifier la propriété "Caption" de "Label1" pour avoir "Hello World!!! ". Vous pouvez maintenant appuyer sur "F9" pour exécuter le programme et voir ce que donne le formulaire. Pour le faire fonctionner sur d’autres systèmes, il suffit de télécharger et installer Lazarus, d’ouvrir le projet et de le compiler. C'est aussi simple que ça.

Pour compiler l'application, on peut utiliser l’option "Build" dans le menu "Run".

Veuillez noter que si vous êtes sous Ubuntu et que vous avez installé Lazarus à partir de "Ajouter/Supprimer des programmes", vous devrez télécharger le package fpc-source (on le trouve ici) et l’installer manuellement, puis configurer Lazarus (Environment\Environment Options, paramétrer le FPC Source Directory : /usr/share/fpcsrc/) pour qu’il marche correctement.

3.  Java

"Mature, extrêmement robuste et étonnamment polyvalente, Java est maintenant une technologie très précieuse car elle permet aux développeurs d’écrire un programme sur une plateforme et de l’exécuter sur pratiquement toutes les autres..." - http://www.java.com/en/about

Java est le résultat de la combinaison de deux "choses" différentes : le Java Runtime Environment (JRE comportant la plateforme Java et la machine virtuelle Java) et le langage de programmation Java.

Le langage Java est un langage de programmation haut niveau orienté objet qui nécessite d’être compilé en ce que l’on appelle le Java ByteCode. Le JRE est chargé d’exécuter le code java compilé (il le remplace par du code exécutable natif de la plateforme ) et il est disponible sur plusieurs plateformes différentes.

Avantages

  • Le même code compilé peut être exécuté partout où le Java Runtime est installé.

  • Facile à transférer sur le Web.

Inconvénients

  • Nécessite que Java Runtime Environment soit installé sur la machine cliente.

  • Généralement pas aussi rapide que des programmes compilés ordinaires.

Développement d'une application Java simple:

Pour développer notre application Java sous Linux, nous allons utiliser un IDE appelé NetBeans. C'est un IDE très professionnel libre et open-source, qui fonctionne sous Linux, Windows, OSX et Solaris; on peut même recevoir un DVD gratuit, il n'y a qu'à demander (http://www.netbeans.org/about/media.html). N'oubliez pas d'installer le Java SDK avant d’installer Netbeans pour qu'il soit détecté lors de l’installation.

Pour commencer notre application d’essai, ouvrez NetBeans, démarrez un nouveau projet (File/New Project), sélectionnez "Java Desktop Application", donnez un nom au projet ("hello") et cliquez sur "Finish". On aura donc un nouveau projet avec une fenêtre qui comporte un menu et une barre de statut.

On peut maintenant ajouter un bouton et une étiquette qui seront utilisés dans ce projet : pour cela, faire glisser chaque composant de la liste des composants vers le panneau.

Maintenant, changeons les propriétés du bouton et de l'étiquette en sélectionnant d'abord le bouton. Il faut ensuite trouver la propriété "Text" dans la liste située à droite dans l'interface et la modifier en insérant "Hello". Ensuite, selectionnez l'étiquette, trouvez sa propriété "Text" et effacez l'ensemble de son contenu.

Maintenant que c'est fait, il est temps d'ajouter le code à notre fenêtre pour que ça marche. Pour cela, sélectionnez le bouton, cliquez sur le bouton "Events" (juste au-dessus des propriétés du bouton) et cliquez une fois sur l’évènement "Mouse Clicked". Ceci créera une procédure vide qui sera exécutée quand l’utilisateur cliquera sur le bouton. Pour faire apparaître un "Hello World!!! " dans l'étiquette quand l’utilisateur clique sur le bouton, changez la procédure vide afin que cela ressemble à ça (notez que les noms des boutons et de l'étiquette peuvent changer, les miens sont nommés jLabel1 et jButton1, mais si vous en ajouter plus d’un, ils s'appelleront jLabel2, jButton3, etc… Changez-les pour avoir les mêmes noms dans votre code et dans votre composant).

   private void jButton1MouseClicked(java.awt.event.MouseEvent evt){
	jLabel1.setText("Hello World!!! ");
   }
 

Une fois que c’est fait, vous pouvez appuyer sur "F6" pour exécuter votre programme. Pour créer le fichier .jar vous pouvez utiliser "F11" et pour exécuter le fichier .jar, faites:

   java –jar "nom_du_fichier_ici.jar"
 

Cela marchera partout où le JRE est installé.

4.  Conclusion

Toutes les méthodes présentées ici ont leurs avantages et leurs inconvénients, c’est à vous, développeurs, de choisir laquelle est la meilleure pour vos besoins, pour le programme que vous allez développer et pour les systèmes sur lesquels vous voulez que ce soit exécuté.

Il est aussi important de remarquer que deux des trois outils présentés ici, MonoDevelop et Lazarus, sont tout récents et qu’il peut donc y manquer quelques caractéristiques utiles, mais ils sont en développement permanent et mis à jour et améliorés régulièrement.