L’article propose une définition claire et structurée des systèmes de build. Un système de build est un outil qui permet de définir et exécuter des transformations de données d’entrée en données de sortie, en mémorisant les résultats via un cache pour éviter de refaire des calculs inutiles. Ces transformations, appelées règles ou étapes, forment un graphe de dépendances. Un build est dit correct si les résultats incrémentaux sont identiques à ceux d’un build complet, et minimal si seules les étapes nécessaires sont réexécutées.
Les systèmes de build peuvent être inter-processus (exécution de commandes externes) ou intra-processus (appels de fonctions internes), avec des mécanismes de suivi des dépendances soit déclaratives (tout est spécifié à l’avance), soit dynamiques (dépendances inférées à l’exécution). Ils peuvent aussi être hermétiques (isolés des dépendances système) ou reproductibles (mêmes résultats dans n’importe quel environnement). L’article explore aussi des concepts comme le cache distant, la détection des rebuilds, et donne des exemples concrets (Make, Bazel, React, Docker, etc.), tout en soulignant les défis comme la gestion des dépendances dynamiques ou la traçabilité des entrées/sorties.
Une lecture utile pour comprendre les enjeux et les nuances des outils qui automatisent la compilation et la génération de projets logiciels.