23
dossier \\ Linux 32 PROgrammez ! \\ Avril 2009 Tout ce qui faut savoirpo C’est devenu un rituel à Programmez ! A l’occasion du salon Solutions Linux, nous préparons un grand dossier Linux/ Open Source. Si dans les dernières éditions nous avions dévoilé les dessous des grands projets open source (OpenSuse, Gnome, Ubuntu, Eclipse, MySQL, OpenOffice…), cette année nous avons voulu nous concentrer sur le développeur et pourquoi et comment développer pour et sur Linux. © John Schreiner/illustrationOnLine.com

Tout Ce Qu'Il Faut Savoir Pour Dévelloper Sous Linux

Embed Size (px)

Citation preview

  • dossier \\ Linux

    32 PROgrammez ! \\ Avril 2009

    Tout ce qui faut savoir poCest devenu un rituel Programmez ! A loccasion du salon Solutions Linux,nous prparons un grand dossier Linux/ Open Source. Si dans les derniresditions nous avions dvoil les dessousdes grands projets open source(OpenSuse, Gnome, Ubuntu, Eclipse,MySQL, OpenOffice), cette anne

    nous avons voulu nous concentrer sur ledveloppeur et pourquoi et comment

    dvelopper pour et sur Linux.

    J

    ohn

    Sch

    rein

    er/il

    lust

    ratio

    nOnL

    ine.

    com

    32-58 19/03/2009 13:56 Page 32

  • Avril 2009 \\ PROgrammez ! 33

    dossier \\ Linux

    De nombreux lecteurs travaillent sur Windows,mais Linux intrigue et intresse. Commentdonc y passer sans trop de douleur quand onest dveloppeur ?Tout va dpendre du type dapplication que lon dve-loppe. Pour un dveloppeur Java, Linux est unemachine de dveloppement comme une autre. Denombreux outils y sont disponibles. Eclipse ou Net-beans fonctionnent parfaitement dessus. Pour dudveloppement C++, Linux offre aussi une bonneplate-forme. Longtemps, Linux a souffert dune imageaustre pour le dveloppeur habitu un Visual Stu-dio, Dreamweaver. Les environnements de typeRAD ntaient pas les plus frquents. Aujourdhui, Linux dispose de plusieurs environne-ments graphiques trs performants : Eclipse, Net-Beans, Ajunta, Kdevelop, Qt-creator, MonoDevelop.Par contre, sur le dveloppement web pur et le designweb, les choses voluent peu. Il y a quelques annes,nous avions eu linitiative Nvu, mais qui depuis nestplus maintenue et nous attendons toujours son suc-cesseur. Adobe qui sort Flex et Air pour Linux na visi-blement pas prvu de versions Linux de Photoshop,de Dreamweaver et de lensemble de la CreativeSuite. Il existe bien des petits outils comme BlueFishmais il manque toujours un outil web complet.Pour un dveloppeur arrivant sur Linux et ne connais-sant pas grand chose notre Tux favori, le mondeLinux peut paratre un peu dconcertant : nom-breuses distributions, plusieurs modles de dploie-ment des applications, diffrentes librairies

    dinterface, des implmentations pouvant diffrerdune distribution une autre, des versions diff-rentes, etc. Quand on est habitu Windows ou MacOS X, cest un peu la panique Il faut aussi se poser la question de ce que lon veutfaire avec Linux. Est-ce mon nouveau poste de dve-loppement ? Quest-ce que je veux dvelopper ? Est-ce un dveloppement dapplications pour Linux ou undveloppement sur Linux (cest--dire des applica-tions qui sont indpendantes du systme comme desapplications web) ? Selon lapplication, les outils etlapproche changent. Si vous souhaitez dvelopperune application Linux, vous devrez dj savoir surquelle(s) distribution(s) tournera le projet, le langageque vous souhaitez utiliser. Sans oublier le choix deslibrairies (et les versions) et linterface graphique.Avec tout cela, vous disposerez de votre systme dedploiement cible Reste installer loutillage nces-saire et apprendre le modle de dveloppementLinuxDans ce dossier nous allons traverser lAtlantiquepour un reportage spcial au cur des laboratoiresde recherche et dveloppement de Mozilla, nouscomprendrons comment fonctionnent les Linux Stan-dard Base, le dveloppement dune application avecGnome. Sans oublier le tmoignage de dveloppeurs.Nous mnerons lenqute sur la lgalit du codesource et les problmes lgaux que lon doit consid-rer dans un projet.

    Bon Tux !

    Dossier coordonn par Franois Tonic

    our dvelopper sur Linux !/

    s

    lent

    32-58 19/03/2009 13:56 Page 33

  • " Le choix dpend du type de besoin etdu type dapplication dvelopper.Mais les outils restent fondamentale-ment les mmes dune distribution une autre. Bref, on aura peu de diff-rences ", commente Arnaud Dupuis(consultant Uperto). Le rel dfi pourle dveloppeur sera de choisir et devrifier les librairies : leurs versions,

    les disponibilits sur les dis-tributions. " Mme dans unedistribution, on peut avoirplusieurs versions. Il fautvrif ier les versions pr-sentes dans les distributions.Donc prudence ! ", rsumeAnne Nicolas (director ofEngineering, Mandriva).

    Compatibilit, incompatibilitDune manire gnrale, les librairiespeuvent se rvler complexes grer. Heureusement, il est possiblede se simplifier le travail en utilisantdes outils de vrification, contrlantles versions, la prsence par dfautde telle librairie. La Linux Foundationdispose de LSB (Linux Standard Base)et SuSe propose en ligne loutil BuildService. Mais cela reste un rel soucipour le dveloppeur, par exempleentre KDE 3.x et KDE 4 dont le mod-le rompt radicalement, avec notam-ment lutilisation des versions de Qt(librairie graphique) diffrentes. Maissouvent, le dveloppeur ayant choisisa distribution ne va pas aller voirail leurs. " Je pense que chacuncampe sur ses position. Il fallait uneentit (Linux Foundation, ndlr) pourimposer des rgles ", poursuit AnneNicolas. Mme si LSB et son outilAppChecker sont incomplets, ilsaident rellement le dveloppeur. " Ilpeut y avoir des problmes de compa-tibilit mais heureusement, cela est

    dossier \\ Linux

    34 PROgrammez ! \\ Avril 2009

    La parole aux dveloppeurs !Quand on dbute la programmation sur Linux, le dveloppeur non-linuxien peut treun peu perdu, ne pas savoir quoi faire. La premire question se poser est : " que veut-on dvelopper ?. De l, on peut circonscrire les besoins en outils, en librairies.Puis vient le choix de la distribution Linux prendre pour son dveloppement.

    (trs) rare, surtout quand on changede version majeure comme de Qt 3.3 Qt 4. " nuance A. Dupuis. Et pour les tests alors, on fait comment ?Une des solutions est de passer pardes machines virtuelles pour tester lesapplications dveloppes, cest pratiqueet rapide. Cependant, quand lapplica-tion a une grande dpendance avec lematriel, mieux vaut une distributioninstalle en dur sur un poste.

    Sources ou binaires ?Si votre application est un projet ou sivotre projet dvelopp doit tredploy sur des postes de travail, lap-proche du package ne sera pas iden-tique. Dans le premier cas, on pourraalors choisir la distribution dessources permettant une compatibili-t plus grande avec les distributions, condition que lutilisateur sache lesrcuprer et les compiler. Dans le cas du binaire, il faut gnrerles binaires pour chaque systme, outout du moins, vrifier la bonne com-patibilit de celui-ci. Quand un clientdemande un dveloppement spci-fique sur Linux, souvent, il imposerasa distribution ou harmonisera avecune unique distribution. Cela simplifie-ra grandement le dploiement.

    Linux : un march en puissance ?Si aujourdhui Linux sur le serveur estcommun notamment grce au LAMP,quen est-il ailleurs ? " Le dveloppeursur Linux crot, mais lentement. Leposte de travail reste en retrait ",commente A. Dupuis. En entreprise,le poste de travail Linux commence se rpandre do la bonne dynamiqueactuelle des SSII open source et clas-siques. Or tant que le poste de travail,ou que lordinateur Linux ne se dve-loppe pas plus auprs du grand public,

    les dveloppements dapplication Linuxauront du mal augmenter, mme sile march connat une croissance sur-tout auprs des grandes entreprises,des administrat ions. Mais s i lenombre dutilisateurs naugmente passignificativement, les diteurs ne por-teront pas leurs outils, faute dun mar-ch suffisant

    Les outils samliorentUne des critiques rcurrentes tait lemanque doutils graphiques linstardun Delphi, Visual Studio. " Long-temps ce fut une faiblesse. Maisaujourdhui, nous disposons dIDE per-formants : Ecl ipse, Qt Creator,Mono ", commente Anne Nicolas.Effectivement, ct IDE, le dvelop-peur sur Linux dispose de trs bonsIDE pour la plupart des dveloppe-ments. Le seul point faible demeure ledveloppement web avec labsencedun quivalent Dreamweaver etdoutils de design comparables Creative Suite dAdobe et Expressionde Microsoft. Cependant, mme si ondveloppe en C#, ASP.Net ou Flex, lesoutils existent. On dispose de Mono etde Moonlight (quivalent de Silver-l ight). Et Adobe propose depuisquelques mois les versions Linux de Flexet de Air.

    Comment passer notre Tux ador ?Il faut bien entendu se former ou sau-to former. Il est trs important debien comprendre la structure deLinux, comment fonctionne la plate-forme, les modles de dveloppe-ment, loffre logicielle, le packagingapplicatif (et les diffrences entre lesdiffrents formats). Des diteurs,comme Novell ou Mandriva proposentdes cycles de formations et/ou desressources ddis aux dveloppeurs.

    32-58 19/03/2009 13:57 Page 34

  • Programmez ! :comment aborderle dveloppementd'une application

    Linux ? De quellemanire choisir les outils,

    les librairies, voire sa distribution ?Michel Loiseleur : Le choix est vastelorsque l'on veut dvelopper une appli-cation Linux. Rien que pour les tool-kits graphiques, on dispose de Gtk,Qt, Tcl/Tk, Mono ou wxWidgets. Cestoolkits sont accessibles via des bin-

    dings pour la majoritdes langages de pro-grammation. Il est deplus en plus courant devoir sur un poste de tra-vail Linux une applica-tion code en plusieurslangages, avec uncoeur en C/C++ et desextensions ou une par-t ie graphique code

    dans un langage de script comme lePython ou le Ruby. On peut citercomme exemple Amarok ou BattleFor Wesnoth. Concernant les outils,CMake a fait ses preuves et est larfrence pour tout nouveau projet

    dossier \\ Linux

    36 PROgrammez ! \\ Avril 2009

    Michel Loiseleur est responsable technique OSSA (Linagora).Dveloppeur et utilisateur Linux et open source, il nous dvoileses outils, son quotidien.

    Portrait de dveloppeur

    qui ne veut pas perdre son temps surdes problmatiques de compilation.

    P. ! : Faut-il cibler la distribution, leslibrairies, les versions, l'interface,pour viter tout problme de com-patibilit ?M. L. : C'est effectivement plussimple, surtout lorsque l'on procdeuniquement la vente de binaires.Mais ce n'est pas obligatoire, on peuttout fait inclure les bibliothquessensibles dans son paquet binaire.Pour les toolkits graphiques, la rtro-compatibilit binaire est assure surl'ensemble des distributions. Autre-ment dit, une application Gtk 2.12fonctionnera sur l'ensemble des dis-tributions Linux disposant d'au moinscette version de Gtk. C'est identiquepour une application Qt.

    P. ! : Aujourd'hui, le poste de dve-loppement Linux se renforce avecl'arrive de Flex, Air, Moon, Moon-light, etc. quelles sont encore lesabsences d'outils qui peuvent gnerle dveloppeur ?M. L. : Je n'ai jamais eu utiliser unoutil sous Windows pour dvelopper.

    Mme les tests de compatibilit avecInternet Explorer ou Chrome peuventse faire sous Linux, grce Wine quia fortement volu depuis le soutiende Google sur le projet. Un autre outiltrs populaire s'appelle rdesktop, ilpermet d'tablir une connexion gra-phique avec une machine Windows,en utilisant la technologie TerminalServer.

    P. ! : on parle souvent de petits pro-blmes de compatibilit entre lesdistributions, comment les viter ?M. L. : Pour les bibliothques, il estrecommand d'tre compatible avecles versions empaquetes sur lesdebian stables. Elles reprsentent 20 %du parc, et sont gnralement lesmoins en avance en terme technolo-gique. Elles constituent ainsi une basede rfrence afin d'obtenir une appli-cation qui soit dployable et fonction-nel le sur un grand nombre dedistributions.

    P. ! : en quipe, vaut-il mieux dfinirun master d'outils ou laisser lesdveloppeurs monter leur poste ?M. L. : Il vaut mieux laisser les dve-loppeurs monter leur poste. Parcontre, rien n'empche de mutualiserles configurations en fournissant desmodles partags pour les environne-ments populaires.

    P. ! : Quelle distribution, conseillez-vous, celle qui vous parat la plusstable ?M. L. : Les Ubuntu sont trs popu-laires. Personnellement, je conseillerailes Fedora, qui sont gnralementplus intgrs et graphiquement plusesthtiques. La Fedora est souventconsidre comme instable, mais saforte communaut fait que quelquesmois aprs la sortie d'une versionmajeure, elle est tout aussi stable queses concurrentes.

    Les tests decompatibilitavec InternetExplorer ouChrome peu-vent se fairesous Linux,

    grce Wine

    Gnrer sa propre distribution OpenSuSe en ligneNovell hberge un service particulirementintressant : Suse Studio. Pour fairesimple, il permet de crer sa propre distri-bution SuSe en ligne puis de gnrer le sys-tme que lon peut ensuite distribuer avecson application, ses donnes, ses utilisa-teurs, etc. Particulirement simple dutili-sation, on peut configurer une base MySQLdans linterface, mettre en place un autos-tart dapplication ou encore inclure desscripts. Le build peut avoir le format iso,dune machine virtuelle ou encore dunLinux Live. Et bientt, il sera compatibleavec le cloud computing dAmazon !Suse Build est trs pratique quand on sou-haite livrer un master prt dployer avec

    des applications spcifiques, ses projetspour son entreprise, des clients ! Dautrepart, toujours pour aider le dveloppeur,ladministrateur, Novell propose un autreservice, le Build Service. Il permet de gn-rer rapidement des packages pour les dis-tributions Linux en grant les problmes dedpendances, de versions des librairies,etc. Le service Build sinterface avec leSuSe Studio, pratique pour rcuprerdemble des packages. Dautre part, onpeut mettre jour soi-mme les packagesgrce un outil en ligne de commande.Compatible LSB. Sites : http://en.opensuse.org/Build_Servicehttp://susestudio.com/

    32-58 19/03/2009 13:57 Page 36

  • Avril 2009 \\ PROgrammez ! 37

    dossier \\ Linux

    La distribution GNU/Linux Ubuntu nous semble toutindique pour bien dbuter. Ubuntu est une distribu-tion stable, facile daccs pour les dbutants caroriente interface graphique, et qui propose un nombrede logiciels consquent permettant un emploi instantan.Cet article traitera donc de la programmation pour les uti-lisateurs de cette distribution.

    Premiers pasLutilisation de la console est intressante par bien despoints. Elle permet lutilisateur dexcuter des com-mandes quil va lui-mme entrer. Bien que cela puisserebuter dans un premier temps un utilisateur venant dumonde Windows, trs graphique, cette pratique repr-sente trs souvent un gain de temps considrable. Pre-nons comme exemple la copie de fichiers. Si voussouhaitez raliser une copie de faon " graphique ", vousdevez vous dplacer jusquau rpertoire contenant votrefichier, cliquer sur celui-ci pour le copier, puis enfin vousdplacer jusqu' la destination pour le coller. Pour ralisercela par le biais de la console il vous suffit dentrer la com-mande " cp ". Laconsole est disponible graphiquement via un terminal, quimule la console. Vous trouverez ce terminal dans lemenu Applications -> Accessories -> Terminal. Vous pour-riez penser qucrire entirement la destination du fichierest plus long que de cliquer directement sur les diffrentsrpertoires, et cest l que lautocompltion intervient.Lautocompltion permet un utilisateur, lors de la saisiedune commande, de limiter la quantit dinformations saisir avec son clavier. Ainsi pour copier un fichier dans lerpertoire document, il vous suffit dentrer la lettre " d " etdappuyer sur la touche " tab " de votre clavier, touche per-mettant lautocompltion par dfaut, et le mot " document "sauto compltera. Si toutefois, un autre rpertoire com-menant par la lettre " d " se trouvait au mme endroit,lappui rpt sur la touche " tab " permet de switcherentre les diffrentes possibilits. Parmi toutes les com-mandes existantes, une est connatre sans doute avantles autres. Il sagit de la commande " sudo " permettant lutilisateur de lancer la commande qui suivra en tantquadministrateur, ce qui sera indispensable pour linstalla-tion de nouvelles applications. Un administrateur poss-dant plus de droits que lutilisateur lambda, laccs tous

    les dossiers lui sera autoris, en loccurrence laccs audossier dans lequel se font les installations.

    InstallationLinstallation de nouveaux logiciels sous Ubuntu, et sousLinux en gnral, est des plus simples. Il existe diffrentsmoyens sous Ubuntu dinstaller un logiciel " packag ". Lepremier moyen est dutiliser Aptitude ou Synaptic, lesecond tant, comme sous Windows, de rechercher ces" packages " sur Internet et de les tlcharger pour lesinstaller. Aptitude est un gestionnaire de paquets permet-tant linstallation, la suppression et la mise jour de logi-ciels. Il est utilisable en ligne de commande ou avec unevritable interface interactive. En ligne de commande, ilvous faudra utiliser la ligne suivante " sudo aptitude installnom_du_paquet ". Ici lapplication Aptitude prend en argu-ment " install ", indiquant que nous souhaitons procderici linstallation dun nouveau paquet. " Sudo " quant lui,permet de lancer lapplication Aptitude en tant quadminis-trateur comme expliqu prcdemment. Bien sr, celancessite de connatre le nom exact du paquet que lonsouhaite installer. Utiliser Aptitude par son interface gra-phique permet la recherche de paquets. Lancez doncAptitude sans argument, soit " sudo aptitude ", puis utili-sez la touche " / " pour exploiter les fonctions derecherche de paquets. Comme le suggre le menu daide,utilisez ensuite la touche " + " pour ajouter un paquet laliste des paquets ajouter, puis la touche " g " pour tl-charger / installer.Synaptic quant lui est entirement graphique. On peutlassimiler lutilitaire dajout/suppression de pro-grammes sous Windows. Il permet de rechercher despaquets et propose aussi dinstaller les dpendances pourchacun dentre eux. Un paquet peut en effet avoir besoindautres paquets pour fonctionner, comme par exempledes bibliothques particulires. Le lancement de Synapticpeut se faire via lentre du menu System -> Administra-tion -> Synaptic Package Manager. Quel que soit le ges-tionnaire de paquets uti l is, l instal lation se faitimmdiatement aprs le tlchargement.Dans le dernier cas tlchargement du paquet par unsite Internet -, il suffit la plupart du temps dextraire lecontenu du dossier compress pour que le logiciel soitdirectement utilisable. Il arrivera parfois que lutilisateur

    Bien dbuter le dveloppement sous LinuxQuentend-on exactement par Linux ? Le terme est devenu flou et dsignetantt uniquement le noyau (kernel), la base du systme complet, et tanttla distribution, voir comme une compilation de logiciels adjoints ce noyau,et mis en forme pour rpondre diffrents besoins. La premire tapelorsque lon passe dans lunivers linuxien est le choix de sa distribution.

    32-58 19/03/2009 13:57 Page 37

  • se retrouve en prsence des sources du logiciel, et nonpas dun fichier binaire directement excutable. Lutilisa-teur devra alors compiler ce code source, c'est--diregnrer les fichiers binaires requis. Pour ce faire, la solu-tion utilise dans la trs grande majorit des cas est unesolution base de Makefile. Un Makefile est gnrale-ment un fichier appel " Makefile " directement exploitpar la commande " make " pour excuter un ensembledactions, comme la compilation dun projet, larchivagede fichiers, la mise jour dun site, etc.

    Notre helloworldCest au travers de la cration dun projet bas sur le lan-gage de programmation " C " que linitiation ces make-files se fera. Nous allons raliser un projet bien connupuisquil sagit dun classique " Helloworld ". Un diteur detexte sera indispensable et je vous conseille Emacs pourcommencer, outil phare de lunivers du Libre, ainsi quelutilisation de la console pour prendre de bonnes habi-tudes. Ouvrez un premier fichier " hello.c " qui contiendrale corps de la fonction daffichage en lanant la comman-de " emacs hello.c ", et entrez y les lignes suivantes :

    void Hello(void)

    {

    printf("Hello World\n");

    }

    Et sauvegardez grce la combinaison de touches Ctrl+x,Ctrl+s. Ouvrez ensuite un second fichier nomm hello.h,celui qui contiendra le prototype de votre fonction, c'est--dire les lignes suivantes :

    #ifndef HELLO_H

    # define HELLO_H

    void Hello(void);

    #endif

    Finalement, afin de conclure notre projet " Helloword " enC, ouvrez un fichier main.c, fichier contenant notre fonc-tion principale " main " et qui effectuera un appel notrefonction " Hello " :

    #include "hello.h"

    int main(void)

    {

    Hello();

    return 0;

    }

    Maintenant que le projet est fini, il nous faut crer unmakefile afin de le compiler et dobtenir un binaire (lqui-valent des .exe sous Windows). Ouvrez un fichier quevous nommerez " Makefile " et insrez-y les lignes sui-vantes :

    hello: hello.o main.o

    gcc o hello hello.o main.o

    hello.o:

    gcc o hello.o c hello.c

    main.o:

    gcc o main.o c main.c

    Les trois mots devant les " : " sont des rgles, com-prendre comme commandes. La premire commande " hello " requiert ici que les commandes hello.o et main.osoient excutes avant elle pour pouvoir fonctionner. Pas-sons donc la rgle de construction hello.o, celle-ci utilisele compilateur libre gcc assurant la compilation desfichiers C. partir du fichier " hello.c ", spcifi ici par lop-tion " -c ", gcc va crer un fichier objet (langage machine).Ce fichier aura pour nom celui prcis par loption " -o ". Ilen va de mme pour la commande main.o. Une fois cesdeux commandes lances avec succs, la commande " hello " peut alors sexcuter. Une fois de plus le compila-teur Gcc est utilis, cette fois-ci pour crer notre binairefinal nomm " hello " en assemblant les deux fichiersobjets gnrs prcdemment. Une fois le makefile sau-vegard, lancez la commande " make " dans votre conso-le, suivie de la commande " ls ", permettant de lister lesrpertoires et fichiers, afin de voir apparatre votre binai-re " hello " correctement construit dans votre rpertoire.Il vous suffit maintenant de lancer votre binaire via unsimple appel la commande " ./hello " qui invoquera votreprogramme du mme nom, le point " . " dsignant le

    dossier \\ Linux

    38 PROgrammez ! \\ Avril 2009

    32-58 19/03/2009 0:04 Page 38

  • rpertoire courant. Loutil make permet aussi de lancerseulement certaines commandes parmi toutes celles dfi-nies au sein du fichier (les fameuses " rgles "). En spci-fiant simplement le nom de la commande voulue aprs "make " comme par exemple " make main.o ", qui, tapedans la console, ne gnre que le fichier " main.o ". Libre vous de rajouter vos propres rgles. On peut imaginer parexemple une commande clean telle que ci-dessous :

    clean:

    rm rf *.o

    o " rm " (remove) permet deffacer ici tout les fichiersdextension " .o " dans loptique de nettoyer le rpertoirequand on le souhaite via un simple appel " make clean ".Il y a plusieurs avantages utiliser des fichiers makefileplutt que de rentrer les commandes de compilationdirectement. Le simple fait dcrire ces lignes de compila-tion une fois pour toutes et de ne pas avoir les r-entrer chaque modification du code en est un parfait exemple.Lautre avantage souvent mis en avant est le mcanismeinterne faisant que seuls les fichiers qui le ncessitent(ayant subi des modifications) sont recompils. Cet avan-tage pouvant paratre mineur premire vue devientdterminant lorsque lon travaille sur un fichier avec plu-sieurs milliers de fichiers.

    Dveloppement dun jeu vidoVoici venu le moment de faire vos dbuts dans la crationdun jeu vido. Maintenant que nous savons crer un pro-jet et comment le compiler, pourquoi ne pas entamer luti-l isation de bibliothques permettant dobtenir desrsultats plus graphiques ? Conjointement au langage Cnous allons ici exploiter la bibliothque SDL qui facilite lacration dapplications multimdias en deux dimensions.Nous allons utiliser cette bibliothque pour effectuer lagestion des vnements (pressions sur les touches du cla-vier) et lillustre bibliothque OpenGL pour la gnration detous nos objets en trois dimensions.La bibliothque SDL - pour Simple DirectMedia Layer - per-met un accs rapide et simple une sortie vido tout enpermettant de grer le son, le clavier et la souris. Noussommes alors capables dintercepter pendant lexcutionde notre jeu lappui sur une touche du clavier ou un clic desouris, pour pouvoir agir en consquence, une fois cetvnement identifi. On peut donc imaginer la traditionnel-le gestion des mouvements via les touches directionnellesde notre clavier. Quant OpenGL (Open Graphics Library)il sagit dune interface de programmation (API) proposantun nombre de fonctions assez consquent pour crer desobjets aussi bien 3D que 2D.Afin de mieux comprendre comment SDL permet dagirsur le contenu de votre jeu, c'est--dire les diffrents l-ments crs grce OpenGL, une explication techniquesimpose. SDL va tre le moteur de votre jeu, elle va grerlaffichage de votre fentre de jeu ainsi que les diffrentsvnements. Techniquement, cette gestion se fait laide

    32-58 19/03/2009 13:57 Page 39

  • dossier \\ Linux

    40 PROgrammez ! \\ Avril 2009

    dune grande boucle, qui se termine quand vous le dsi-rez, le mieux bien sr tant la fermeture de lapplication.Chaque tour de boucle va correspondre un rafrachisse-ment de vos lments OpenGL : mettre jour leur appa-rence, leur position, leur angle dinclinaison Durantchaque tour de boucle nous vrifions si un vnementsest produit ou non, afin de pouvoir effectuer les modifi-cations puis de tout rafficher. Nous pouvons par cettetechnique faire natre une impression de mouvement dediffrents objets. Commenons par crer un cube grce OpenGL. Utilisezpour cela la fonction glBegin(GL_QUADS) qui indique quenous allons tracer un carr pour dessiner la premireface.

    glBegin(GL_QUADS) ;

    glColor3d(1.,0.,0.);

    glVertex3i(1,1,1);

    glVertex3i(1,-1,1);

    glVertex3i(-1,-1,1);

    glVertex3i(-1,1,1);

    Nous utilisons la fonction glColor3d afin de colorer la facedu cube. Comme vous pouvez le remarquer, cette fonctionsutilise sur une face du cube, il est donc possible dobte-nir un cube possdant des faces de couleurs diffrentesau final. Les trois paramtres de cette fonction corres-pondent aux trois couleurs primaires RGB, dfinies pardes nombres flottants reprsentant lintensit de chaquecomposante. Le triplet (1,0,0) donnera ici une facerouge. Viennent ensuite quatre fonctions glVertex3i quiinstancient des points de lespace, reprsentant lesquatre coins de notre face. Chacun de ces points estreprsent par trois coordonnes. Effectivement, nousavons pour but de crer un cube, un lment 3D. Le rep-re dans lequel se trouvera ce cube tant en 3D, nousdevons prciser chacune des coordonnes de chaquepoint. Les trois valeurs en paramtre de la fonction glVer-tex3i sont les valeurs de x, y et z dans lespace. Lopra-tion ci-dessus devra donc tre rpte six fois, afin decrer les six faces carres composant un cube. OpenGLnoffre pas seulement la possibilit dassocier une couleur une face. Il est bien sr possible dy associer une image,

    une texture, afin dobtenir des lments de dcor raliste.

    Vive OpenGL !

    A chaque tour de boucle, votre cube sera redessin lcran. Il nest pas ncessaire de toujours rafrachir tousles lments composant votre dcor : on peut imaginerne rafrachir alors que les lments capables de se mou-voir afin de ne pas ralentir le jeu et viter les calculsinutiles. Mais pour le moment, notre cube reste inanimcar les paramtres fournis notre fonction de dessinsont inchangs au cours du temps. Au lieu dutiliser lafonction glVertex3i(1, 1, 1) avec des valeurs prdfinies, ilnous faudrait donc faire usage de variables, et si lorigina-lit ne vous effraie pas, je propose glVertex3i(x, y, z). Il estdonc maintenant possible de modifier les valeurs de x, you z chaque tour de boucle, afin de redfinir les coor-donnes de chaque point, et de redessiner le cube unemplacement diffrent dans lespace, en crant ainsi lillu-sion du mouvement.Il reste maintenant rcuprer une pression sur unetouche du clavier, et dassocier ce geste au mouvementdun objet. La bibliothque SDL propose pour cela unensemble de macros permettant de savoir quelle actionlutilisateur est en train de raliser. Si nous voulons faireavancer notre cube laide de la flche " haut " de notreclavier, il nous suffit de tester chaque tour de boucle quela touche " up " est presse pour augmenter la profon-deur (y) de 1 et ainsi voir le cube sloigner chaquerafrachissement. On obtiendrait une boucle de ce type :

    Case SDL_KEYDOWN :

    switch (event.key.keysym.sym){

    case SDLK_UP:

    y += 1;

    draw_cube(x,y,z);

    Cela signifie que pendant le tour de boucle, si une toucheest enfonce, et quil sagit de la touche " up " du clavier,alors la variable " y " est augmente de 1. A la fin de laboucle, le cube est redessin avec les nouvelles coordon-nes, et notre cube se dplace alors dans lespace.Une fois notre cube capable de se mouvoir, il nous fautcompiler notre projet comme nous lavons fait prcdem-

    32-58 19/03/2009 13:57 Page 40

  • dossier \\ Linux

    ment. Pour cela, il va falloir relier les bibliothques SDL etOpenGL notre projet lors de la compilation afin quetoutes les fonctions et macros que nous avons utilisessoient reconnues. Pour nous faciliter la tche, la biblio-thque SDL nous fournit deux commandes bien utiles : " sdl-config cflags " qui servira lors de la cration des dif-frents fichiers objets et la commande " sdl-config libs "qui servira lors de la cration de notre binaire final. En cequi concerne OpenGL, nous utiliserons loption l permet-tant de relier une bibliothque notre projet de la maniresuivante : -lGL. Si votre code ne se trouve que dans un seulfichier C, nous devrions obtenir un makefile de ce type :

    CFLAGS=`sdl-config cflags`

    LDFLAGS=`sdl-config libs`

    all : main.o

    gcc o cube main.o $(LDFLAGS) lGL LGLU

    main.o:

    gcc o main.o c main.c $(CFLAGS) lGL lGLU

    " CFLAGS " et " LDFLAGS " sont ici deux variables dfiniesau dbut du makefile afin dobtenir des commandes plusfacilement comprhensibles au premier coup dil ; lesbibliothques GL et GLU seront relies notre projetcomme nous le souhaitions.Il peut arriver que vous ayez besoin de faire fonctionnervotre jeu, ou tout autre programme, sur dautres distribu-tions. Les problmes seront rencontrs lors de la compi-lation sur dautres distributions que celle sur laquelle votre

    projet a t dvelopp. Des bibliothques peuvent tresitues des endroits diffrents sur le disque dur parexemple. Cest ici quintervient lutilit dun fichier de confi-guration, nomm configure, en plus de votre makefile. Cefichier configure est un script excutable permettant decrer un fichier doptions pour le makefile, souventnomm Makefile.rules, dont le contenu diffrera en fonc-tion des distributions sur lesquelles votre projet sera com-pil. Ce fichier " configure " pourrait faire la diffrenceentre certaines architectures, et ainsi crer des variablesadaptes en fonction de la machine sur laquelle nousnous trouvons. Le Makefile.rules cr na plus qu treinclus dans notre Makefile par le biais de la ligne " includeMakefile.rules " place au dbut de votre Makefile. Si nousvoulions porter notre projet de jeu sur une distributionLinux telle que Fedora, nous naurions pour ce projet pasde changements effectuer, mais dans le cadre dun pro-jet plus massif, ncessitant de nombreuses bibliothquesou dautres programmes, il peut tre utile que le systmepossde bien tous les pr-requis. Les portes du jeu vido vous sont maintenant ouvertes.Je laisse votre imagination soccuper des ides de jeux,de dcors ou de jouabilit que vous recherchez. Il est biensr possible dutiliser SDL et OpenGL avec dautres lan-gages que le langage C, je laisse votre convenance lechoix de celui avec lequel vous vous sentez le mieux.

    Alexis Ageorges - [email protected] Etudiant lEPITA, spcialisation Multimdia et Technologie de

    linformation.

    DITEUR DE SAVOIRS

    Rali

    satio

    n : M

    ATE

    O

    Tou

    s n

    os

    ou

    vrag

    es s

    on

    t d

    isp

    on

    ible

    s en

    lib

    rair

    ie

    9782100518319 368 pages 38 9782100523368 560 pages 38 9782100515721 312 pages 34 9782100526741 464 pages 39

    32-58 19/03/2009 13:57 Page 41

  • dossier \\ Linux

    42 PROgrammez ! \\ Avril 2009

    GTK+ et les autres briques de la plate-forme GNOME sontcrits en C la base. Aprs, les dveloppeurs font lencessaire pour utiliser ces API dans le langage de pro-grammation de leur choix. Un dveloppeur Java peut ainsi utiliserla plate-forme GNOME travers les bindings Java-GNOME, undveloppeur C# utilisera le binding GTK#, un dveloppeur C++ peututiliser la famille de bindings gtkmm (GTK minus minus) et ainsi desuite. Chaque binding respecte les normes d'utilisation du langa-ge. Le binding Python de GTK+ s'appelle PyGTK. Pour qui connatun peu GTK+, les normes de nomenclature sont assez simples. Laclasse GtkImage, par exemple, est dans l'interface Python commegtk.Image. La fonctionvoid

    gtk_image_set_from_file(GtkImage *image, const gchar *filename)

    se transforme naturellement en

    gtk.Image.set_from_file(filename)

    Dans cet article, nous allons voir comment utiliser les outilsGNOME, et la plate-forme de dveloppement, pour dvelopperrapidement des applications simples, permettant des cycles dedveloppement trs courts, prconiss dans des mthodologiesde dveloppement comme SCRUM ou XP. Ces outils sont parfaite-ment adapts au dveloppement des premiers prototypes d'appli-cations, mme complexes, grce aux retours d'expriencesrapides. Nous allons crer un diteur de texte simple. La premiretape sera la cration de l'interface avec l'outil Glade. Glade gn-re un fichier XML qui dfinit l'interface, que nous allons chargerpar la suite dans notre application, avant de connecter dessignaux des callbacks, afin d'implmenter quelques fonctionnali-ts de base. Le grand avantage de l'utilisation de Python est biensr de navoir pas besoin de faire un processus de compilation.Comme cest un langage interprt, nous excutons notre appli-cation Python simplement avec la ligne de commande :

    $ python myscript.py

    ou, comme il est normal de faire sous Linux, de rajouter la pre-mire ligne

    #!/usr/bin/python

    et de rendre excutable le fichier myscript.py avant de l'excuterdirectement sur la ligne de commande :

    $ myscript.py

    Les pr-requisSur Ubuntu, outre les paquets installs par dfaut, je vousconseille d'installer les paquets suivants : python-gtk2 python-gtk2-doc python-gtk2-tutorial python-gnome2-extras python-gnome2-extras-doc devhelp.python-gtk2 et python-gnome2-extras installeront l'ensemble desbibliothques et modules ncessaires pour crer des applicationsGNOME en Python. devhelp est un navigateur et lecteur de docu-mentation dveloppeur qui vous installera l'ensemble des docu-mentations de la plate-forme GNOME. C'est un outil indispensablepour le dveloppeur d'applications GNOME. Les modules python-gtk2-doc, python-gtk2-tutorial et python-gnome2-extras-doc instal-lent des documentationspour les bindings Python. Aprsl'installation, ils seraient intgrs automatiquement dans le naviga-teur devhelp. Malheureusement pour les dveloppeurs franais, laplupart de ces documents ne sont disponible qu'en anglais.

    Construire l'interface graphiquePour crer notre interface graphique, nous allons utiliser l'outilGlade. Glade est l'application de cration d'interfaces GNOME pardfaut. Depuis la version 2.12, GTK+ inclut une nouvelle fonction-nalit pour charger dynamiquement des interfaces graphiques,GtkBuilder. Auparavant, une bibliothque spare, Libglade, aservi au mme effet, mais cette bibliothque n'est plus officielle-ment encourage. Malheureusement, les formats de fichiers utili-ss par GtkBuilder et Libglade ne sont pas 100% compatibles, etcomme GtkBuilder est trs rcent, au moment ou j'cris ceslignes, la version stable de Glade ne gnre pas encore de fichiersen format GtkBuilder. Nous allons donc utiliser un outil inclus dansles versions de GTK+ rcentes, gtk-builder-convert, pour convertirles fichiers de type Libglade en fichiers de type GtkBuilder. La pro-

    Dveloppement rapide avecGNOME/GTK+ et PythonGnome est une des deux plates-formes les plus populaires sous Linux, avec KDE, il estdisponible par dfaut sur la plupart des distributions les plus utilises, commeUbuntu, Red Hat, Fedora, OpenSuse et Debian. Le toolkit GTK+ est au cur del'environnement GNOME. Il fournit tous les lments ncessaires la gnrationdune interface graphique pour une application : les fentres, les boutons, les listes,etc. GTK+ n'est pas un langage de programmation en soi, c'est un ensemble d'API,utilisables avec plusieurs langages de programmation, au travers de ce qu'on appelledes "bindings.

    32-58 19/03/2009 13:57 Page 42

  • dossier \\ Linux

    44 PROgrammez ! \\ Avril 2009

    chaine version de glade, 3.5.0, qui devrait voir le jour en mars2009, gnrera nativement des fichiers GtkBuilder. [Fig.1]Au premier lancement, nous voyons un espace vide ou nous allonscrer notre application, avec sur la gauche l'ensemble des widgetsGTK+ dont on dispose. La documentation sur les widgets GTK+est trs complte. Pour rsumer la philosophie GNOME trs rapi-dement, il y a les widgets de type containers, et les autres. Lesfentres sont des widgets de type GtkWindow, eux-mmes descontainers, qui apparaissent au niveau du gestionnaire defentres. A l'intrieur de ces widgets containers, nous pouvonsdisposer d'autres widgets de tout type: des boutons, des libells,des widgets pour l'entre des donnes comme le texte ou lesnumros, des images, et ainsi suite. Nous pouvons galement ymettre d'autres containers, qui leur tour contiendraient des wid-gets. Pour chacun de ces widgets, il y a des signaux possibles quivont tre envoys lorsque nous agissons sur le widget. Parexemple, pour un widget de type "GtkButton", les signaux suivantssont mis sur des vnements clavier ou souris: "activate", "clic-ked", "enter", "leave", "pressed" et "released".Pour chaque signal, nous avons le choix de laisser le moteur GTK+grer le signal, ou d'intercepter nous-mmes le signal dans notreinterface, avec une fonction qu'on appelle un "call-back". Pour l'ins-tant, dmarrons notre application. Dans la partie "Niveaux sup-rieurs", nous avons une slection de fentres de premier niveaupossible, dont une fentre de slection de police ou de slectionde couleurs. Pour notre application, nous allons choisir la fentrela plus simple.Pour disposer des widgets l'intrieur d'une fentreil est ncessaire d'utiliser des widgets containers Les containersles plus couramment utiliss sont des GtkVBox (bote verticale) etle GtkHBox (bote horizontale). Nous allons insrer une bote verti-

    cale dans notre fentre,avec 3 lments. [Fig.2]Dans ce VBox, nous allonsrajouter une barre demenus en haut, une vueavec df i lement quicontient une vue de texteau milieu, puis une barre

    d'tat en bas, pour terminernotre fentre principale. Notre menu de dpart contient quelquesentres que nous n'allons pas utiliser, mais pour l'instant, nouspouvons les laisser telles quelles. A droite de notre fentre Glade,

    nous voyons maintenant une jolie hirarchie de widgets qui s'estcre, suite notre manipulation. Puis, nous sauvegardons le toutsous le nom "ProgrammezText.glade". Une fois sauvegard, nouspouvons le convertir en format GtkBuilder avec la commande :

    $ gtk-builder-convert ProgrammezText.glade ProgrammezText.ui

    Le code complet de lapplication est disponible en tlchargementsur le site de Programmez. Maintenant, il est temps de chargernotre fentre avec Python, et de regarder quoi ressemble l'appli-cation. Avant de dvelopper votre premire application GTK+ enPython, assurez-vous que Python, PyGTK et toutes ses dpen-dances sont installes. Dans votre diteur de texte prfr, com-mencez un fichier ProgrammezText.py.

    #!/usr/bin/python

    import gtk

    class ProgrammezText:

    def __init__(self):

    builder = gtk.Builder()

    builder.add_from_file("ProgrammezText.ui")

    self.window = builder.get_object("window1")

    builder.connect_signals(self)

    editor = ProgrammezText()

    editor.window.show()

    gtk.main()

    Dans ce fichier, avec le constructeur de notre objet Programmez-Text, nous chargeons notre interface ProgrammezText.ui, puisnous initialisons notre fentre, avant de l'afficher et de passer lamain la boucle d'vnements GTK+.Une fois lance, l'interfaces'affiche, mais quand nous fermons la fentre, notre applicationne se termine pas.De la mme faon, quoi qu'on fasse dans notreapplication, rien ne se fait au-del de l'affichage. Pour rendre notreapplication utile, nous devons associer du code avec les signauxqui sont mis par des actions dans l'interface graphique.

    Fig.1 Fig.3

    Premier ouverture de glade ProgrammezText : Notre application prend forme

    Figure 2: Insertion de GtkVBox

    Fig.2

    32-58 19/03/2009 0:05 Page 44

  • dossier \\ Linux

    Faire fonctionner l'interfaceDans Glade, sur la droite, dans l'onglet "Signaux", Nous pouvonsvoir toutes les signaux mis par le widget actuellement slection-n. Notre fentre, "window1", contient un signal "destroy" dans larubrique GtkObject, qui est mis lors de la fermeture de fentre.Pour terminer proprement notre logiciel, il faut que nous appelionsle fonction "gtk_main_quit()" ce moment, ce qui permettra GTK+ de dtruire tous les objets qu'il gre et de quitter propre-ment l'application. Nous avons deux possibilits pour cela : en cli-quant sur "", nous avons le choix entre plusieursfonctions qui pourraient convenir, dont "gtk_main_quit" et un call-back avec un nom spcifique du widget ("on_window1_destroy")qui est gnr automatiquement. Si nous chois issons"gtk_main_quit" dans ce menu, nous n'avons plus rien faire pourfermer proprement notre logiciel. [Fig.4]Mais imaginons que nous voulions faire un vritable diteur detexte, il faudrait avertir l'utilisateur lors de la fermeture d'un fichiermodifi, ce qui nous oblige avoir la main. Nous pouvons gale-ment employer cette mme fonction lorsque l'utilisateur choisitl'entre menu "Quitter". Nous dcidons donc d'utiliser un callbackspcifique, "text_quit", que nous saisissons la main, pour accom-plir cette tche. Puis nous sauvegardons notre fichier Glade, et leconvertissons encore une fois en fichier GtkBuilder.Dans la classe ProgrammezText, rajoutons la fonction :

    def text_quit(self, widget, data=None):

    gtk.main_quit()

    Normalement, si tout va bien, notre application doit se terminerproprement maintenant.Pour l'instant, j'ai laiss les noms des objets, et les noms de call-backs par dfaut, mais vous pouvez bien sr modifier les nomsdes objets, et mettre la place vos propres noms de fonctions,selon les normes de programmation que vous utilisez.Pour terminer cette premire version, nous allons rajouter unefonctionnalit importante: la sauvegarde de fichier.Sur l'entre de menu "Fichier/Sauvegarde", je change le nom du

    Fig.4

    Les signaux dans Glade

    32-58 19/03/2009 13:58 Page 45

  • dossier \\ Linux

    46 PROgrammez ! \\ Avril 2009

    widget en "menu_save" pour que ce soit plus facilement reprable,puis j'y associe le callback "on_menu_save_activate". Ensuite, onsauvegarde, et on fait encore un passage par gtk-builder-convert.La fonction de sauvegarde utilise un dialog du slecteur de fichierspour permettre l'utilisateur de choisir un rpertoire et un nomde fichier, avant d'y sauvegarder les contenus de notre buffer detexte. Dans la mthode __init__, pour nous permettre de mmori-ser le nom du fichier en cours, nous rajoutons une ligne :

    self.filename = None;

    Puis, nous rajoutons la mthode suivante l'objet ProgrammezText :

    def on_menu_save_activate(self, widget, data=None):

    filename = None;

    if self.filename == None:

    selecteur = gtk.FileChooserDialog("Sauvegarde...", self.window,

    gtk.FILE_CHOOSER_ACTION_SAVE,

    (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,

    gtk.STOCK_SAVE, gtk.RESPONSE_OK))

    reponse = selecteur.run()

    if reponse == gtk.RESPONSE_OK: filename = selecteur.

    get_filename();

    selecteur.destroy()

    if filename == None: return

    try:

    buf = self.textview.get_buffer()

    text = buf.get_text(buf.get_start_iter(), buf.get_end_

    iter())

    f = open(filename, "w")

    f.write(text);

    forclose()

    self.filename = filename

    except:

    self.error_message("Erreur lors de sauvegarde de fichier

    %s" % filename)

    D'abord, nous crons un dialog de type FileChooser (slecteur defichiers), qui hritera de notre fentre principale, et qui sera detype sauvegarde (sachant que plusieurs types de slecteurs defichiers sont possibles - ouvrir, sauvegarder, slectionner un dos-

    sier, ou crer un dossier). Puis nous ajoutons deux boutons "Annu-ler" et "Sauvegarder", auxquels nous attachons des valeurs derponses qui seront retourn par l'excution du dialog. [Fig.5]Par la suite, le dialog est lanc et affich de faon modale (donc,bloquante pour l'application tant que nous n'avons pas terminavec), et si l'utilisateur a choisi "Sauvegarder", nous rcuprons lenom de fichier choisi.Finalement, nous utilisons l'API de base pour notre text view (Gtk-TextView) pour rcuprer les contenus du buffer, avant de l'criredans le fichier choisi, et denregistrer le nom du fichier dans lechamp filename de notre diteur de texte.Si par malheur l'criture ne peut pas se faire, nous nous prot-geons, et nous montrons l'utilisateur une erreur.Il est facile d'activer de la mme faon des autres fonctions defichier comme l'ouverture de fichier, la sauvegarde lors de la fer-meture, ou implmenter une fonctionnalit copier/coller. La suiteest laisse comme exercice pour le lecteur enthousiaste !

    ConclusionLe dveloppement d'applications GNOME avec Python peut tretrs rapide, grce l'outil Glade et la capacit native de GtkBuilder.De plus, en utilisant Python, nous vitons un cycle de compilationonreux, et nous pouvons constater tout de suite les rsultats deschangements effectus. Grce la quantit et qualit des tuto-riaux existants pour PyGTK et la qualit de la documentation desAPIs, il est possible d'tre oprationnel trs rapidement. GNOMEcontient des bibliothques puissantes, comme DBus pour les mes-sages inter-processus, GStreamer pour la gestion du multimedia,ou GIO et gvfs pour l'abstraction des systmes de fichiers. Toussont disponibles dans des applications Python, permettant la cra-tion rapide d'applications complexes.

    Dave Neary - Projet Gnome

    Ressources :[1] GNOME: http://www.gnome.org

    [2] KDE: http://www.kde.org

    [3] GTK+: http://www.gtk.org

    [4] Java-GNOME: http://java-gnome.sourceforge.net/

    [5] GTK#: http://www.mono-project.com/GtkSharp

    [6] gtkmm: http://www.gtkmm.org/

    [7] Python: http://www.python.org/

    [8] GTK+ API: http://library.gnome.org/devel/gtk/stable/

    [9] PyGTK documentation: http://www.pygtk.org/reference.html

    [10] GtkImage: http://library.gnome.org/devel/gtk/stable/GtkImage.html

    [11] gtk.Image: http://www.pygtk.org/docs/pygtk/class-gtkimage.html

    [12] gtk_image_set_from_file: http://library.gnome.org/devel/gtk/stable/

    GtkImage.html#gtk-image-set-from-file

    [13] gtk.Image.set_from_file: http://www.pygtk.org/docs/pygtk/class-

    gtkimage.html#method-gtkimage--set-from-file

    [14] Devhelp: http://live.gnome.org/devhelp

    [15] GTK+ documentation: http://www.gtk.org/documentation.html

    [16] PyGTK tutorial: http://www.learningpython.com/2006/05/07/creating-

    a-gui-using-pygtk-and-glade/

    [17] PyGTK presentation and example programs: http://www.pixel-

    beat.org/talks/pygtk/

    Fig.5

    Notre application tourne !

    32-58 19/03/2009 0:11 Page 46

  • L e Linux Standard Base (LSB)est un projet ralis en colla-boration avec diffrentes dis-tributions Linux sous l'gide de laLinux Foundation. Son objectif consis-te en la standardisation de la structu-re interne des systmes d'exploitationbass sur le noyau Linux. LSB estdonc une extension de la spcificationPOSIX. LSB reprend galementquelques autres standards tout enapportant ses propres rgles. La fina-lit du LSB est de dvelopper et pro-mouvoir un ensemble de spcifications

    dossier \\ Linux

    48 PROgrammez ! \\ Avril 2009

    Validez vos applications Linux avec AppCheckerConcevoir une application Linux qui fonctionne sur toutes les distributionsdu march n'est pas trivial. Il y a beaucoup de raisons cela. En premierlieu, la grande libert qu'ont les dveloppeurs de distribution pourconcevoir leur systme bas sur le noyau GNU/Linux. Il en rsulte desdiffrences de comportement qui font que les applications nefonctionneront pas aussi bien sous une distribution que sous une autre. Cetarticle est fait pour apporter des lments de rponse aux dveloppeurs quiciblent l'environnement Linux. Pour cela, nous allons principalement nousappuyer sur Appchecker, l'outil de rfrence de la Linux Foundation.

    ouvertes qui permettront termed'amliorer la compatibilit entre dis-tributions Linux et ainsi de permettreaux logiciels de s'excuter sur toutsystme en tant que binaire. Tout celasans ncessiter de cycle de compila-tion spcifique. Au del, le LSB aide coordonner les efforts de recrute-ment dans le secteur du logiciel afinde favoriser le portage et le dvelop-pement d'applications Linux.Afin d'assurer un contrle de qualit,le LSB offre une certification aux pro-duits qui passent avec succs le cyclede validation. Gage de qualit, cettecertification devrait rapidement treadopte par les entreprises et lesprofessionnels du secteur du logiciellibre. Bien que la perce soit lente, oncompte dj un certain nombre dedistributions et d'applications certi-fies. LSB spcifie, par exemple, lesl ibrair ies standard, un cer tainnombre de commandes et d'utilitairesqui tendent le standard POSIX. Sontgalement spcifis, l'organisation dusystme de fichier, les niveaux d'ex-cution (/etc/init.d), le systme d'im-pression incluant les spoolers commeCUPS ainsi que les outils tels que Foo-matic et quelques autres extensionsau systme graphique communmentutilis sous Linux : X Window System.

    Quelques critiques malgr tout...On lui reproche de ne pas prendre enconsidration les remarques prove-

    nant d'organismes externes la fon-dation Linux tels que le projet Debian.Un exemple concret : le LSB spcifieque les packages logiciels doiventtre sous la forme d'un paquet RPM.Or, Debian et son format DEB ne sou-haite pas changer tout son systme.L'ide de revoir tout le systme degestion logicielle des distributionssemble irraliste ses dveloppeurs.Cependant Debian inclut tout demme un support optionnel pour leLSB. Ainsi l'utilisateur pourra notam-ment utiliser l'application Alien qui luipermettra d'installer les paquetsRPM. La suite de test a galementt critique plusieurs reprisespour tre boggue et incomplte. En2005, Ulrich Drepper a critiqu LSBpour des tests mal crits qui pou-vaient entraner des incompatibilitsentre des composants pourtant certi-fis par ces tests et des systmesLinux galement certifis. Heureuse-ment, la couverture des tests a tamliore depuis et l'outil Linux Appli-cation Checker corrige les dfautsmajeurs imputs.

    Appchecker : prsentation de l'outilLinux Application Checker, ou App-Checker, est un outil rcent qui per-met d'aider les dveloppeurs ciblerleurs applications sur Linux. Il se basesur un framework de tests dvelopppar l'Acadmie des Sciences Russeset utilise le travail de la Linux Fonda-

    Fig.1

    Fig.2

    32-58 19/03/2009 0:11 Page 48

  • Avril 2009 \\ PROgrammez ! 49

    dossier \\ Linux

    tion en reprenant les rgles prconi-ses par le LSB. Pour l'anecdote,l'Acadmie des sciences de Russieest l'origine d'un clbre jeu vido,Tetris, conu par l'un de ses salarisAlexey Pajitnov en 1985. AppChecker analyse les binairesd'une application et non le code sour-ce, ainsi il suffit de faire pointer l'outilvers l'application analyser. Le syst-me automatis compare la table desymbole de l'application avec les librai-ries connues parmi les 30 du LSB.Une fois la comparaison termine, unrapport dtaill est gnr et rf-rence l'ensemble des rsultats destests. Ces informations donnent auxdveloppeurs une forte indication dela capacit de son application fonc-tionner sur chacune des distributions.Quelques cas connus de problmesne peuvent pas tre dtects ouentraneront des erreurs alors qu'iln'y en a pas. Par exemple, l'agence-ment d'une structure de donnes 64-bits sera diffrente de sa version32-bits. AppChecker n'est pas enmesure de traiter les diffrencesentre ces deux versions. Un autreproblme : Appchecker ne peut pasprendre en compte les modificationsmineures apportes la nouvelle ver-sion d'un logiciel dans le comporte-ment de ses fonctions.

    InstallationPour uti l iser App Checker, vousdevrez crer un compte sur le rseaude dveloppeurs Linux, dont le siteest en bta (http:// ldn. l inuxfoun-dation.org). Il s'agit, entre autres, d'unrseau social qui vous permettra demaintenir des relations dans le milieudu dveloppement Linux et de suivredes blogs, bookmarks et autres fluxRSS. La communaut se veut gale-ment le point d'intersection entre lesdveloppeurs, les vendeurs et les dis-tributeurs d'applications Linux. LeLDN (Linux Developer Network) estmaintenu par son community mana-ger, Brian Proffit. Celui-ci est connu,entre autres, pour contribuer l'co-systme du logiciel libre. Il est notam-ment diteur du site web linuxtoday.comet a rdig un livre sur le systmeRed Hat. Une fois votre compte cr,vous pourrez tlcharger l'archive

    des outils au format tar.gz. L'outil estdisponible pour diffrentes architec-tures : x86, s390, PPC... Sur PCstandard, on choisira la version x86. Ensuite, on va extraire l'archive. Vouspouvez utiliser la commande tar sui-vante ou votre bureau Linux si celui-cile permet (clic droit puis extraire) :

    > tar -xvzf Linux-app-checker-local

    -2.0-3.i486.tar.gz

    Nous allons maintenant lancer l'appli-cation qui est en fait un serveur webembarqu. Par dfaut le port utilisest le 8889, vous pouvez cependanten choisir un autre en le prcisantdans la ligne de commande :

    > ./linux-app-checker/bin/app-che

    cker-start.pl 8080

    Cette commande va tenter de recon-natre votre navigateur prfr et dele lancer. Si celle-ci choue, essayezmanuellement de vous connecter l'adresse http://localhost:8080. Ce ser-veur sera galement accessibledepuis une autre machine via sonadresse ip ou son nom dans le cas oun serveur DNS est en place. [Fig.1]

    Prise en mainL'interface web est particulirementsimple prendre en main. Pour illus-trer la procdure de validation d'uneapplication que vous venez de dve-lopper, nous allons analyser le pro-gramme bash. Pour cela, cliquez surApplication check dans le menu.Vous pouvez prsent slectionnerles composants binaires analyser.Nous allons ajouter le binaire de bashqui se trouve dans le dossier /bin encliquant sur le bouton Select applica-tion components.... Vous remarque-rez que dans la liste des options, vouspourrez slectionner la version de laspcification LSB utiliser. Nous lais-serons les paramtres par dfautpuis nous lanons l'analyse. [Fig.2]Dans notre cas, l'analyse ne dureraque quelques secondes et nousaurons peine le temps de prendreconscience des tests que va excuterApp Ckecker. L'outil est capable d'ana-lyser des paquets RPM, des scriptsShells, Perl et Python mais galement

    Fig.3

    Fig.4

    PosixPOSIX ou PortableOperating Interfaceconsiste en unecollection destandards spcifispar l'organisationIEEE. Celle ci dfinitles API relatives auShell et aux utilitairespour les logicielslibres ou noncompatibles avec lessystmes Unix. Au-del des systmesUnix, les dveloppeursde systmes peuventtre amens respecter cesstandards. C'est le

    cas de Windows quipour certains pointsest conforme avec lesstandards de l'IEEE.POSIX existe depuis1988 mais ce n'estque quelques annesaprs sa cration qu'ila adopt le nom qu'onlui connat aujourd'hui,suite la propositionde Richard Stallmanpour remplacer lenom un peu tropstandard du IEEE-IX.Richard Stallman estle pre de la fondationGNU et ledveloppeur denombreux outils opensource.

    32-58 19/03/2009 0:12 Page 49

  • des librairies ainsi que des excu-tables ELF. Ici, nous nous trouvonsdans le dernier cas. [Fig.3]On apprciera le nombre de sys-tmes supports par l'analyse et laprcision du rapport. En effet, AppChecker ne se limite pas indiquer lestatut d'excution des tests. Il appor-te galement les prcisions nces-saires la correction des problmes.Ici, je suis sur une distribution Ubuntu8.04. [Fig.4]Si on regarde le dtail des erreurssur Debian 4.0, il apparat clairementque le binaire bash de cette distribu-tion requiert des interfaces qui nesont pas prsentes. Pour obtenir lacertification, il faut passer avec suc-cs l'ensemble des tests sur la totali-t des distributions. Vous pourrezprendre connaissance des informa-tions relatives ce certificat sur l'on-glet LSB Certification. Vous pourrezensuite envoyer les informations decertifications sur la plate-forme de lafondation Linux via l'outil LSB Naviga-tor. Il est possible de comparer lesrsultats de vos tests successifs ausein de la page Result history quireprend l'ensemble des tests quevous avez effectus localement par lepass.

    Pour aller plus loinBien que simple et efficace, l'interfaceweb ne conviendra pas ncessaire-ment toutes les utilisations. Si vousfaites partie de ceux qui utilisent l'int-gration continue, vous allez certaine-ment prfrer employer les scripts enligne de commande afin de les int-grer dans des solutions comme Conti-

    dossier \\ Linux

    50 PROgrammez ! \\ Avril 2009

    nuum. Cela vous permettra de validervos binaires aprs chaque compila-tion sur vos serveurs d'intgration.De la mme manire si vous souhai-tez crer des cibles de validation dansvos scripts de compilation (Makefile,Ant, Maven...), les outils suivantsvous seront utiles : lsb-appchk lsb-appchk.pl lsb-appchk.py lsb-pkgchkIls permettent de tester des pro-grammes (Perl, Python, binaire,paquets...). Le rsultat sera directe-ment affich dans le Shell. De lamme manire qu'avec l'interfaceweb, vous pourrez analyser plusieursfichiers et spcifier la version du stan-dard LSB utiliser. Actuellementnous en sommes la rvision 3.2, laversion 4.0 est pour le moment enbta.

    ConclusionParmi les systmes certifis, on peutciter Oracle Enterprise Linux, open-SUSE, Red Hat Enterprise Linux ouencore Ubuntu. Comme nous avonspu le voir, AppChecker se destineaussi bien aux industriels qu'aux dve-loppeurs amateurs. La dernire ver-sion comprend 1450 tests et lestandard ne cesse d'voluer et des'amliorer. Bien que AppChecker soitune rfrence dans le domaine,OLVER Core test suite ralise lemme travail que celui-ci. OLVEReffectue des tests fonctionnels et deconformit de la majorit des API sys-tmes de Linux. Les tests sont gn-rs automatiquement partir desscnarios de tests et des spcifica-tions formelles. Il y a donc un vritableenvironnement de tests et de valida-tions disponible sous Linux. Il estimportant pour les dveloppeurs des'y intresser af in d 'assurer lameilleure interoprabilit possible.

    Loc Guillois

    LSB Distribution Testkit AppChecker est destin aux dveloppeurs d'application, cependant il existe son pendant pour les dveloppeurs de distributions Linux : le LSBDistribution Testkit Manager (LSB DTK Manager). Il consiste galementen une interface web qui permettra d'excuter l'ensemble des tests ausein de cet outil unifi. Un outil en ligne de commande permet galementd'accder aux fonctionnalits de tests dans l'objectif d'apporter la possibi-lit d'crire des scripts. Son utilisation facilitera l'excution de tests en lesrendant plus attractifs aux dveloppeurs. L'objectif ultime de cet outil estde certifier les distributions. Xandros Server 2.0 est le premier produit tre certifi par la fondation Linux grce au LSB Distribution TestKit. Lesfonctionnalits clefs du kit de test sont les suivantes : mise jour automatique des suites de tests partir du site de la Linux Foundation,intgration d'un systme de certification, rapports de tests unifis, l'excution des tests en un clic.

    Continuum : solution d'intgration continueApache Continuum est un serveur d'intgra-tion continue destin aux entreprises ayanten charge de nombreux projets. Cet outilpermet la mise en place de compilationsjournalires, de distributions, gestion desrles et s'intgre avec les outils de compila-tion les plus populaires : Maven, Ant... ainsique les gestionnaires de code source lesplus rpandus. Continuum permet d'indus-trialiser les processus lis la compilation

    et l'intgration d'application en phase dedveloppement. Son utilisation couple AppChecker pourra permettre de s'assurerquotidiennement qu'une application Linuxrespecte la LSB et pourra s'excuter sansencombre sur les distributions Linux cibles.Il existe galement d'autres solutions plussimples et plus lgres. On peut notam-ment citer LuntBuild qui est galementdvelopp en Java.

    32-58 19/03/2009 0:12 Page 50

  • Avril 2009 \\ PROgrammez ! 51

    dossier \\ Linux

    E n effet, pour une plate-forme matrielle donne,toutes les distributions Linux utilisent dans la plu-part des cas les mmes briques: le noyau Linux,la glibc, le serveur X11 venant de Xorg... mais elles nefont pas toujours les mmes choix d'intgration. Parexemple, elles n'utilisent pas les mmes versions, ne com-pilent pas les logiciels avec les mmes options, ne placentpas les fichiers aux mmes endroits, n'installent pas lesmmes logiciels par dfaut... Si l'on veut creuser un peuplus, en supposant que vous n'utilisiez que des compo-sants distribus par toutes les distributions, vous allezvous heurter aux formats de diffusion des logiciels et auxconventions de nommage.

    Les packages de dploiementDans le monde Linux, il existe principalement 2 formatsde distribution : les paquetages au format RPM utilisspar les distributions issues de Red Hat, SuSE, Mandrivaet les paquetages au format DEB utiliss par les distribu-tions issues de Debian et Ubuntu. Il existe des outils deconversion comme Alien, donc vous pourriez vous direque tout est parfait. Mais en fait, le problme ne vient pasdu format en lui-mme, car les formats RPM et DEB sontassez proches, mais de la faon de les utiliser. L encorechaque distribution a fait son choix de nommage despaquetages et si vous voulez dpendre d'un paquetagepour tre sr d'avoir le bon support dans le systme, etbien ce sera impossible. Par exemple, le paquetage dulangage Python va s'appeler python dans une distributionet python2.5 dans une autre. Un autre problme provientdu fait que les distributions n'installent pas toujours lesfichiers aux mmes endroits, donc si vous voulez fairerfrence ces fichiers cela va tre compliqu. Il y a aussides problmes identiques pour les scripts d'initialisationde services, les descriptions de menus, les soname deslibrairies dynamiques...Une solution utilise par la plupart des projets est de diffu-

    ser leurs logiciels sous forme de source. De cette faon,plus de problme de compatibilit binaire. Cela supposeque les utilisateurs savent compiler et rsoudre les pro-blmes de dpendance. Une autre faon de faire, qui estsouvent utilise par les gros logiciels sous Linux ou sousles diffrents UNIX, est de compiler en statique ou de dis-tribuer tous les composants dont vous avez besoin, etvous en assurez la maintenance et la gestion des alertesde scurit vous-mme... Si cela n'est pas le cas ou sivous ne pouvez pas distribuer les sources, la LSB a tcre pour rsoudre ces problmes.

    Qu'est-ce que la LSB ?LSB est un ensemble de standards crs, sous le " contrle " de la Linux Foundation (http://www.linux founda-tion.org/) par diffrents acteurs du monde Linux: distribu-teurs Linux et diteurs de logiciels. La LSB est base surdes standards existants comme POSIX et SUS. Quanddes standards n'existaient pas, la LSB a standardis lesusages de fait. La LSB est une faon spciale de fabriquerles binaires et de construire des paquetages. Pour arriver cela, les spcifications dfinissent : comment crer des paquetages et des logiciels pour

    qu'ils puissent s'installer et fonctionner partout. comment viter les collisions de noms avec les autres

    diffuseurs de logiciels. quelles sont les commandes et les librairies dynamiques

    prsentes et utilisables par tous les logiciels. quelles sont les interfaces binaires utilisables (ABI).

    Comment utiliser la LSB ?Pour crer des binaires et paquetages conformes laLSB, il faut : Gnrer des binaires ELF. Utiliser le chargeur LSB qui charge les librairies LSB.

    Par exemple sur x86, il faut utiliser /lib/ld-lsb.so.3. Utiliser uniquement des librairies et des commandes fai-

    sant partie de la LSB.

    Pourquoi et comment utiliserLinux Standard Base ?

    Il existe plus de 300 distributionsLinux (http://distrowatch.com/). Sivous voulez distribuer votre logicielpour qu'il fonctionne sur toutes ces

    distributions Linux, vous devezrsoudre tout un ensemble

    d'incompatibilits entre elles.

    32-58 19/03/2009 0:12 Page 51

  • dossier \\ Linux

    52 PROgrammez ! \\ Avril 2009

    Se conformer au standard FHS pour le placement desfichiers dans l'arborescence.

    Utiliser le sous-ensemble LSB des possibilits de RPM.Pour viter les conflits de nommage, la LSB spcifie d'utili-ser un prfixe unique. Pour obtenir un prfixe unique, vouspouvez enregistrer votre prfixe auprs de l'organismeLANANA (Linux Assigned Names And Numbers Authority) l'adresse suivante: http://www.lanana.org/ ou alors utiliservotre nom de domaine Internet.Ce prfixe doit tre utilis pour les fichiers et rpertoires: /opt// pour les programmes, donnes sta-

    tiques et librairies. /var/opt// pour les donnes dynamiques. /etc/opt// pour les fichiers de configuration. /etc/init.d/lsb--* pour les scripts d'initialisa-

    tion. /etc/{crond.d,cron.daily,cron.weekly,cron.monthly}

    /lsb- pour les crontabs.Ce prfixe doit aussi tre utilis dans les noms de vospaquetages de cette manire: lsb--*.

    Gnrer des binaires LSBVous pouvez utiliser les commandes lsbcc et lsbc++ pourgnrer des binaires compatibles LSB. Ces commandessont en fait des wrappers autour de cc et c++ qui y ajou-tent les bons paramtres pour avoir les chemins deslibrairies LSB et du chargeur dynamique LSB automati-quement.Exemple sur une machine x86_64:

    $ lsbcc -o prog prog.c

    $ ldd prog

    libm.so.6 => /lib64/tls/libm.so.6 (0x00002aaaaabc

    3000)

    libc.so.6 => /lib64/tls/libc.so.6 (0x00002aaaaad

    19000)

    /lib64/ld-lsb-x86-64.so.3 (0x00002aaaaaaab000)

    Si vous avez besoin d'utiliser des librairies non disponiblesdans la LSB, vous avez les choix suivants : dition de lien statique Distribuer les librairies avec vos packages. Utiliser des packages LSB qui fournissent cette librairie.

    PackagingPour fabriquer des packages RPM compatibles LSB, ilfaut dsactiver auto-requires et auto-provides pour viterde tirer des dpendances du systme et n'avoir que lesdpendances sur les paquetages LSB. Pour cela il fautmettre cette directive dans votre fichier .spec:

    AutoReqProv: no

    Il faut ensuite ne dpendre que du package lsb et explicite-ment des packages dont vous avez besoin:

    Requires: lsb >= 3.2, lsb-

    En option, vous pouvez redfinir les macros suivantespour utiliser les macros habituelles de rpm comme%configure et %makeinstall:

    %define _prefix /opt/

    %define _mandir %_prefix/man

    %define _docdir %_prefix/doc

    %define _datadir %prefix/share

    %define _localstatedir /var/opt/

    %define _sysconfdir /etc/opt/

    Scripts d'initialisationLa LSB dfinit des utilitaires pour ajouter ou enlever desservices lancs au dmarrage. Utiliser les commandessuivantes dans vos scriptlets rpm pour ajouter/suppri-mer vos services:

    if [ $1 = 1 ]; then

    /usr/lib/lsb/install_initd /etc/init.d/lsb--

    fi

    if [ $1 = 0 ]; then

    /usr/lib/lsb/remove_initd /etc/init.d/lsb--

    fi

    Il faut utiliser les en-ttes suivants dans vos scripts pourque les commandes install_initd et remove_initd fonction-nent:

    ### BEGIN INIT INFO

    # Provides: lsb-ourdb

    # Default-Start: 2 3 4 5

    # Short-Description: start and stop OurDB

    # Description: OurDB is a very fast and reliable

    database

    # engine used for illustrating init scripts

    ### END INIT INFO

    ConclusionLa LSB permet d'viter une nouvelle guerre des UNIX ! Ellepermet de fabriquer une fois et d'installer partout ! Dansce numro vous trouverez en complment un article surAppChecker.

    Frdric [email protected]

    Ancien de la direction technique deMandrakesoft (2002-2006), il intgre Intel,puis en 2008 Splitted-Desktop Systems en qua-lit de directeur de linnovation. Splitted-DesktopSystems est spcialis dans le dveloppementde solutions matrielles et logicielles destins

    aux accs et services Internet.

    LACTU AU QUOTIDIEN www.programmez.com

    32-58 19/03/2009 0:12 Page 52

  • Avril 2009 \\ PROgrammez ! 53

    dossier \\ Linux

    L open source propose desdizaines de milliers de projets,plus ou moins actifs et autantde codes source que lon peut utiliser, condition de faire attention leurprovenance et la ou les licences uti-lises. Les dfis sont les suivants :trouver le bon code, grer leslicences et veiller la scurit ducode. Privilgiez les projets connus.De plus en plus dapplications sontdveloppes avec des briques dediverses origines. On ne compte plusles projets de dveloppement hybridemlant du code externe, interne,ouvert et propritaire. Ces projetsposent des problmes au quotidien :car il faut intgrer le code extrieur,sassurer de son niveau de scurit etde sa qualit. Il faut trouver le bon code (bonne ver-sion, qualit et maturit de celui-ci,visibilit des licences utilises, voiredes redevances verser) puis valuerles risques potentiels que lon encourt.Cela implique de connatre parfaite-ment son code source, mme quandon fait du copier / coller et surtout dedterminer prcisment lorigine detout code extrieur mme si un dve-loppeur de lquipe en utilise mais ne ledit pas ! Le moindre doute doit alerterle dveloppeur, le chef de projet, lesresponsables puis les responsables duservice juridique sil y en a un.

    Deux pistes pour veiller la conformit de son codeAujourdhui, il existe des entits juri-diques spcialises dans la traabilitdu code et dans la gestion deslicences. Soit en cabinet indpendantsoit dans des SSII, ainsi Linagora pos-sde un ple juridique reconnu quipeut intervenir pour des clientsdemandeurs. Lautre solution, les

    Mon code est-il lgal ?Peut-on intgrer sans souci un code source extrieur ? La rponse est NONsurtout si la traabilit de ce code nest pas certaine ou si la licence souslequel il est, peut tre incompatible avec la licence envisage du logiciel endveloppement. La prudence est de mise.

    Nuxeo surveille et audite son code

    Nous n'utilisons pas de code de "provenance plus ou moins inconnue". Le choix deslibrairies est toujours rflchi, aprs un audit technique et juridique des diffrentes optionsqui se prsentent nous, y compris pour crire nos propres librairies. Nous avons lacontrainte que notre projet doit tre sous une licence libre "non-contaminante". Nousexcluons donc par exemple l'usage de composants sous licence GPL et nous privilgions leslicences Apache et LGPL. Dans le doute sur la compatibilit entre deux licences, nous tu-dions la question en dtail, en allant jusqu' contacter les auteurs pour avoir leur avis et si ledoute persiste, nous nous abstenons de l'utiliser. La dcision d'utiliser telle ou telle biblio-thque n'est pas laisse au choix des seuls dveloppeurs, mais implique la direction tech-nique et les architectes seniors du projet. De plus, l'ensemble des dveloppeurs estsensibilis. Les revues de code continues sont l'occasion de surveiller l'introduction de nou-velles dpendances dans la base de code. Enfin, nous faisons avant chaque version un auditde toutes les librairies qui sont utilises pour vrifier qu'aucune des rgles n'a t enfreintepar inadvertance. Nous avons dvelopp un outil, bas sur Maven, qui facilite ce travail,nous a confi Stphane Fermigier (Nuxeo).

    deux peuvent dailleurs fonctionner deconcert, consiste utiliser un outil devrification automatique du code qui :- sappuie sur une large base de don-nes la plus exhaustive possible

    - scanne automatiquement du codepour identifier lorigine des codes, lalicence et les codes potentiellementlitigieux

    Un des outils les plus connus estBlack Duck. Un autre diteur proposeaussi un outillage assez similaire :Palamida. Ces outils sintgrent dansle processus de dveloppement. Il estainsi possible de vrifier que seul lecode dment autoris est prsent

    dans le code final. Cela vite bien desproblmes par la suite. Black Duckdfinit ainsi sa mission : trouver lecode ncessaire, slectionner le codeselon ses critres, approuver le code,produire le projet avec le code slec-tionn, valider le code global, monito-rer lutilisation du code et de sadiffusion dans les applications. Pourassurer une telle mission, lditeurrepose sur une base de donnes par-ticulirement importante : 170 000projets open source rfrencs, 400millions de fichiers, plusieurs milliardsde lignes de code, prise en compte de1 400 licences, 28 000 failles descurit rfrences ! Surtout, labase subit une mise jour constante.Toutes ces solutions cotent cher,mais pour une grande entreprise,cest indispensable. Pour un dvelop-peur indpendant, une SSII ou unePME, un petit diteur, difficile de sepayer une telle prestation mais si unclient demande un rapport sur la pro-prit intellectuelle du code, vousdevrez le fournir.

    Franois Tonic

    32-58 19/03/2009 0:12 Page 53

  • E n ces temps de crise, quitouche mme les SSII, lOpenSource semble bien tirer sonpingle du jeu. Pour des raisons co-nomiques, les entreprises prfrentrecourir des technologies qui nexi-gent pas un investissement financieren licences logicielles. Mais limpratifconomique nest pas le seul facteuren jeu. " Ce nest pas tant le facteurcot que la libert, lautonomie, lasouplesse, que recherchent les entre-prises ", constate Marine Soroko,

    directrice asso-cie de Core-Techs, diteur quise dfinit comme" Open SourceFactory ". Aussiles diteurs, SSLL

    et autres socitsspcialises en logiciel libre ont-ilspour la plupart des plans dembaucheassez importants. Alter Way prvoit50 recrutements pour 2009 et unecroissance organique de +25%. Aprs avoir ralli une centaine denouveaux collaborateurs en 2008,Linagora annonce un plan de recrute-ment quasi quivalent pour l'anne2009. Ce sont ainsi des centaines denouveaux postes qui vont se crerdans ce secteur. Les missions sonttrs varies. Depuis la R&D chez lesditeurs, encore trs nombreux, jus-qu l intgration chez les SSLL.Mme les grands acteurs de linfor-matique (IBM, Oracle, Microsoft) yprtent une oreille attentive.

    Un dveloppement vers lapplicatifLessor de lOpen Source est aussi li lvolution du march. " Les solu-tions technologiques arrivent matu-rit, do il rsulte que le Libre prendde plus en plus de poids ", soulignePhilippe Montargs, PDG dAlter Way,

    intgrateur opensource. Et, commele rappelle CdricCarbone, direc-teur technique deTalend, fournis-seur de solutionsd'intgration dedonnes opensource : " LOpenSource a forte-ment volu, etdonc les profilsaussi. Aprsavoir couvert leschamps fonction-nels de l infra-

    structure, des rseaux, des systmesdexploitation, il sest tendu auxbases de donnes et middleware, etinvestit maintenant les outils applica-tifs et les couches mtiers (PGI, GRC,

    etc.). " Ce queconfirme Jean-Nol de Galzain,PDG de Wall ix,spcialiste de lascurit informa-t ique en open

    source : " Le marcha mri sur les applications web, GED,gestion du contenu, bases de don-nes, PGI, GRC, messageries Il y aune for te demande autour descouches mtiers. "Ds lors, aux profils trs techniquesdes premiers candidats, succdentdes comptences plus orientesmtiers. " Nous recherchons desinformaticiens open source qui ontacquis une exprience mtier pourparler avec des matrises douvrage ",prcise Cdric Carbone.Par ailleurs, alors que les mthodolo-gies dites classiques taient prodi-gues par de grands diteurs, " lesnouvelles mthodologies, plus lies des processus (agiles, scrum et

    autres mthodes collaboratives),donnent une longueur davance auxdveloppeurs open source ", indiqueJean-Nol de Galzain.

    LADN du dveloppeuropen sourceIl nexiste pas de cursus standardpour le dveloppeur open source.Cest un passionn, " autodidacte " dupoint de vue des comptences tech-niques open source, qui a dvelopppar lui-mme une forte expertise. L " ADN du dveloppeur open source "est ainsi dfini par Cdric Carbone : " Trs passionn, trs motiv, autono-me et communiquant en anglais ". Lacommunication avec la communautopen source sur le web est, en effet,un des points caractrisant ce typede dveloppeur : " En plus dun trsbon niveau technique, il nest jamaisbloqu car il sait mettre profit descommunauts, utiliser des rseauxsociaux ", ajoute Cdric Carbone. Carle march de lOpen Source est mon-

    dial. " Nous avonsdes clients par-tout dans lemonde, ce quincessite uneapproche mondia-lise ", confirme

    Benjamin Mestrallet,PDG et fondateur deXo Platform, di-teur de logiciel pour la collaborationen entreprise.Dans lOpen Source, le travail est sou-vent trs dcentralis. Aussi de nom-breux dveloppeurs tltravaillent,hors du rseau dentreprise. " Cheznous, beaucoup de personnes tltra-vaillent ; ils utilisent des outils de colla-boration open source ; i ls sontindpendants trs rapidement ",rsume Benjamin Mestrallet. Lessocits spcialises dans le Libreutilisent souvent cette possibilit, en

    Mtier : dveloppeur Open SourceLibres, passionns, innovants, autonomes. Telles sont les qualits le plussouvent cites pour les dveloppeurs open source. Des parcours, desformations, mais aussi des modes de recrutement originaux caractrisentles spcialistes du Libre.

    dossier \\ Linux

    54 PROgrammez ! \\ Avril 2009

    Philippe Montargs

    32-58 19/03/2009 0:12 Page 54

  • mettant en place des messageriesinstantanes pour faciliter la collabo-ration entre dveloppeurs. De ce fait,les changes se font gnralementen anglais, quelle que soit lorigine dudveloppeur, car, il faut le souligner,les socits open source nhsitentpas faire appel des dveloppeursdu monde entier.Laspect cratif et innovateur estaussi mis en avant par la plupart desacteurs. Dans le domaine du Libre,tout change tout le temps, linnova-tion et la veille technologique sontdonc incontournables. " Dans lecadre de projets collaboratifs et pourmettre en place de nouveaux pro-duits, nos ingnieurs R&D peuventrapidement concrtiser une ide,sans contraintes juridiques (pas delicences, pas de droit dutilisation) ",indique Jean-Nol de Galzain. " Lesdveloppeurs open source sont moti-vs par la veille technologique perma-nente ", remarque David Duquenne,directeur de division Services & Tech-nologies chez Improve, centre decomptences Objet, Internet et nou-velles technologies. " Ils matrisentbien la prospection technologique,consultent rgulirement les forumsde discussion, connaissent les projetsopen source en cours, ils vont cher-

    dossier \\ Linux

    cher linformation directement lasource. " Ce qui compte surtout, pourPhilippe Montargs, " cest limplica-tion, ladhsion aux valeurs du logiciellibre, et la crativit. "

    Des facilits de recrutementLes comptences recherches parles spcialistes de lOpen Source sontmultiples : ingnieurs R&D, chefs deprojet, consultants, techniciens dex-ploitation, intgrateurs, formateurs...Mme si les rmunrations peuventtre plus faibles que pour les autresdomaines, les acteurs de lOpen Sour-ce ne semblent pas avoir de difficul-ts recruter, et pour ce quiconcerne les SSLL le turn-over estrelativement faible par rapport auxSSII classiques. " Le Libre est unattrait pour ceux qui cherchent ajouter cette technologie leur exp-rience, par exemple dans le cadredapplications internet/intranet, deprojets GED, de scurit ", ajouteJean-Nol de Galzain. De plus, ils peu-vent avoir loccasion de participer des projets de R&D trs ambitieux,comme celui auquel participe Wallixdans le cadre du ple de comptitivitSystematic. Les candidats sont sou-vent connus de la socit avant de

    faire lobjet de recrutement. La com-munaut autour dun produit ou dunditeur peut comprendre plusieursmilliers de personnes. Ainsi Talendfait tat de 2 000 3 000 bta-tes-teurs, sans compter les dveloppeursde patches et autres contributeurs,qui connaissent dj les solutions decet diteur et travaillent courammentavec elles. " Nous faisons des offresdemploi sur les forums de notre com-munaut ", indique Cdric Carbone. " Les candidats connaissent djnotre technologie, notre socit,notre mode de fonctionnement."Chez Improve, si lon recrute des pro-fils expriments sur les technologiesrcentes, les juniors font souvent leurentre via des stages, o ils ont tra-vaill en interne sur un projet de R&Den open source. Si Alter Way recrute,comme tout le monde, des profils sor-tant dcoles dingnieurs, la socitpeut aussi intgrer des candidatsmoins diplms, voire des autodi-dactes : " Nous les faisons monter enpuissance grce nos formationsinternes ", prcise Philippe Montar-gs. " Nous sommes dans unelogique dinvestissement, en vitantde basculer dans la logique tradition-nelle de candidats prts lemploi. " Claire Rmy

    Le rapport complet en franais

    est disponiblesur

    www.programmez.com

    Les 25 erreurs de programmation les plus frquentes

    EXCLUSIF

    32-58 19/03/2009 0:12 Page 56

  • Avril 2009 \\ PROgrammez ! 57

    dossier \\ Linux

    Au cur du Mozilla LabsQue reprsente Mozilla Labs ? Avant tout une ppinire dides, les projets laborsaboutiront ou non une fonction, un logiciel. Il sagit de tester des concepts, desorientations logicielles et de regarder la raction de la communaut, des diteurs, des dveloppeurs. Cest l que se concoctent quelques ides du futur de Mozilla.

    Une photo defamille desquipes, descontributeurs

    type au Labs. Chaque jour est diff-rent, avec une inspiration diffrente,un nouveau focus. Pourvu que celarende le web (plus) ouvert et contri-bue amliorer le lieu ou on travaille,joue, communique.

    P. ! : De quelle manire une ide germe, seconstruit et comment la fait-on aboutir ?A.R. : Le Labs est un espace virtuelo ensemble, on cre quelque chose,on exprimente, on joue avec les der-nires innovations du web, et de latechnologie. Des milliers de per-sonnes participent notre processusConcept Series [http://labs.mozilla.com/projects/concept-series/]. Au MozillaLabs, nous regardons les gens utili-ser le web et nous nous posons laquestion : comment pouvons-nous lesaider moderniser, amliorer lex-

    A ujourdhui, le Mozilla Labs,cest : 6 dveloppeurs, 2designers, 9 intgrateurs,une cinquantaine de contributeursrguliers de la communaut et plusdune centaine de personnes dans lapartie " concept series ". Le cerveaude lensemble est bas MountainView et Toronto, mme si plusieursbureaux locaux sont parpills dans lemonde. Actuellement, une douzainede projets sont actifs et voluent augr des sessions techniques, desides, ou sont laisss tels quels AzaRaskin, leader de lexprience utilisa-teur du Labs, nous parle un peu plusde cette bote ide de lOpen Source.

    Programmez ! : comment se drouleune journe type dans les Labs ?Aza Raskin : il nexiste pas de journe

    prience ? Trop souvent, noussommes tous, en tant quutilisateurs,tombs dans le pige du " syndromede Stockholm " et apprenons aimerle systme qui nous pige. En obser-vant la faon dont les utilisateurs met-tent en uvre le web au quotidien,nous pouvons crer des innovationsqui peuvent librer lexprience, lusa-ge. Par exemple, Weave nous libredes contraintes de lutilisation de mul-tiples ordinateurs et terminaux. AvecWeave, les mots de passe, onglets,historiques, marque-pages sont auto-matiquement repris ainsi que lexp-rience de lutilisateur. Ils le suiventquels que soient les terminaux utiliss !On se sent toujours comme la mai-son. Ubiquity nous libre de la nces-sit de jongler entre les sites web etles tches sont jour. Avec Google,

    32-58 19/03/2009 0:12 Page 57

  • dossier \\ Linux

    58 PROgrammez ! \\ Avril 2009

    vous tapez ce que vous voulez trou-ver. Avec ce projet, vous tapez ce quevous voulez faire. Le navigateur le fait,o que vous soyez !

    P. ! : lorsquune ide est valide,comment le projet dmarre-t-il, quile dirige et de quelle manire peut-ilaboutir ?A.R. : De nombreux projets se ralisent trs rapidement. Coop ouencore New Tab furent crs enmoins dune semaine ! Dautres,comme Ubiquity et Weave, possdent

    un impact plus important et seconoivent sur la dure. La gestionprojet est la mme que pour le restede Mozilla et de lOpen Source engnral. Chaque projet a un " cham-pion ", nous avons des tlconf-rences chaque semaine, des wikis,des blogs, des chats ! De plus, nosconversations sont ouvertes et tout lemonde peut y participer.

    P. ! : qui dcide de lancer le dvelop-pement dun projet ? le gre au quoti-dien ? Qui trouve les dveloppeurs ?A. R. : Il sagit de linspiration, du fee-ling. Si une ide ninspire pas les parti-c ipants ou ne convainc pas un " champion " den prendre les rnes,alors nous ne le faisons pas ! Les per-sonnes qui travaillent Mozilla sonten quelque sorte lchafaudage de lacommunaut qui cre, dveloppe,soutient Firefox. Mozilla Labs est ga-lement un chafaudage. Le leaderdun projet peut sortir de nos rangsou venir de lextrieur. Et il peut vivrenimporte o dans le monde. Le feed-back est critique pour les projets duLabs. Un projet ne vit pas, nvoluepas dans le vide ! Les ides se trans-forment au fil du temps !

    P. ! : nimporte qui peut-il aider leMozilla Labs ?A. R. : Oui, tout le monde peut parti-ciper au Labs. Il rejoindra le ConceptSeries. Nous sommes particulire-ment intresss par les designersainsi bien sr, que par les dvelop-peurs. Mais pour garder un contactau plus prs des utilisateurs, de laralit, rgulirement (en principechaque mois), Mozilla Labs organiseles Labs Nights. Occasion pour discu-ter des nouvelles volutions, des fonc-tions, des tendances, recueillir lessentiments Franois Tonic

    Un coin de bureau des Labs

    Ambiance dtente travail durant lessoires Labs

    De gauche droite : Aza Raskin, JonathanDiCarlo, Dan Mills, Rhian Gracey, Myk Melez

    Bespin :un diteur de code ligneLe dveloppement sera-t-il en ligne dans quelquesannes ? C'est en tout cas une des tendancesactuelles chez les diteurs. Mozilla lance le projetBespin qui est avant tout un framework opensource pour crer un diteur de code. Dans laversion actuelle, il supporte la coloration, lesfonctions basiques d'dition, import / export deprojets, prvisualisation de fichiers, etc.

    Weave : une exprience en dehors des terminauxComment garder son exprience utilisateur, sesmarque pages, quel que soit le navigateur et lesterminaux. c'est un vritable dfi technique.Weave constitue un projet passionnant et strat-gique pour le futur de l'internet et de firefox. Com-ment se rendre totalement indpendant...

    Personas :personnalis l'interfaceComment simplement et rapidement personnali-ser l'interface de Firefox ? Pour Labs, la rponseest Personas. Car le modle actuel est vucomme trop lourd, trop compliqu. Il faut faireplus simple, plus intuitif...

    Prism :le site web sur son bureauCe projet avait dfray la chronique lors de saprsentation. Prism permet depuis son bureaud'accder son application web depuis le clientPrism install sur son bureau. Le site web esttransform depuis Firefox que l'on rcupreensuite dans Prism.

    Test Pilot :l'autre manire de faire des testsL'un des soucis de Labs et des logiciels en gn-ral consiste rcuprer et traiter efficacementles commentaires, les bugs, bref l'ensemble dufeedback. Pour ce faire, Labs a conu Test Pilotqui se prsente sous la forme d'une extensionFirefox.

    Concept Series :penser l'interface de demainLabs travaille activement sur l'interface dedemain du web et des logiciels web. Dans cettesection, on retrouve de vritables "concept cars"qui aboutiront ou non. On y trouve le concept del'interface mobile. Et tout le monde peut proposerson propre concept. Pourquoi pas vous ?

    Labs recle encore bien d'autres trsors. N'hsi-tez pas visiter rgulirement le site officiel pourles dcouvrir, les tester.

    Site : http://labs.mozilla.com

    Les projets du Labs

    32-58 19/03/2009 0:13 Page 58