Metas Build-System Buck2 baut auf Rust und Open Source

Der Facebook-Mutterkonzern hat sein internes Build-System komplett neu in Rust geschrieben und stellt Buck2 ab sofort quelloffen auf GitHub zur Verfügung.

In Pocket speichern vorlesen Druckansicht 7 Kommentare lesen

(Bild: donatas1205 / Shutterstock.com)

Lesezeit: 3 Min.

Auf das von Meta bisher nur intern zur automatisierten Softwareerstellung genutzte Build-System Buck folgt das vollständig neu entwickelte Buck2. Laut Ankündigung des Facebook-Mutterkonzerns ist es in der Programmiersprache Rust geschrieben und soll deutlich schneller als Buck1 arbeiten – und es steht nun als Open Source auf GitHub frei zur Verfügung.

Erklärtes Ziel der Neuentwicklung war es, das Build-Werkzeug flexibler, leistungsstärker und zuverlässiger zu machen. Dabei habe Meta einerseits die bewährten Konzepte und Prozesse von Buck beibehalten, das neue Build-Tool aber auch für mehr Effizienz und neue Funktionen rüsten wollen. Im Unterschied zu dem mit dem weitverbreiteten Build-Werkzeug Bazel vergleichbaren Buck1 baut Buck2 nun auf einem Kern auf, der keinerlei programmiersprachenspezifische Regeln kennt. Die in Starlark geschriebenen Sprachregeln seien vollständig vom in Rust programmierten Buck-Kern separiert, sodass sie einfacher zu verstehen und zu ändern seien, erläutert das Unternehmen.

Um die Regeln separieren zu können, musste das Meta-Entwicklungsteam die betreffenden Funktionen als generisch wiederverwendbare APIs abstrahieren. Diese wiederum eröffnen neue Möglichkeiten im Umgang mit verschiedenen Pattern, wie beispielsweise dem Linking-Modell von C++. Die in Buck2 eingeführten Transitive Sets (tsets) erlauben ein speicher- als auch rechenzeitsparenderes Vorgehen beim Erstellen einer C++-Bibliothek als es in Buck1 möglich war.

Anders als Buck1 baut das neue System auch nur noch auf einem einzigen inkrementellen Dependency-Graph auf. Damit will das Meta-Entwicklungsteam sein Build-System gezielter auf mehr Parallelisierung ausrichten – darüber hinaus sollen redundante Arbeitsschritte vermieden und typische von Buck1 respektive Bazel bekannte Fehler ausgemerzt werden. Zu höherer Leistung soll auch die neu konzipierte Rules-API beitragen. Sie liefert unter anderem dynamische sowie monadische Abhängigkeitsfunktionen.

Buck2 ist bereits auf komplexere Einsatzszenarien wie Remote Execution oder den Zugriff auf virtuelle Dateisysteme vorbereitet. In Tests mit Buildbarn und EngFlow habe das Meta-Team rekursive Prüfsummen effizient berechnen und zum Ausführen an eine entfernte Maschine senden können. Für Anwendungsfälle, in denen nicht das gesamte Repository ausgecheckt ist, sondern erst beim Zugriff auf Dateien abgerufen wird, unterstützt Buck2 insbesondere Sapling-basierte Dateisysteme wie EdenFS. Der Einsatz solcher virtuellen Dateisysteme könne insbesondere in Verbindung mit großen Monorepos zu schnelleren Checkouts bei gleichzeitig geringerem Festplattenspeicherbedarf beitragen.

Weitergehende Informationen zum neuen Build-Tool enthält der Blogbeitrag von Facebook Engineering. Wer sich Buck2 näher anschauen möchte, findet Starthilfe in der Dokumentation.

(map)