Analyse and explore articles

Configuration et Compilation de logiciels: Étude Comparative d'Android, Linux, Chromium, Firefox, Thunderbird, LibreOffice et VLC

Introduction

L'objectif de cet article est de comparer les outils de construction de logiciel utilisés par les applications open source présentées sur le site web de kezacode. Cet article sera enrichi avec le temps.

Les logiciels comparés sont les suivants :

Les étapes de construction sont similaires, bien que l'on observe que chaque application s'appuie sur des outils différents, voire spécifiques. On peut distinguer plusieurs étapes:

Cet article n'aborde pas l'étape de téléchargement de code, l'étape de test et l'infrastructure d'intégration continue plus généralement.

Configuration et auto-configuration

ApplicationConfigurationSpécifique ?
ChromiumGN Build configurationOui
FirefoxMozconfig ( + configure.py )Oui
ThunderbirdMozconfig ( + configure.py )Oui
LibreofficeGNU Autoconf ( + scripts M4)Non
VLCGNU Autoconf ( + scripts M4)Non
Linux KernelkconfigOui

Android utilise un script envsetup.sh puis l'outil lunch pour configurer l'appareil cible. Voir ici

Chromium s'appuie sur la configuration GN: GN Build configuration. On peut citer le fichier args.gn qui contient la configuration choisie par le développeur , ainsi que le fichier principal BUILDCONFIG.Gn (qui en appelle de nombreux autres) pour l'autoconfiguration.

Firefox et thunderbird utilisent Mozconfig, voir par exemple la configuration pour thunderbird. On peut noter un script de configuration initiale écrit en python (configure.py): il n'est pas appelé explicitement par le dévelopeur qui lance simplement le BUILD avec l'outil Mach. Mach supporte l'option configure: mach configure

LibreOffice utilise Autoconf (configure.ac), qui permet de générer un script shell de configuration (configure) qui permet lui même de générer un fichier makefile qui contient toute la configuration nécessaire à la compilation. Il est à noter qu'autoconf s'appuie sur le language de script GNU M4.

Videolan media player (VLC) utilise Autoconf lui aussi.

Linux s'appuie sur kconfig, le système permettant de configurer le kernel. Il permet aux développeurs d'activer / désactiver / paramétrer les fonctionnalités du noyau. Le résultat de l'étape de configuration permet d'influer sur le code C (activation ou désactivation de fonctionnalités via le préprocesseur) et sur la compilation Make (option prise en compte par makefile).

Meta-Construction, description de la construction logicielle

La plupart des projets utilisent un front-end de construction logiciel, ou outil de meta-construction logiciel. Ces outils permettent de simplifier et d'automatiser la construction de projets de grande envergure. Il facilitent l'abstraction par rapport à la plateforme cible, facilitent la gestion des dépendances, tout en offrant de bonnes performances (selon la solution). Il génèrent souvent des fichiers de construction plus bas niveau (par exemple Make, Ninja), eux même utilisés pour générer le logiciel final final.

Applicationdescription de la constructionSpécifique ?Compilation
AndroidGoogle SoongOuiNinja + Divers
Android (2)BazelNondivers
FirefoxMoz.buildOuiMake, Visual Studio...
ThunderbirdMoz.buildOuiMake, Visual Studio...
LibreofficeGBuild (Macros Make)OuiN/A (Make)
VLCGNU AutomakeNonMake
Linux KernelN/A-kbuild (Make)

Chromium utilise principalement Google GN (GN: Générer Ninja), qui génère des fichiers de construction Ninja (le back end de construction logicielle, un équivalent plus performant et plus simple que Make). Certains composants de Chromium utilisent aussi Bazel (voir plus bas).

Android utilise principalement le front-end de construction Soong, conçu pour Android. Il utilise les fichiers de construction Android.bp (blueprint). Soong et les règles de construction sont écrits avec le language Go (ou GoLang). Soong génère des fichiers Ninja, mais aussi Make, Visual Studio, etc.

Android devrait migrer progressivement de Soong vers Bazel. Bazel est aussi un système de construction open source développé par Google, utilisé par d'autres projets open source. Il supporte plus de languages que Soong et offre un système de cache permettant de réutiliser le résultat des compilations précédentes.

Firefox et Thunderbird utilisent un système de meta-construction spécifique aux besoins Mozilla, qui s'appuie sur les fichiers Moz.build (Front-end) et Python. Cela permet de générer les fichiers de construction back-end tels que GNU Make et Microsoft Visual Studio. Il est à noter que Thunderbird est bati à partir du code source de Firefox.

LibreOffice utilise GBuild, spécifiquement conçu pour les besoins d'OpenOffice ou LibreOffice. GBuild s'appuie directement sur Make via l'usage de macros avancées.

Videolan media player (VLC) utilise pour sa part Automake (fichiers makefile.am), une solution opensource de l'écosystème GNU, qui sert à simplifier et automatiser la création de Makefile. Automake est plus particulièrement conçu pour C et C++.

Linux utilise kbuild qui s'appuie sur make. Les makefile sont alimentés par la configuration générée par kconfig. Les fichiers .config définissent les options choisies. Un makefile en tiendra compte pour générer un module par exemple.

Compilation

Cette étape n'est pas détaillée, car plus classique.

Generated by PFA software prototype