Bibliothèque / SDK
facebook/buck2 avatar
facebook/buck2

Buck2 : un système de build rapide, hermétique et multilingue

Système de construction, successeur de Buck. Mais que signifient réellement ces mots pour un système de build – et pourquoi pourraient-ils vous intéresser ?

4 425 étoiles395 forksRustApache-2.0

En bref

De quoi s’agit-il ?
Le système de build de Meta vise les grands dépôts et les dépendances entre langages, avec une herméticité liée à l’exécution distante.
À qui s’adresse-t-il ?
Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour buck2. Il convient moins à celles qui attendent un support ou une compatibilité absents du README.
Puis-je l’utiliser commercialement ?
Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement Rust, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

La filiation de Buck2 et l'avertissement qui l'accompagne

Le README commence par décrire Buck2 comme un système de build rapide, hermétique et multilingue, et comme un successeur direct du système de build Buck original, tous deux conçus par Meta. Le même début contient un avertissement visible : Buck2 n'a actuellement pas de tag de version stable. Les tags de pré-version et de version stable viendront plus tard. Malgré cela, le README affirme que Buck2 est utilisé quotidiennement chez Meta sur une grande quantité de code, et que le répertoire buck2-prelude est le même code que celui utilisé en interne. Il reconnaît également que Meta conserve une grande quantité de code Starlark construit au-dessus du prelude, mais non publié. Pour les utilisateurs externes, le README dit qu'ils rencontreront beaucoup de bords rugueux, des fonctionnalités manquantes ou en cours, des toolchains de Buck1 absentes, et qu'ils devront probablement ajuster plus que nécessaire. Le projet se décrit comme éprouvé en pratique, mais ce n'est pas une version stable.

Performance et herméticité : ce qui est réellement affirmé

Sur la performance, le README affirme que Buck2 est jusqu'à 2 fois plus rapide que Buck1 en pratique, mais la note de bas de page explique que ce chiffre provient de l'utilisation interne de Buck1 et Buck2 chez Meta et qu'aucune comparaison appropriée avec des systèmes comme Bazel n'a encore été effectuée. Le lecteur est invité à faire ses propres benchmarks. Sur l'herméticité, l'affirmation est conditionnelle : Buck2 devient hermétique lorsqu'on utilise l'exécution à distance, car une règle de build doit correctement déclarer toutes ses entrées ; si ce n'est pas le cas (par exemple, un fichier .c a besoin d'un fichier .h non spécifié), le build échoue. La même note précise que les étapes locales ne sont pas sandboxées actuellement. L'herméticité n'est donc pas universelle ; elle s'applique à l'exécution à distance, et le README espère lever cette restriction à l'avenir, idéalement à court terme, pour que les builds locaux soient aussi hermétiques.

Support multilingue et backends définis par l'utilisateur

Buck2 est conçu dès le départ pour plusieurs langages avec des abstractions d'interopérabilité. Le README donne un exemple concret : une bibliothèque Python peut dépendre d'une bibliothèque OCaml, et cette bibliothèque OCaml peut dépendre d'une crate Rust, avec un seul outil de build offrant une UX cohérente pour compiler, tester et intégrer ces composants. Le noyau exécutable est indépendant du langage, et le README dit que même le support C/C++ est écrit comme une bibliothèque. Les utilisateurs peuvent implémenter le support d'un langage car le système est entièrement scriptable. Cette flexibilité est présentée comme une raison de choisir Buck2 plutôt que d'assembler dune, pip et cargo avec make. Le README mentionne aussi que les suites de tests, la couverture de code et les requêtes de bases de données de code peuvent être traitées par un outil unifié.

BXL, virtualisation du système de fichiers et exécution à distance

Le README énumère plusieurs critères de conception qui distinguent Buck2 des autres systèmes. Le Buck Extension Language (BXL) permet l'introspection du système de build, laissant les outils d'automatisation inspecter et exécuter des actions dans le graphe de build. Selon le README, cela permet de supporter des fonctionnalités comme les LSP ou les bases de données de compilation. Il mentionne également le support de très grands dépôts via la virtualisation du système de fichiers et la surveillance des modifications. La compilation distribuée utilise la même API d'exécution à distance que Bazel, et des solutions existantes comme BuildBarn, BuildBuddy, EngFlow et NativeLink fonctionnent aujourd'hui. Ce sont des listes de fonctionnalités, mais le README ne fournit ni détails d'implémentation, ni benchmarks, ni garanties de stabilité.

Options d'installation et absence de version stable

Le README décrit trois façons d'obtenir Buck2 : télécharger une version bimensuelle, télécharger le dernier binaire compilé (le tag latest est mis à jour à chaque push), ou compiler depuis les sources. Il mentionne aussi l'utilisation de dotslash avec les versions bimensuelles pour déployer via un simple fichier texte et obtenir automatiquement la bonne plateforme. Le README ne contient aucun exemple de ligne de commande ; les instructions détaillées se trouvent sur le site de documentation. Comme il n'y a pas de version stable, le README recommande de suivre HEAD pour soumettre des rapports de bugs et détecter les régressions, et précise que Meta utilise toujours le dernier commit HEAD. Cela signifie que l'état actuel est destiné aux développeurs prêts à utiliser un logiciel instable, sans calendrier pour les utilisateurs ayant besoin d'une version stable.

Déclaration de licence et ce que disent les métadonnées du dépôt

Le README déclare que Buck2 est sous licence MIT et Apache-2.0, avec les termes exacts dans les fichiers LICENSE-MIT et LICENSE-APACHE. Les métadonnées du dépôt donnent un identifiant SPDX Apache-2.0, ce qui est cohérent avec la double licence mais ne confirme pas à lui seul l'existence du fichier MIT. L'extrait de licence fourni ne contient aucun texte de licence, donc je ne peux pas vérifier ce que ces fichiers accordent réellement. Le README ne mentionne pas non plus de garantie, de support, de garanties de sécurité ou d'engagements de maintenance. Les seules informations d'état sont l'avertissement sur les fonctionnalités manquantes et l'affirmation que le projet est éprouvé en interne chez Meta. Ce sont les limites de ce que la documentation propre de ce dépôt établit.

Tester buck2 dans son contexte

buck2 build //... et un essai avec exécution distante permettent de contrôler le graphe, les entrées déclarées et les limites des builds locaux. Cette séquence relie le comportement annoncé pour buck2 aux fichiers et sorties observables. Elle ne permet pas d’inférer une compatibilité ou une garantie que le README ne décrit pas. Notez aussi les dépendances, la version utilisée et les erreurs exactes rencontrées, car elles déterminent la charge d’intégration.

Conclusion éditoriale

Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour buck2. Il convient moins à celles qui attendent un support ou une compatibilité absents du README. Avant décision, buck2 build //... et un essai avec exécution distante permettent de contrôler le graphe, les entrées déclarées et les limites des builds locaux.

Sources officielles

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Notes de la communauté

Notes de la communauté