Voir le résumé
La compilation de logiciels au sein de systèmes hautement configurables est devenue une tâche toujours plus complexe et coûteuse en ressources, d’autant que les pratiques de développement modernes s’appuient fortement sur l’intégration continue (CI). La prolifération des options de configuration, des directives de compilation conditionnelle aux dépendances externes, fait qu’assurer la compilation correcte et efficace des différentes variantes d’un logiciel représente un défi majeur. Les recompilations complètes demeurent la norme, mais elles se révèlent souvent inefficaces lorsqu’elles sont répétées pour de nombreuses configurations. Cette thèse examine la faisabilité, les avantages et les limites de la compilation incrémentale des configurations logicielles, une stratégie qui réutilise les artefacts de compilations antérieures pour accélérer les suivantes. Au moyen d’études empiriques menées sur des systèmes réels (Linux, Busybox, Toybox, x264, xz, curl, sqlite, et plus…), ce travail montre que la compilation incrémentale peut réduire significativement les temps de compilation, avec des gains pouvant atteindre 66 %. Deux applications concrètes sont explorées : la réduction du coût global de la compilation d’ensembles fixes de configurations et l’accélération de l’exploration de grands espaces de configuration. Nous identifions toutefois plusieurs défis, notamment le risque de compilations incorrectes et la difficulté de garantir la reproductibilité lorsqu’on réutilise des artefacts. Pour y remédier, nous proposons des méthodes permettant de détecter et de corriger les configurations non reproductibles, ainsi que PyroBuildS, une nouvelle technique qui contrôle la diversité des configurations à l’aide de listes d’exclusion et d’opérateurs de variation. PyroBuildS offre des compilations incrémentales à la fois efficaces et reproductibles, réduisant les temps de compilation de 16 % à 22 % sur plusieurs systèmes configurables. Cette thèse est la toute première à étudier la compilation incrémental de configurations logicielles. Elle ouvre de nouvelles perspectives sur la manière de rendre les systèmes de build plus efficaces et plus fiables face à la variabilité des configurations, et elle trace des pistes prometteuses pour la recherche et les outils en génie logiciel.