Buck2, het nieuwe Facebook-bouwsysteem

Buck2-held

Buck2, het nieuwe open source build-systeem van Facebook

Facebook geïntroduceerd heeft onlangs een nieuw build-systeem uitgebracht met de naam "Buck2", waarin wordt opgemerkt dat dit zo is gericht op het bouwen van projecten vanuit repositories zeer grote die code in verschillende talen bevatten programmeren.

De verschillen tussen de nieuwe implementatie en het systeem eerder gebruikte bok Door facebook gebruiken Rust-taal in plaats van Java en een aanzienlijke verhoging van de efficiëntie en prestaties van het assemblageproces (bij interne tests op dezelfde infrastructuur voert Buck2 assemblagetaken twee keer zo snel uit als Buck).

Build-systemen staan ​​tussen een ontwikkelaar en hun code die wordt uitgevoerd, dus alles wat we kunnen doen om de ervaring sneller of productiever te maken, heeft rechtstreeks invloed op hoe effectief een ontwikkelaar kan zijn. Het doel van Buck2 was om te behouden wat we zo leuk vonden aan Buck1 (de basis en workflows), inspiratie te halen uit post-Buck1-innovaties (waaronder Bazel, Adapton en Shake), en ons te concentreren op snelheid en het mogelijk maken van nieuwe ervaringen.

Over Buck2

Er wordt op gewezen dat het systeem is niet gebonden aan het maken van code in specifieke talen en out of the box ondersteunt het bouwprojecten geschreven in C ++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell en OCaml gebruikt door Facebook.

De Starlark-taal, gebaseerd op Python (zoals in Bazel), wordt gebruikt om plug-ins te ontwerpen, scripts en regels te maken. Met Starlark kunt u de mogelijkheden van het bouwsysteem uitbreiden en abstract maken van de specifieke talen die worden gebruikt in de projecten die worden gebouwd.

Er wordt gezegd dat hoge prestaties worden bereikt door de resultaten te cachen, parallellisatie van werk en ondersteuning voor het op afstand uitvoeren van taken (Remote Build Execution).

De gebouwde omgeving gebruikt het concept van "hermeticiteit": de gecompileerde code wordt losgekoppeld van de buitenwereld, tijdens het bouwproces wordt niets van buitenaf geladen en het herhaaldelijk uitvoeren van de taak op verschillende systemen leidt tot hetzelfde resultaat (herhaaldelijk bouwen, bijvoorbeeld het resultaat van het compileren van een project op de machine van de ontwikkelaar zal exact hetzelfde zijn als de build op de continue integratieserver). Het gebrek aan afhankelijkheid wordt in Buck2 als een bug ervaren.

Van de kant van de Belangrijkste kenmerken van Buck2, vallen het volgende op:

  • De regels voor het ondersteunen van programmeertalen en het core build-systeem zijn volledig gescheiden. De regels zijn geschreven in de Starlark-taal en de Starlark-toolkit en implementatie zijn geschreven in Rust.
  • Het buildsysteem gebruikt een enkele incrementele afhankelijkheidsgrafiek (geen staging), waarmee je de diepte van parallellisatie van werk kunt vergroten in vergelijking met Buck en Bazel en vele soorten bugs kunt vermijden.
  • De code van Buck2 die op GitHub is geplaatst en de regels voor ondersteuning van de programmeertaal zijn bijna identiek aan de interne versie die wordt gebruikt in de infrastructuur van Facebook (de enige verschillen zitten in de link naar compiler-edities en build-servers die door Facebook worden gebruikt).
  • Het buildsysteem is ontworpen om te integreren met externe taakuitvoeringssystemen waarmee u taken op externe servers kunt uitvoeren. De API voor externe uitvoering is compatibel met Bazel en is getest op compatibiliteit met Buildbarn en EngFlow.
  • Er is integratie met virtuele bestandssystemen voorzien, waarin de inhoud van de hele repository wordt gepresenteerd, maar in feite wordt het werk uitgevoerd met het echte lokale deel van een deel van de repository (de ontwikkelaar ziet de hele repository, maar alleen wat is vereist) geopende bestanden worden opgehaald uit de repository). EdenFS-gebaseerde VFS en Git LFS worden ondersteund, die worden gebruikt door Sapling.

Tot slot, degenen die er meer over willen weten, moeten weten dat de code wordt gedistribueerd onder de Apache 2.0-licentie en dat ze de details kunnen raadplegen In de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.