Facebook introduit a récemment publié un nouveau système de construction appelé “Buck2”, qui note qu’il est axé sur la construction de projets à partir de référentiels très les grands qui incluent du code dans différentes langues la programmation.
Les différences entre la nouvelle implémentation et le système buck utilisé précédemment par Facebook utilisent le langage Rust au lieu de Java et une augmentation significative de l’efficacité et des performances du processus d’assemblage (dans les tests internes sur la même infrastructure, Buck2 effectue les tâches d’assemblage deux fois plus vite que Buck).
Les systèmes de construction se situent entre un développeur et son code en cours d’exécution, donc tout ce que nous pouvons faire pour rendre l’expérience plus rapide ou plus productive affecte directement l’efficacité d’un développeur. L’objectif de Buck2 était de conserver ce que nous aimions de Buck1 (les bases et les flux de travail), de s’inspirer des innovations post-Buck1 (y compris Bazel, Adapton et Shake) et de se concentrer sur la vitesse et de permettre de nouvelles expériences.
À propos de Buck2
Il est mis en évidence que le système n’est pas lié à la création de code dans des langages spécifiques et prêt à l’emploi, il prend en charge les projets de construction écrits en C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell et OCaml utilisés par Facebook.
Le langage Starlark, basé sur Python (comme dans Bazel), est utilisé pour concevoir des plugins, créer des scripts et des règles. Starlark vous permet d’étendre les capacités du système de construction et de faire abstraction des langages spécifiques utilisés dans les projets en cours de construction.
Il est mentionné que des performances élevées sont obtenues en mettant en cache les résultatsla parallélisation du travail et le support de l’exécution à distance des tâches (Remote Build Execution).
L’environnement de construction utilise le concept “d’herméticité”: le code compilé est détaché du monde extérieur, rien n’est chargé de l’extérieur pendant le processus de construction, et l’exécution répétée du travail sur différents systèmes conduit au même résultat (des constructions répétées, par exemple, le résultat de la compilation d’un projet sur le machine du développeur sera exactement la même que celle du build sur le serveur d’intégration continue). L’absence de situation de dépendance est perçue dans Buck2 comme un bogue.
Pour la partie du Principales caractéristiques de Buck2les éléments suivants se distinguent :
- Les règles de prise en charge des langages de programmation et du système de construction de base sont complètement distinctes. Les règles sont écrites dans le langage Starlark, et la boîte à outils et l’implémentation Starlark sont écrites en Rust.
- Le système de construction utilise un seul graphique de dépendance incrémentielle (pas de mise en scène), ce qui vous permet d’augmenter la profondeur de parallélisation du travail par rapport à Buck et Bazel et d’éviter de nombreux types de bogues.
- Le code de Buck2 publié sur GitHub et les règles de prise en charge du langage de programmation sont presque identiques à la version interne utilisée dans l’infrastructure de Facebook (les seules différences résident dans le lien vers les éditions du compilateur et les serveurs de build utilisés par Facebook).
- Le système de construction est conçu pour s’intégrer aux systèmes d’exécution de travaux à distance qui vous permettent d’exécuter des travaux sur des serveurs distants. L’API d’exécution à distance est compatible avec Bazel et a été testée pour sa compatibilité avec Buildbarn et EngFlow.
- L’intégration avec des systèmes de fichiers virtuels est fournie, dans laquelle le contenu de l’ensemble du référentiel est présenté, mais en fait, le travail est effectué avec la partie locale réelle d’une partie du référentiel (le développeur voit l’intégralité du référentiel, mais seulement ce est requis) les fichiers accédés sont extraits du référentiel). VFS basé sur EdenFS et Git LFS sont pris en charge, qui sont utilisés par Sapling.
Enfin, pour ceux qui souhaitent en savoir plus, sachez que le code est distribué sous la licence Apache 2.0 et qu’ils peuvent consulter les détails dans le lien suivant.