Contributions à Mozilla-Firefox

De Ensiwiki
Aller à : navigation, rechercher

Cette page a pour but d'être améliorée d'années en années pour aider les étudiants voulant faire ce projet de spécialité ou les étudiants voulant simplement contribuer à Firefox. Si vous avez des choses à ajouter, n'hésitez pas !

Contexte

Ce projet de spécialité consiste à contribuer à Mozilla Firefox, le navigateur web libre et gratuit développé et distribué par la Mozilla Foundation avec l'aide de centaines de contributeurs. Il totalise plusieurs millions d’utilisateurs dans le monde et représente un projet très volumineux.

Contributions

Contributions 2012

Nous nous sommes fixés pour objectif la correction de deux bugs. Un sur le moteur de rendu Gecko et un qui permet d'étendre une fonctionnalité utilisateur sur la version mobile de Firefox. En fin de projet, nous avons soumis deux patchs pour revue (après plusieurs revues préliminaires) qui proposent une implémentation fonctionnelle pour ces correctifs.

Groupe: Zoé Bellot, Alexandre Dumont, Grégoire Laillet de Montullé et Charly Molter

Ajout de l'attribut inputmode

Bug 746142 - Add @inputmode to input element

Ce bug consiste en l'ajout d'un attribut aux balises HTML <input>. Cet attribut a pour but de fournir des claviers alternatifs (numérique, tout majuscule...) sur Android.

recommendation W3C du inputmode

Restructuration de Gecko

Bug 716875 - nsTextControlFrame shouldn't inherit from nsStackFrame

Gecko - le moteur de rendu de Firefox - a pour but d'interpréter le code HTML/CSS pour le transformer en frames pour le rendu graphique. Il existe plusieurs type de frames. Le travail que nous avions à faire consistait à changer un héritage qui posait problème et causait d'autres bugs qui gênent l'affichage des zones de textes dans certains cas particuliers. La classe que nous avions à changer est responsable de l'affichage et du placement des balises HTML <input> et <textarea>.

Rapport et slides de présentation

Slides de la soutenance sheme : Media:Soutenance_sheme.pdf

Rapport : Media:Rapport_Firefox_2012.pdf

Contributions 2013

A venir... Pour ceux qui viendront après nous. :)

Communauté Mozilla

Nous sommes entrés en contact avec la communauté Firefox par l’intermédiaire de Mounir Lamouri, employé de Mozilla Corporation depuis 2 ans. Il a été notre mentor pendant les quatre semaines, en suivant de près l’évolution du projet. C’est avec lui que nous avons défini les objectifs que nous nous sommes fixés, il a été notre interlocuteur privilégié pour répondre à nos questions et il s’est chargé de relire le code que nous avons proposé à la communauté pour nous faire des remarques. Nous avons eu l’occasion de le rencontrer dans les locaux de Mozilla à Paris lors d’un rassemblement de la communauté francophone.

Soumission de patchs

Une contribution à Mozilla s’effectue sous forme de soumission d’un patch. Une fois le code modifié et testé, le patch est proposé sur la page du bug correspondant. Ensuite, un système de review se met en place. Des personnes habilitées - souvent une ou deux - relisent le code proposé et font des remarques en retour. Le contributeur peut alors modifier son patch pour en proposer un nouveau, et ainsi de suite jusqu’à ce que la communauté accepte les modifications. Une revue de code peut prendre entre 2 jours et 6 mois, c’est pourquoi Mounir Lamouri nous a aidé à faire accélérer les choses, soit en relisant lui-même soit en demandant à d’autres de le faire.

Les reviewers ne sont pas là pour modifier et améliorer le code soumis de façon à le rendre acceptable. L’esprit est vraiment de laisser le contributeur travailler jusqu’au bout, et s’il ne corrige pas son code en fonction des remarques, le travail sera perdu jusqu’à ce que quelqu’un d’autre s’y intéresse.

Communication

La communication est un atout clé dans le développement du logiciel libre. La communauté échange ainsi via IRC (cf. la page IRC du wiki mozilla pour des explications). Pendant quatre semaines, nous avons eu l’occasion de discuter avec des contributeurs d’origines très différentes, mais aussi avec des employés influents de Mozilla dont les conseils sont toujours pertinents et adaptés. Il y a toujours quelqu’un pour répondre à une question sur les différentes chaînes thématiques : introduction, mobile, francophone, développeurs...

Les channels IRC qui nous ont été très utiles sont #developers, #introduction et #frenchmoz (canal de la communauté française). La communication via IRC constitue le moyen d'échance le plus utilisé à la fois par les contributeurs (novices ou expérimentés) et par les employés Mozilla. Une autre partie de la communication se fait par mailing-lists toutefois les discussions sont le plus souvent sous forme de débats sur des nouvelles fonctionnalités plutôt que des explications. Le dernier vecteur d'échange de la communauté est Bugzilla, puisque chez Mozilla tout passe par des bugs (y compris la demande de droit d'accès au serveur de tests).

Aides pour les étudiants à venir

Débuter avec Firefox

Guide pour les développeurs

explication pour le clone et la première compilation

liste de bugs "faciles" pour débuter

Mercurial

Mercurial est un gestionnaire de version, mais attention ce n'est pas Git, avant de vous lancer dans Mercurial lisez la documentation ! Voilà quelques bonnes pistes :

Notes sur les Queues : On peut partager une queue entre plusieurs personnes mais attention la résolution de conflits n'est pas évidente (puisqu'un patch n'est qu'un fichier de diff) par conséquent je vous conseille d'être vigilant lors de vos push.

Compilation de Firefox sur Android

La compilation de la version de Firefox sur Android (nom de code Fennec) n'est pas immédiate. Pour commencer, il faut installer tous les outils utiles au développement d'applications Android :

Installation de l'environnement de travail pour Android

Pensez bien à vérifier les System Requirements, et attention pour l'installation du JDK, lorsque nous avons fait notre projet, la dernière version n'était pas supportée : télécharger la version 6 du JDK.

Les étapes à suivre pour installer l'environnement de développement sont aussi détaillées sur la page su Wiki de Mozilla :

Page wiki de Mozilla sur Fennec

Nous n'avons pas mis en place d'environnement sous Eclipse, cela semblait bien compliqué. Pour compiler et installer Firefox Android, voici les étapes à effectuer :

  • Changer (ou créer) le fichier mozconfig à la racine du projet. Un bon exemple de mozconfig pour Android se trouve dans le fichier mobile/android/config/moconfigs/android/debug.
  • Compiler le projet à la racine : make -f client.mk. On peut rajouter l'option -jX pour compiler plus rapidement (X nombre de coeur à votre disposition).
  • Fabriquer le .apk : make -C $OBJ_DIR package
  • Installer l'application : abd install -r $OBJ_DIR/dist/fennec*.apk (l'option -r permet de d'abord désinstaller Firefox s'il est installé). Cette commande installe l'application sur le périphérique USB (qui doit être mis en mode 'debug'). Si vous utilisez un émulateur, vous pouvez le préciser avec l'option -s nom_de_l'émulateur. Tout ceci est bien détailler sur le site des développeurs Android.

Comprendre le layout

Gecko le moteur de rendu de Mozilla est très complexe et rentrer dedans est souvent déconcertant. C'est pourquoi nous vous donnons des pistes de recherches et surtout une série de liens qui nous ont aidé. N'hésitez pas à consulter notre rapport de projet (contribution 2012) ainsi que les diapos de notre soutenance disponibles sur cette page du wiki. Ces documents contiennent un certain nombre d'informations - à jour ! - concernant le layout, son fonctionnement et son implémentation.

Compiler la partie layout de Firefox

Pour ne pas avoir à tout recompiler à chaque fois, voici la commande pour le layout:

make -C obj-*/layout -j2 && make -C obj-*/layout/build -j2 && make -C obj-*/toolkit/library -j2

Remarque : l'option -jN permet d'activer N coeurs pour la compilation avec gmake (plus rapide).

Liens intéressants

Enfin sur l'IRC, pour la partie layout, roc et bz sont super sympas et ont de très bons conseils à donner, sinon eshan ou dbaron.

Le code

Le meilleur moyen de réellement comprendre le layout c'est aussi se plonger dans le code donc voilà les fichiers importants:

  • nsIFrame : toutes les frames héritent de cette classe la lire est donc indispensable.
  • nsFrame : l'implémentation d'un bon nombre de fonctions utilisées dans les frames.

Après il faut être curieux et regarder les classes concrètes : nsHTMLButtonControlFrame et nsProgressFrame nous ont aidé à comprendre l'implémentation de certaines méthodes et la façon dont elles sont invoquées par Gecko lors du rendu.

Utiliser les serveurs de tests

Les serveurs de tests permettent de lancer les tests sur un grand nombre de plateformes pour valider votre code. Le fonctionnement demande de passer par une étape intermédiaire. Si vous n'avez pas envie de devenir commiter il est aussi facile de trouver quelqu'un pour lancer votre patch sur les serveurs à votre place.

  1. Vous devez d'abord avoir un compte Mozilla hg de niveau 1 au moins. Comment devenir commiter
  2. Ensuite tout est expliqué ici

Outils utiles

  • MXR : Permet de naviguer facilement dans la base de code de Firefox. MXR
  • Tests automatisés : Il existe de nombreux types de tests automatisés. tests automatisé de Mozilla
  • Mercurial : Logiciel de gestion de versions décentralisés utilisé par la communauté Firefox. Installer Mercurial Les bases de Mercurial
  • Bugzilla : Plateforme de report de bugs. Bugzilla
  • Ccache : un cache de compilation (augmente grandement la vitesse de compilation). Ccache