Tests contre Bogues : une guerre sans fin (Libres conseils 13/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : Floxy, ga3lig, goofy, Astalaseven, Slystone, okram, KoS, Lycoris, 4nti7rust, peupleLa, Luc Didry, + Julius22

Même en multipliant les regards, les bogues ne sautent pas aux yeux.

Ara Pulido

Ara Pulido est ingénieure d’essais pour Canonical, d’abord comme membre de l’équipe assurance qualité d’Ubuntu (QA team), et maintenant dans le cadre de l’équipe de certification du matériel. Même si elle a commencé sa carrière en tant que développeuse, elle a vite découvert que ce qu’elle aimait vraiment, c’était tester les logiciels. Elle est très intéressée par les nouvelles techniques d’analyse et tente d’utiliser son savoir-faire pour améliorer Ubuntu.

Les tests maison ne suffisent pas

Je me suis impliquée dans le logiciel libre dès le début de mes études à l’Université de Grenade. Là-bas, avec des amis, nous avons fondé un groupe local d’utilisateurs de Linux et organisé plusieurs actions pour promouvoir le logiciel libre. Mais, depuis que j’ai quitté l’université, et jusqu’à ce que je commence à travailler chez Canonical, ma carrière professionnelle s’est déroulée dans l’industrie du logiciel propriétaire, d’abord comme développeuse puis comme testeuse.

Lorsque l’on travaille au sein d’un projet de logiciel propriétaire, les ressources pour tester sont très limitées. Une petite équipe reprend le travail initié par les développeurs avec les tests unitaires, utilisant leur expérience pour trouver autant de bogues que possible afin de mettre à disposition de l’utilisateur final un produit aussi abouti que possible. Dans le monde du logiciel libre, en revanche, tout est différent.

Lors de mon embauche chez Canonical, hormis la réalisation de mon rêve d’avoir un travail rémunéré au sein d’un projet de logiciel libre, j’ai été émerveillée par les possibilités des activités de test dans le cadre d’un tel projet. Le développement du produit s’effectue de manière ouverte, et les utilisateurs ont accès au logiciel dès son commencement, ils le testent et font des rapports de bogues dès que c’est nécessaire. C’est un nouveau monde rempli de beaucoup de possibilités pour une personne passionnée par les tests. Je voulais en profiter au maximum.

Comme beaucoup de personnes, je pensais que les tests « maison », c’est-à-dire l’utilisation par soi-même du logiciel que l’on envisage de mettre à disposition, était l’activité de test la plus importante qu’on puisse mener dans le logiciel libre. Mais si, selon la formule de Raymond dans La cathédrale et le bazar « avec suffisamment d’observateurs, tous les bogues sautent aux yeux », alors comment se fait-il qu’avec ses millions d’utilisateurs Ubuntu comporte encore des bogues sérieux à chaque nouvelle version ?

La première chose dont je me suis aperçue quand j’ai commencé à travailler chez Canonical c’est que les activités de test organisées étaient rares ou inexistantes. Les seules sessions de test qui étaient d’une certaine façon organisées se présentaient sous la forme de messages électroniques envoyés à une liste de diffusion, manière de battre le rappel pour tester un paquetage dans la version de développement d’Ubuntu. Je ne pense pas que cela puisse être considéré comme une vraie procédure de test, mais simplement comme une autre forme de « test maison ». Cette sorte de test génère beaucoup de doublons, car un bogue facile à débusquer sera documenté par des centaines de personnes. Malheureusement le bogue potentiellement critique, vraiment difficile à trouver, a de bonnes chances de passer inaperçu en raison du bruit créé par les autres bogues, et ce même si quelqu’un l’a documenté.

En progrès

La situation s’améliore-t-elle ? Sommes-nous devenus plus efficaces pour les tests au sein des projets de développement libre ? Oui, j’en suis convaincue.

Pendant les derniers cycles de développement d’Ubuntu, nous avons commencé bon nombre de sessions de test. La gamme des objectifs pour ces sessions est large, elle comprend des domaines comme de nouvelles fonctionnalités de bureau, des tests de régression, des tests de pilotes X.org ou des tests de matériel d’ordinateur portable. Les résultats sont toujours suivis et ils s’avèrent vraiment utiles pour les développeurs, car ils leur permettent de savoir si les nouveautés fonctionnent correctement, au lieu de supposer qu’elles fonctionnent correctement à cause de l’absence de bogues.

En ce qui concerne les outils d’assistance aux tests, beaucoup d’améliorations ont été apportées :

  • Apport(1) a contribué à augmenter le niveau de détail des bogues signalés concernant Ubuntu : les rapports de plantage incluent toutes les informations de débogage et leurs doublons sont débusqués puis marqués comme tels ; les utilisateurs peuvent signaler des bogues sur base de symptômes, etc.
  • Le Launchpad(2), avec ses connexions en amont, a permis d’avoir une vue complète des bogues – sachant que les bogues qui se produisent dans Ubuntu se situent généralement dans les projets en amont, et permet aux développeurs de savoir si les bogues sont en cours de résolution.
  • Firefox, grâce à son programme et à son extension Test Pilot, mène des tests sans qu’on ait à quitter le navigateur(3). C’est, à mon sens, une bien meilleure façon de rallier des testeurs qu’une liste de diffusion ou un canal IRC.
  • L’équipe Assurance Qualité d’Ubuntu teste le bureau en mode automatique et rend compte des résultats toutes les semaines(4), ce qui permet aux développeurs de vérifier très rapidement qu’il n’y a pas eu de régression majeure pendant le développement.

Cependant, malgré l’amélioration des tests dans les projets de logiciel libre il reste encore beaucoup à faire.

Pour aller plus loin

Les tests nécessitent une grande expertise, mais sont encore considérés au sein de la communauté du le logiciel libre comme une tâche ne demandant pas beaucoup d’efforts. L’une des raisons pourrait être que la manière dont on les réalise est vraiment dépassée et ne rend pas compte de la complexité croissante du monde du logiciel libre durant la dernière décennie. Comment est-il possible que, malgré la quantité d’innovations amenées par les communautés du logiciel libre, les tests soient encore réalisés comme dans les années 80 ? Il faut nous rendre à l’évidence, les scénarios de tests sont ennuyeux et vite obsolètes. Comment faire grandir une communauté de testeurs supposée trouver des bogues avérés si sa tâche principale est de mettre à jour les scénarios de test ?

Mais comment améliorer la procédure de test ? Bien sûr, nous ne pouvons pas nous débarrasser des scénarios de test, mais nous devons changer la façon dont nous les créons et les mettons à jour. Nos testeurs et nos utilisateurs sont intelligents, alors pourquoi créer des scripts pas-à-pas ? Ils pourraient aisément être remplacés par une procédure de test automatique. Définissons plutôt une liste de tâches que l’on réalise avec l’application, et certaines caractéristiques qu’elle devrait posséder. Par exemple, « l’ordre des raccourcis dans le lanceur doit pouvoir être modifié », ou « le démarrage de LibreOffice est rapide ». Les testeurs trouveront un moyen de le faire, et créeront des scénarios de test en parallèle des leurs.

Mais ce n’est pas suffisant, nous avons besoin de meilleurs outils pour aider les testeurs à savoir ce qu’ils testent, où et comment. Pourquoi ne pas avoir des API (interfaces de programmation) qui permettent aux développeurs d’envoyer des messages aux testeurs à propos des nouvelles fonctionnalités ou des mises à jour qui doivent être testées ? Pourquoi pas une application qui nous indique quelle partie du système doit être testée ? en fonction des tests en cours ? Dans le cas d’Ubuntu, nous avons les informations dans le Launchpad (il nous faudrait aussi des données sur les tests, mais au moins nous avons des données sur les bogues). Si je veux démarrer une session de test d’un composant en particulier j’apprécierais vraiment de savoir quelles zones n’ont pas encore été testées ainsi qu’une liste des cinq bogues comptant le plus de doublons pour cette version en particulier afin d’éviter de les documenter une fois de plus. J’aimerais avoir toutes ces informations sans avoir à quitter le bureau que je suis en train de tester. C’est quelque chose que Firefox a initié avec Test Pilot, bien qu’actuellement l’équipe rassemble principalement les données sur l’activité du navigateur.

La communication entre l’amont et l’aval et vice-versa doit aussi être améliorée. Pendant le développement d’une distribution, un bon nombre des versions amont sont également en cours de développement, et ont déjà une liste des bogues connus. Si je suis un testeur de Firefox sous Ubuntu, j’aimerais avoir une liste des bogues connus aussitôt que le nouveau paquet est poussé dans le dépôt. Cela pourrait se faire à l’aide d’une syntaxe reconnue pour les notes de versions, syntaxe qui pourrait ensuite être facilement analysée. Les rapports de bogue seraient automatiquement remplis et reliés aux bogues amont. Encore une fois, le testeur devrait avoir facilement accès à ces informations, sans quitter son environnement de travail habituel.

Les tests, s’ils étaient réalisés de cette manière, permettraient au testeur de se concentrer sur les choses qui comptent vraiment et font de la procédure de test une activité qualifiée ; se concentrer sur les bogues cachés qui n’ont pas encore été découverts, sur les configurations et environnements spéciaux, sur la création de nouvelles manières de casser le logiciel. Et, in fine, s’amuser en testant.

Récapitulons

Pour ce que j’en ai vu ces trois dernières années, les tests ont beaucoup progressé au sein d’Ubuntu et des autres projets de logiciels libres dans lesquels je suis plus ou moins impliquée, mais ce n’est pas suffisant. Si nous voulons vraiment améliorer la qualité du logiciel libre, nous devons commencer à investir dans les tests et innover dans la manière de les conduire, de la même façon que nous investissons dans le développement. Nous ne pouvons pas tester le logiciel du XXIe siècle avec les techniques du XXe siècle. Nous devons réagir. Qu’il soit open source ne suffit plus à prouver qu’un logiciel libre est de bonne qualité. Le logiciel libre sera bon parce qu’il est open source et de la meilleure qualité que nous puissions offrir.

1 http://wiki.ubuntu.com/Apport

2 http://launchpad.net

3 http://testpilot.mozillalabs.com

4 http://reports.qa.ubuntu.com/reports/desktop-testing/natty




Geektionnerd : L’histoire d’Aaron Swartz

C’est un Geektionnerd très spécial que nous propose Gee cette semaine (cliquez sur l’image pour l’agrandir).

Vous pouvez également lire les traductions de quelques uns de ses articles que nous avons publié cette semaine, ainsi que ce Manifeste Hacker qui lui va si bien.

Geektionnerd - Simon Gee Giraudot - CC by-sa

Geektionnerd - Simon Gee Giraudot - CC by-sa

Crédit : Simon Gee Giraudot (Creative Commons By-Sa)




Introduction à l’économie contributive – Vidéo de Simon Lincelles (Ars Industrialis)

Le Framablog a pris l’habitude de suivre les travaux de Bernard Stiegler au sein d’Ars Industrialis. Il faut dire que ça n’est pas tous les jours qu’un philosophe affirme que « le logiciel libre peut redonner sens à nos vies » !

Nous vous proposons ci-dessous le réplication d’une vidéo de Simon Lincelles intitulée « Introduction à l’économie contributive » et co-écrit par Bernard Stiegler.

Malgré quelques inexactitudes, nous partageons l’hypothèse que le logiciel libre (et Wikipédia) représentent un espoir et un modèle pour l’avenir de notre économie.

Remarque : cette vidéo (lien direct Vimeo) est le troisième épisode d’une série initiée ici.




Si je me fais renverser par un camion… par Aaron Swartz (à 16 ans)

Au delà de l’émotion des circonstances, voici la traduction d’une note d’Aaron Swartz qui pose la question du devenir de nos données après notre mort.

Et pour ce qui concerne le code, le léguer à la FSF est une bonne idée 😉

Cet article est rangé dans le répertoire « 2002 » de son site. Il avait alors 16 ans !

Doc Searls - CC by

Si je me fais renverser par un camion…

If I get hit by a truck…

Aaron Swartz – 2002 – Site personnel
(Traduction : Moosh, lgodard, zozio nocture (aka brandelune), aKa, Sky)

Si je me fais renverser par un camion… lisez cette page.


Il y a une vieille blague chez les programmeurs sur qui va gérer le code si son auteur se fait renverser par un camion. Cette page est ici pour assurer que tout le monde sache quoi faire si, pour une raison donnée, je ne suis plus en mesure de conserver mes services Web en fonctionnement.

Je désigne Sean B. Palmer comme mon exécuteur testamentaire virtuel pour l’organisation de ces choses (et Sean, si tu effaces quoi que ce soit, je te hanterai de ma tombe !)

Je demande que le contenu de tous mes disques durs soit rendu public sur aaronsw.com.

Web.Resource.org Sean (ou la personne qu’il désignera) deviendra le nouveau webmaster. Continue de mettre à jour le site et la liste des miroirs, et garantis la persistance des URLs. (Ceci implique que rien de controversé ou d’illégal ne doive être ajouté, à part pour Cryptome.)

Code Source Le copyright pour mon code source sous GPL doit être transféré à la Free Software Foundation. Elle semble avoir une politique raisonnable concernant la mise à disposition du code.

Sites Web Merci de laisser les sites Web opérationnels quand c’est possible, sans modifier les contenus que j’ai écrit quand approprié. Des pages dédiées (par exemple sur aaronsw.com) pourront contenir une note sur ce qui m’est arrivé avec un lien vers des plus d’information. La page d’accueil sur aaronsw.com devra être modifiée avec un lien vers l’ancienne page.

Tombe Je voudrais reposer dans un endroit qui ne me tuera pas. Ce qui veut dire avoir un accès à de l’oxygène (bien qu’un accès direct serait probablement une mauvaise chose), et ne pas avoir à traverser 6 pieds de saleté.

Pour le reste, envoyez un e-mail à Sean. Je suis certain qu’il fera quelque chose de raisonnable.

Si quelque chose m’arrive, merci de mettre à jour le pied de page de cette note avec un lien. Envoyez également un e-mail aux listes concernées et mettez en place une réponse automatique pour mon adresse e-mail afin d’informer les personnes qui m’écrivent. N’hésitez pas à publier les choses que les gens disent à mon propos sur le site. Tout ceci est probablement évident, et je suis certain que vous vous en sortirez.

Oh, et au fait, vous me manquerez tous.

Crédit photo : Doc Searls (Creative Commons By)




Le Manifeste du hacker (1986) #pdftribute Aaron Swartz

Un certain nombre de textes tournent actuellement sur le Net suite au décès d’Aaron Swartz. Parmi eux on trouve « La Conscience d’un hacker » (ou « Le Manifeste du hacker ») datant de… 1986 et que d’aucuns trouvent particulièrement adapté aux circonstances. Et pour cause…

Nous vous le proposons traduit ci-dessous[1]. Il a été rédigé par Loyd Blankenship, (alias The Mentor) juste après son arrestation.

« Oui, je suis un criminel. Mon crime est celui de la curiosité. »

Remarque : Nous sommes en 1986 et c’est par le téléphone que passe le réseau. Un téléphone qui se retrouve alors bloqué par ces « sales gosses » pour la communication classique.

Elizabeth Brossa - CC by-nc-sa

La conscience d’un hacker

The Conscience of a Hacker

The Mentor – 8 janvier 1986 – Phrack.org
(Traduction : NeurAlien, Moosh, ga3lig, goofy, zozio nocture (aka brandelune), Slystone, KoS, aKa, Martin, lamessen, Sky)

Ce qui suit a été écrit peu de temps après mon arrestation…

Un autre s’est fait prendre aujourd’hui, c’est partout dans les journaux.
« Scandale : Un adolescent arrêté pour crime informatique », « Arrestation d’un hacker après le piratage d’une banque »…
Satanés gosses, tous les mêmes.

Mais vous, dans votre psychologie de costume trois pièces et votre conscience technologique des années 50, avez-vous un jour pensé à regarder le monde avec les yeux d’un hacker ?
Ne vous êtes-vous jamais demandé ce qui l’avait fait agir et quelles forces l’avaient animé ?
Je suis un hacker, entrez dans mon monde…
Mon monde, il commence avec l’école… Je suis plus éveillé que la plupart des autres enfants et les nullités qu’on nous enseigne m’ennuient…
Satanés gamins, ce sont tous les mêmes.

Je suis au collège ou au lycée. J’ai écouté les professeurs expliquer pour la quinzième fois comment réduire une fraction.
J’ai bien compris. « Non Mme Dubois, je n’ai pas montré mon travail. Je l’ai fait dans ma tête ».
Satané gosse. Il a certainement copié. Ce sont tous les mêmes.

J’ai fait une découverte aujourd’hui. J’ai trouvé un ordinateur.
Attends une minute, c’est cool. Ça fait ce que je veux. Si ça fait une erreur, c’est parce que je me suis planté.
Pas parce qu’il ne m’aime pas…
Ni parce qu’il se sent menacé par moi…
Ni parce qu’il pense que je suis un petit malin…
Ni parce qu’il n’aime pas enseigner et qu’il ne devrait pas être là…
Satané gosse. Tout ce qu’il fait c’est jouer. Ce sont tous les mêmes.

Et c’est alors que ça arrive. Une porte s’ouvre…
Les impulsions électroniques déferlent sur la ligne téléphonique comme l’héroïne dans les veines d’un drogué.
Pour trouver dans un Forum le refuge contre la stupidité quotidienne.
« C’est ça… C’est ici que je dois être…»
Ici, je connais tout le monde… Même si je n’ai jamais rencontré personne. Je ne leur ai jamais parlé, et je n’entendrai peut-être plus parler d’eux un jour… Je vous connais tous.
Satané gosse. Encore pendu au téléphone. Ce sont tous les mêmes.

A l’école, on nous a donné des pots de bébé alors qu’on avait les crocs pour un steak…
Les morceaux de viande que vous avez bien voulu nous tendre étaient pré-mâchés et sans goût.
On a été dominé par des sadiques ou ignoré par des apathiques.
Les seuls qui avaient des choses à nous apprendre trouvèrent en nous des élèves de bonne volonté, mais ceux-ci étaient comme des gouttes d’eau dans le désert.

C’est notre monde maintenant… Le monde de l’électron et des commutateurs, la beauté du baud. Nous utilisons un service déjà existant, sans payer ce qui pourrait être bon marché si ce n’était pas géré par des profiteurs avides, et c’est nous que vous appelez criminels.
Nous explorons… et vous nous appelez criminels.
Nous recherchons la connaissance… et vous nous appelez criminels.
Nous existons sans couleur de peau, sans nationalité, sans dogme religieux… et vous nous appelez criminels.
Vous construisez des bombes atomiques, vous financez les guerres, vous assassinez et trichez, vous manipulez et vous nous mentez en essayant de nous faire croire que c’est pour notre propre bien… et pourtant c’est nous qui sommes les criminels.

Oui, je suis un criminel. Mon crime est celui de la curiosité.
Mon crime est celui de juger les gens selon ce qu’ils pensent et disent, pas selon leur apparence.
Mon crime est d’être plus malin que vous, quelque chose que vous ne me pardonnerez jamais.

Je suis un hacker, et ceci est mon manifeste.
Vous pouvez arrêter un individu, mais vous ne pouvez pas tous nous arrêter…
Après tout, nous sommes tous les mêmes.

The Mentor

Crédit photo : Elizabeth Brossa (Creative Commons By-Nc-Sa)

Notes

[1] Il en existait une première traduction mais elle était « perfectible ».




Cent fois sur le métier remettez vos correctifs… (Libres conseils 12/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : ga3lig, Fred, peupleLa, LAuX, Goofy, jcr83, purplepsycho, Jej, Jean-Noël AVILA, Julius22, kalupa, 4nti7rust, lamessen, okram + Cédric Corazza

Écrire des correctifs

Kai Blin

Kai Blin est un bio-informaticien qui mène des recherches sur les antibiotiques dans le cadre de ses activités quotidiennes, tant sur ordinateur qu’au labo. Il est très heureux de pouvoir diffuser le logiciel développé dans le cadre de ses activités professionnelles sous licence open source. Vivant dans la charmante ville de Tübingen, dans le sud de l’Allemagne, Kai passe une partie de ses soirées sur l’ordinateur, à programmer pour le projet Samba. Il consacre la majorité de son temps libre restant au théâtre, où il participe aussi bien à la performance scénique qu’à la construction d’accessoires et à la régie technique dans les coulisses.

Écrire des correctifs et les proposer est souvent la première interaction concrète que vous pouvez avoir avec un projet open source. C’est la première impression que vous donnez aux développeurs présents. Proposer de « bons » premiers correctifs, ou tout du moins jugés comme tels par le projet auquel vous contribuez, vous rendra la vie plus facile. Les règles précises d’écriture du correctif, de la façon de le soumettre au projet et tous les autres détails nécessaires vont sans doute varier selon les divers projets auxquels vous voulez contribuer. Mais j’ai trouvé quelques règles générales que l’on retrouve presque à chaque fois. Et c’est ce dont traite cet article.

Comment tout foirer

Le fil rouge de ce livre est « ce que j’aurais aimé savoir avant de commencer », aussi permettez-moi de commencer par l’histoire de mes premiers correctifs. J’ai été impliqué sérieusement dans l’écriture de code pour la première fois pendant le Google Summer of Code™ de 2005. Le projet Wine avait accepté que j’implémente un chiffrement NTLM basé sur des outils connexes à Samba. Wine est un projet à committer unique, ce qui signifie que seul le développeur principal, Alexandre Julliard, possède les autorisations de commit sur le dépôt principal. En 2005, Wine utilisait encore CVS comme système de gestion de versions. Quand le projet a démarré et que j’ai reçu le courriel me disant que j’étais accepté, j’ai contacté mon mentor sur IRC et me suis mis au travail.

J’alignais joyeusement les lignes de code et bientôt j’ai pu implémenter les premières fonctionnalités. J’ai produit un correctif et l’ai soumis à mon mentor pour qu’il fasse une relecture. Au temps du CVS, il fallait renseigner toutes les options de diff(1) manuellement, mais je m’étais particulièrement documenté sur la partie cvs diff -N -u > ntlm.patch. De cette façon, j’avais le fichier que je pouvais envoyer à mon mentor. En fait, c’est quelque chose que j’ai bien fait. Et c’est la première chose que vous devriez prendre en compte quand vous préparez un correctif. Le résultat classique de la commande diff est sans doute plus facile à lire pour un ordinateur, mais je n’ai jamais rencontré un humain préférant le résultat classique au résultat d’un diff unifié. Grâce à l’option -u , diff utilise les notations + + + et - - -

Par exemple, le diff qui suit est le résultat de la réécriture de « Hello, World! » en Python, version suédoise.

diff —git a/hello.py b/hello.py index 59dbef8..6334aa2 100644 --- a/hello.py +++ b/hello.py @@ -1,4 +1,4 @@ #!/usr/bin/env python # vim: set fileencoding=utf-8 -print "Hello, world!" +print "Halla, varlden!" 

La ligne qui commence par « - » est la ligne supprimée, celle qui commence par « + » est celle qui va être ajoutée. Les autres lignes permettent à l’outil de correction de faire son travail.

J’ai envoyé le diff unifié que je venais de créer à mon mentor qui m’en a fait une review(2) en me signalant beaucoup d’éléments à modifier. J’ai effectué les corrections et lui ai renvoyé un nouveau diff peu de temps après. Le cycle d’analyse du code a continué durant toute la durée du GSoC et mon correctif ne cessait de grossir. Quand la date de livraison est arrivée, je me suis retrouvé avec un correctif monstrueux dans lequel étaient inclus tous mes changements. Naturellement, j’ai eu beaucoup de mal à obtenir une review de mon correctif, sans parler de le faire accepter. Pour finir, Alexandre refusa de regarder plus avant le correctif tant que je ne l’aurais pas scindé. Les règles en usage chez Wine exigent que les correctifs soient de petites étapes logiques ajoutant une fonctionnalité. Chaque correctif doit faire quelque chose d’utile et pouvoir être compilé.

De fait, scinder un énorme correctif existant en différentes parties cohérentes individuellement et qui peuvent être compilées représente beaucoup de travail. C’était même d’autant plus de travail que je ne connaissais qu’une seule manière de le faire : écrire un petit correctif, créer le diff, le proposer à la validation, mettre à jour ma contribution locale et écrire alors le correctif suivant. Peu de temps après que j’ai commencé à envoyer mes premiers petits correctifs, Wine est entré dans une phase de gel des fonctionnalités d’un mois menant à la version 0.9.0 bêta. Je suis resté sur le correctif suivant pendant un mois avant de pouvoir continuer et j’ai finalement envoyé mon dernier correctif en novembre. Complètement frustré par cette expérience, j’ai décidé que je ne voulais plus jamais avoir à faire avec la communauté Wine.

Ma frustration perdura jusqu’à ce que des personnes qui utilisaient réellement mon code commencent à me poser des questions sur celui-ci en février 2006. Mon code était vraiment utile ! Ils voulaient également davantage de fonctionnalités. Quand Google annonça qu’il reconduirait le GSoC en 2006, mes projets pour l’été étaient clairs. Maintenant que Wine avait basculé de diff à git en décembre 2005, je savais que je ne serais pas ennuyé par des gels de fonctionnalités, puisque je pouvais finalement créer tous mes petits correctifs localement. La vie était belle.

Ce n’est que lorsque je suis tombé sur une interface de git (appelée porcelaine dans le langage git) qui émulait le comportement de Quilt que j’ai appris qu’il y avait des outils qui auraient pu rendre ma vie plus facile, même en 2005.

Comment NE PAS tout foirer

Maintenant que je vous ai raconté comment j’ai réussi à me planter avec l’envoi de correctifs, permettez-moi de poursuivre avec quelques conseils pour éviter les pièges.

Règles pour la soumission de correctifs

Mon premier conseil est de lire attentivement toutes les directives de soumission de correctifs que peut avoir le projet auquel vous voulez contribuer. Celles-ci, ainsi que les normes de style de codage, doivent être consultées avant même de commencer à coder.

Des diffs unifiés

Même si ce n’est pas explicitement indiqué dans les directives de soumission des correctifs, vous devez vraiment, vraiment envoyer le résultat d’un diff unifié. Je n’ai encore rencontré aucun projet qui préfère la sortie non unifiée du diff. Les diffs unifiés rendent la révision du correctif beaucoup plus facile. Ce n’est pas par hasard que les programmes de gestion de version modernes utilisent automatiquement ce format dans leurs commandes diff par défaut.

Utilisez un contrôle de version distribué

En ce qui concerne la gestion de versions moderne, vous devriez vraiment utiliser un système de gestion de versions distribué (DVCS) pour travailler localement sur le code. Git et Mercurial sont les choix les plus populaires de nos jours, quoique Bazaar puisse aussi très bien faire l’affaire. Même si le projet auquel vous voulez contribuer utilise toujours un système de gestion de version centralisé, être en mesure d’envoyer vos changements de manière itérative est une très bonne chose. Tous les outils de gestion de versions distribués mentionnés ci-dessus devraient être capables d’importer des changements depuis un SVN ou un CVS. Vous pourrez y aller et apprendre doucement Quilt mais, sérieusement, le futur passe par les systèmes de gestion de versions distribués.

De petits correctifs, pour faire une chose à la fois

Quand je dois examiner des correctifs, les plus ennuyeux à traiter sont ceux qui sont trop gros ou qui tentent de faire de nombreuses choses en même temps. Les correctifs qui ne font qu’une chose à la fois sont plus faciles à traiter. Au final, ils vous faciliteront la vie quand vous devrez déboguer les erreurs qu’auront manquées à la fois l’auteur et le vérificateur.

Suivez votre correctif

Après avoir proposé votre correctif, gardez un œil sur les canaux de communication du projet et sur votre correctif. Si vous n’avez eu aucun retour au bout d’une semaine, vous devriez poliment en demander un. En fonction de la façon dont le projet gère les propositions de correctif, celui-ci pourrait être noyé dans le bruit. N’espérez pas voir votre correctif retenu du premier coup. Il faut, en général, quelques essais pour s’habituer au style d’un nouveau projet. En tant que contributeur néophyte, personne ne vous en voudra pour ça, à condition d’avoir presque tout bon. Assurez-vous seulement de corriger ce que les développeurs vous ont indiqué et envoyez une seconde version du correctif.

Conclusion

Écrire de bons correctifs n’est pas difficile. Il y a deux ou trois choses à prendre en considération. Mais après en avoir écrit quelques-uns vous devriez être au point sur celles-ci. Un système moderne de contrôle de version (distribué) et le workflow (Ndt : flux de production) qui en résulte gèreront de fait la plupart des choses que j’ai mentionnées. Si vous n’avez qu’une chose à retenir, c’est ceci :

  • Utilisez un système de contrôle de version distribué pour gérer vos correctifs.
  • Écrivez vos correctifs en petites étapes indépendantes.
  • Suivez les normes de codage en vigueur.
  • Répondez rapidement aux commentaires sur vos correctifs.

Les quelques lignes directrices ci-dessus devraient vous aider à bien faire la plupart des choses, sinon toutes, quand vous soumettrez vos premiers correctifs. Bon codage.

(1) Un diff (abréviation de différence) est un fichier qui affiche le résultat d’une comparaison entre deux éléments (en général, des lignes de code). Pour en savoir plus : http://fr.wikipedia.org/wiki/Diff

(2) Review : révision minutieuse http://fr.wiktionary.org/wiki/review




Manifeste de la guérilla pour le libre accès, par Aaron Swartz #pdftribute

Il se passe quelque chose d’assez extraordinaire actuellement sur Internet suite à la tragique disparition d’Aaron Swartz : des centaines de professeurs et scientifiques du monde entier ont décidé de publier spontanément leurs travaux en Libre Accès !

Il faut dire que sa mort devient chaque jour plus controversée, les pressions judiciaires dont il était l’objet n’étant peut-être pas étrangères à son geste. Comme on peut le lire dans Wikipédia : « En juillet 2011, le militant américain pour la liberté de l’Internet Aaron Swartz fut inculpé pour avoir téléchargé et mis à disposition gratuitement un grand nombre d’articles depuis JSTOR. Il se suicide le 11 janvier 2013. En cas de condamnation, il encourait une peine d’emprisonnement pouvant atteindre 35 ans et une amende s’élevant jusqu’à 1 million de dollars. »

On peut suivre l’évolution du mouvement derrière le hashtag #pdftribute (pdf hommage) qui a déjà son site et son compte Twitter dédiés.

Dans la foulée nous avons décidé de traduire ensemble un autre article important d’Aaron Swartz (rédigé à 21 ans), en lien direct avec la motivation de tous ceux qui lui rendent ainsi un vibrant, concret et utile hommage : Guerilla Open Access Manifesto.

Ce manifeste s’achève sur cette interrogation : « Serez-vous des nôtres ? »

Remarque : L’émouvante photo ci-dessous représente Aaron Swartz a 14 ans en compagnie de Larry Lessig. On remarquera son bien joli tee-shirt 😉

Rich Gibson - CC by

Manifeste de la guérilla pour le libre accès

Guerilla Open Access Manifesto

Aaron Swartz – juillet 2008 – Internet Archive
(Traduction : Gatitac, albahtaar, Wikinade, M0tty, aKa, Jean-Fred, Goofy, Léna, greygjhart + anonymous)

L’information, c’est le pouvoir. Mais comme pour tout pouvoir, il y a ceux qui veulent le garder pour eux. Le patrimoine culturel et scientifique mondial, publié depuis plusieurs siècles dans les livres et les revues, est de plus en plus souvent numérisé puis verrouillé par une poignée d’entreprises privées. Vous voulez lire les articles présentant les plus célèbres résultats scientifiques ? Il vous faudra payer de grosses sommes à des éditeurs comme Reed Elsevier.

Et il y a ceux qui luttent pour que cela change. Le mouvement pour le libre accès s’est vaillamment battu pour s’assurer que les scientifiques ne mettent pas toutes leurs publications sous copyright et s’assurer plutôt que leurs travaux seront publiés sur Internet sous des conditions qui en permettent l’accès à tous. Mais, même dans le scénario le plus optimiste, la politique de libre accès ne concerne que les publications futures. Tout ce qui a été fait jusqu’à présent est perdu.

C’est trop cher payé. Contraindre les universitaires à débourser de l’argent pour lire le travail de leurs collègues ? Numériser des bibliothèques entières mais ne permettre qu’aux gens de chez Google de les lire ? Fournir des articles scientifiques aux chercheurs des plus grandes universités des pays riches, mais pas aux enfants des pays du Sud ? C’est scandaleux et inacceptable.

Nombreux sont ceux qui disent : « Je suis d’accord mais que peut-on y faire ? Les entreprises possèdent les droits de reproduction de ces documents, elles gagnent énormément d’argent en faisant payer l’accès, et c’est parfaitement légal, il n’y a rien que l’on puisse faire pour les en empêcher. » Mais si, on peut faire quelque chose, ce qu’on est déjà en train de faire : riposter.

Vous qui avez accès à ces ressources, étudiants, bibliothécaires, scientifiques, on vous a donné un privilège. Vous pouvez vous nourrir au banquet de la connaissance pendant que le reste du monde en est exclu. Mais vous n’êtes pas obligés — moralement, vous n’en avez même pas le droit — de conserver ce privilège pour vous seuls. Il est de votre devoir de le partager avec le monde. Et c’est ce que vous avez fait : en échangeant vos mots de passe avec vos collègues, en remplissant des formulaires de téléchargement pour vos amis.


Pendant ce temps, ceux qui ont été écartés de ce festin n’attendent pas sans rien faire. Vous vous êtes faufilés dans les brèches et avez escaladé les barrières, libérant l’information verrouillée par les éditeurs pour la partager avec vos amis.

Mais toutes ces actions se déroulent dans l’ombre, de façon souterraine. On les qualifie de « vol » ou bien de « piratage », comme si partager une abondance de connaissances était moralement équivalent à l’abordage d’un vaisseau et au meurtre de son équipage. Mais le partage n’est pas immoral, c’est un impératif moral. Seuls ceux qu’aveugle la cupidité refusent une copie à leurs amis.


Les grandes multinationales, bien sûr, sont aveuglées par la cupidité. Les lois qui les gouvernent l’exigent, leurs actionnaires se révolteraient à la moindre occasion. Et les politiciens qu’elles ont achetés les soutiennent en votant des lois qui leur donnent le pouvoir exclusif de décider qui est en droit de faire des copies.

La justice ne consiste pas à se soumettre à des lois injustes. Il est temps de sortir de l’ombre et, dans la grande tradition de la désobéissance civile, d’affirmer notre opposition à la confiscation criminelle de la culture publique.

Nous avons besoin de récolter l’information où qu’elle soit stockée, d’en faire des copies et de la partager avec le monde. Nous devons nous emparer du domaine public et l’ajouter aux archives. Nous devons acheter des bases de données secrètes et les mettre sur le Web. Nous devons télécharger des revues scientifiques et les poster sur des réseaux de partage de fichiers. Nous devons mener le combat de la guérilla pour le libre accès.

Lorsque nous serons assez nombreux de par le monde, nous n’enverrons pas seulement un puissant message d’opposition à la privatisation de la connaissance : nous ferons en sorte que cette privatisation appartienne au passé. Serez-vous des nôtres ?

Aaron Swartz

Crédit photo : Rich Gibson (Creative Commons By)




D’un projet à l’autre, franchissez les frontières (Libres conseils 11/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : ga3lig, lenod, peupleLa, LAuX, billouche, Goofy, jcr83, purplepsycho, Jej, KoS, Julius22, kalupa, tuki, lamessen, okram + Sinma

La collaboration entre projets

Henri Bergius

Henri Bergius est le fondateur de Midgard(1), un dépôt de contenu pour les logiciels libres. Il a aussi été longtemps impliqué dans la géolocalisation d’ordinateurs de bureaux sous Linux ainsi que dans les communautés Maemo et Meego. Il dirige un petit cabinet de conseil nommé Nemein, bidouille CoffeeScript et PHP et passe beaucoup de son temps à faire de la moto dans des régions reculées du continent Eurasien. Il vit dans la froide ville nordique d’Helsinki, en Finlande.

Il se peut qu’il existe un système complètement nouveau dans lequel vous pouvez être défini davantage par qui vous êtes plutôt que par ce que vous possédez, par ce que vous avez créé et partagé, parce que d’autres personnes ont ensuite construit sur cette base

– John Seely Brown, ancien directeur de Xerox PARC dans An Optimist’s Tour of the Future (Mark Stevenson, 2010)

Le monde du logiciel libre est pour l’essentiel divisé en tribus rassemblées autour de choses appelées projets. Il existe des projets majeurs tels que GNOME(2), KDE(3) ou Drupal(4) et il existe bien d’autres projets plus modestes tournant autour d’une seule application ou bibliothèque logicielle.

En fait, les qualifier de « projets » est un peu ridicule.

Selon moi, un projet est l’organisation d’un effort visant un but que l’on puisse atteindre et comprend un calendrier avec dates de début et de fin. Ainsi, GNOME 3.1 serait par exemple un projet tandis que GNOME, pris dans son ensemble, n’en est pas un. Il s’agit d’une communauté d’individus qui entretiennent et créent le corps d’un logiciel par de petits efforts variés ou des projets.

Assez de pédantisme. Le souci avec le concept de projet c’est qu’il finit par maintenir une séparation entre les personnes. Cela crée des communautés isolées souvent réticentes voire incapables de collaborer avec « la concurrence ». Mais en fin de compte, toutes ces communautés sont composées de personnes écrivant des logiciels libres. Et ce sont elles qui décident de l’utilisation possible ou non d’un logiciel dans différents environnements.

En fin de compte, nous voulons tous que le logiciel que nous avons créé soit utilisé par d’autres. Mieux encore : nous voulons que les autres joignent leurs efforts aux nôtres et créent des choses sympa à partir de ce que nous avons créé. Après tout, ceci constitue le cœur même des logiciels libres.

Alors pourquoi érigeons-nous ces murs autour de nous ? Garder une communauté isolée ne fait que favoriser une mentalité de type « nous contre eux ». Les incompatibilités des différents langages de programmation contribuent déjà fortement à notre division. Pourquoi en rajouter ?

La leçon de Midgard

Il est une chose que j’aurais voulu savoir quand j’ai démarré, dans cette période optimiste des « .com » de la fin des années 90 : c’est qu’en réalité le développement de logiciels ne gagne rien à s’isoler. Avec un peu d’efforts nous pouvons partager nos logiciels et nos idées par le biais de communautés, ce qui renforce et améliore à la fois les logiciels et les communautés.

Quand j’ai démarré ma carrière dans le logiciel libre, c’était l’époque des grands projets. Netscape ouvrait son code source, la fondation Apache prenait forme et des sociétés de capital-risque venaient de partout. Tenter de bâtir sa communauté devenait la norme. C’était le chemin assuré vers la gloire, la fortune et la réalisation de choses extraordinaires.

Alors nous avons construit nos propres infrastructures web. À ce moment-là il n’y en avait pas tant que cela, en particulier pour le tout jeune langage PHP. Le PHP n’était même pas notre premier choix. Nous l’avions seulement choisi au terme d’un long débat sur l’utilisation de Scheme(5) que notre développeur principal préférait. Mais le PHP gagnait alors en popularité, devenant le langage de programmation de la Toile. Et nous voulions construire la Toile.

Au début, les choses semblaient prometteuses. Beaucoup de développeurs rejoignaient notre communauté et commençaient à y contribuer. Il y a même eu des entreprises fondées autour de Midgard. Notre infrastructure gagnait en fonctionnalités et devenait de plus en plus liée à Midgard.

Avec le recul, c’est là que nous avons fait une erreur. Nous avons positionné Midgard pour être distinct du PHP lui-même. Quelque chose que vous installeriez séparément, et utiliseriez comme base pour y construire des sites entiers. Il fallait soit suivre notre voie, soit suivre celle de tout le monde.

Avec Midgard, vous deviez utiliser notre interface de dépôt de contenus pour tout, aussi bien pour notre gestion des utilisateurs que pour le modèle de permissions. Vous deviez utiliser notre système de modèles et stocker beaucoup de votre code dans le dépôt au lieu d’utiliser un système de fichiers.

Ceci ne passait évidemment pas très bien auprès de l’ensemble de la communauté PHP. Nos idées leur semblaient étranges, et Midgard, à ce moment-là, était même distribué en tant que gigantesque correctif à la base de code puisqu’on ne pouvait pas charger de modules avec PHP3.

Les années ont passé et la popularité de PHP a connu des hauts et des bas. Pendant ce temps, la communauté Midgard est restée relativement constante : un petit groupe soudé faisant des progrès sur le long terme mais séparé du monde plus large de PHP.

Nous nous sommes toujours demandé pourquoi il était si difficile d’interagir avec le monde PHP. Même d’autres communautés faisant des choses complètement différentes, comme l’environnement de bureau GNOME, semblaient plus faciles à approcher. Ce n’est que récemment, après des années d’isolement, que nous avons pris conscience du problème. En résumé : les infrastructures nous séparent alors que les bibliothèques nous permettent de partager notre code et nos expériences.

À propos des bibliothèques et des infrastructures

En définitive, les logiciels ont pour objectif l’automatisation, la construction d’outils que les autres peuvent utiliser pour résoudre des problèmes ou se connecter entre eux. Avec les logiciels, ces outils comportent plusieurs couches. Il existe des services de bas niveau comme les systèmes d’exploitation, puis les bibliothèques, les infrastructures, les boîtes à outils et enfin les applications elles-mêmes.

Les applications sont toujours écrites pour des usages spécifiques, donc entre elles il existe peu de possibilités de partage de code.

Les possibilités les plus séduisantes se situent au niveau des bibliothèques et infrastructures. Une infrastructure, si elle est suffisamment générique, peut généralement être utilisée pour construire différentes sortes de logiciels. Une bibliothèque, quant à elle, peut être utilisée pour apporter un élément particulier de logique ou de connectivité là où le besoin s’en fait sentir. De mon point de vue, c’est dans cette couche que le plus gros de la programmation devrait être fait, avec des applications spécifiques qui ne sont que des connexions entre diverses bibliothèques au sein d’une infrastructure qui s’occupe alors de faire tourner l’application en question.

Qu’est-ce qu’une bibliothèque et qu’est-ce qu’une infrastructure ? Les gens utilisent souvent ces termes indifféremment bien qu’il existe une règle grossière qui permet de les différencier : une bibliothèque est une ressource à laquelle votre code fait appel, alors qu’une infrastructure est une ressource qui fait appel à votre code.

Si vous voulez que votre code soit utilisé et amélioré, le meilleur moyen est de maximiser le nombre de ses utilisateurs et contributeurs potentiels. Avec le logiciel libre, cela fonctionne en s’assurant que votre code peut être adapté à de multiples situations et environnements.

En définitive, ce que vous voulez développer c’est une bibliothèque. Les bibliothèques c’est cool.

Comment faire en sorte que la collaboration fonctionne

Le plus difficile est de franchir la barrière du « eux-contre-nous ». Les développeurs de l’autre communauté sont des bidouilleurs concevant du logiciel libre, tout comme vous. Il suffit donc de franchir le pas et de commencer à leur parler.

Une fois le débat engagé, voici quelques points que j’ai trouvés importants quant à l’application effective des idées communes ou des bibliothèques au-delà des frontières du projet

  • Utilisez des licences permissives et essayez d’éviter les cessions de droits d’auteurs et autres exigences que les utilisateurs potentiels trouveraient onéreuses. Hébergez le projet en terrain neutre. Pour les projets web, Apache est un assez bon havre. Pour les projets bureautiques, Freedesktop est probablement le meilleur choix. Utilisez des technologies qui n’imposent pas trop de contraintes. Les bibliothèques doivent être de bas niveau, ou fournir des API (interfaces de programmation) D-Bus utilisables avec n’importe quel système.
  • Évitez les dépendances spécifiques à une infrastructure. KDE a, par exemple, trouvé GeoClue difficile à adopter parce qu’il utilise des paramètres spécifiques à l’interface GNOME. Rencontrez les autres. Si vous venez du projet GNOME, allez à l’aKademy et donnez-y une conférence. Si vous êtes développeur KDE, allez parler au GUADEC. Après avoir partagé une bière ou deux, la collaboration par IRC vient beaucoup plus naturellement.
  • Enfin, vous devez accepter que votre implémentation ne soit pas utilisée par tout le monde. Mais si, au moins, d’autres mettent en œuvre les mêmes idées, alors une collaboration reste possible.

Bonne chance pour abattre les frontières du projet ! Dans la plupart des cas, cela fonctionne si vos idées sont bonnes et présentées avec un esprit ouvert. Mais même si vous ne trouvez pas de terrain d’entente, tant que votre application remplit sa fonction pour vous, ça n’a pas été fait en vain. Après tout, ce qui compte c’est de proposer des logiciels et d’offrir la meilleure expérience utilisateur possible.

(1) http://midgard-project.org/

(2) gnomefr.org

(3) fr.kde.org

(4) drupalfr.org

(5) http://fr.wikipedia.org/wiki/Scheme

Crédit photo : mommy peace – (CC BY-NC-SA 2.0)