Facebook va presentar recentment un nou sistema de compilació anomenat Buck2, el qual destaca que està enfocat a construir projectes a partir de repositoris molt grans que inclouen codi en diferents llenguatges de programació.
les diferències clau entre la nova implementació i el sistema Buck utilitzat anteriorment per Facebook són lús del llenguatge Rust en lloc de Java i un augment significatiu en l'eficiència i el rendiment del procés d'assemblatge (en proves internes a la mateixa infraestructura, Buck2 realitza assemblatge tasques el doble de ràpid que Buck).
Els sistemes de compilació s'interposen entre un programador i l'execució del vostre codi, de manera que qualsevol cosa que puguem fer perquè l'experiència sigui més ràpida o més productiva afecta directament l'eficàcia que pot tenir un desenvolupador. L'objectiu de Buck2 era mantenir el que ens agradava de Buck1 (els conceptes bàsics i els fluxos de treball), inspirar-nos en les innovacions posteriors a Buck1 (inclosos Bazel, Adapton i Shake) i centrar-nos en la velocitat i permetre noves experiències.
Sobre Buck2
Es destaca que el sistema no està vinculat a la creació de codi en llenguatges específics i, de manera immediata, admet projectes de creació escrits a C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell i OCaml utilitzats per Facebook.
El llenguatge Starlark, basat en Python (com Bazel), s'usa per dissenyar complements, crear scripts i regles. Starlark us permet ampliar les capacitats del sistema de construcció i abstreure's dels llenguatges específics utilitzats en els projectes que s'estan construint.
S'esmenta que l'alt rendiment s'aconsegueix mitjançant l'emmagatzematge a la memòria cau dels resultats, la paral·lelització del treball i el suport per a l'execució remota de tasques (Remote Build Execution).
L'entorn de compilació utilitza el concepte de «hermeticitat»: el codi compilat se separa del món exterior, no es carrega res des de l'exterior durant el procés de compilació i l'execució repetida del treball en diferents sistemes condueix al mateix resultat (construccions repetides, per exemple, el resultat de compilar un projecte a la màquina del desenvolupador serà exactament el mateix que la compilació al servidor d'integració contínua). La situació de manca de dependència es percep a Buck2 com un error.
Per la part de les característiques clau de Buck2, Es destaquen les següents:
- Les regles per admetre llenguatges de programació i el nucli del sistema de compilació estan completament separats. Les regles estan escrites en el llenguatge Starlark, i el kit d'eines i la implementació de Starlark estan escrits a Rust.
- El sistema de compilació utilitza un únic gràfic de dependència incremental (sense divisió en etapes), cosa que us permet augmentar la profunditat de la paral·lelització del treball en comparació amb Buck i Bazel i evitar molts tipus d'errors.
- El codi de Buck2 publicat a GitHub i les regles de suport del llenguatge de programació són gairebé idèntiques a la versió interna utilitzada a la infraestructura de Facebook (les úniques diferències són a l'enllaç a les edicions del compilador i els servidors de compilació utilitzats per Facebook ).
- El sistema de compilació està dissenyat amb vista a la integració amb sistemes d'execució de treballs remots que us permeten executar treballs en servidors remots. L'API d'execució remota és compatible amb Bazel i se n'ha provat la compatibilitat amb Buildbarn i EngFlow.
- Es proporciona integració amb sistemes d'arxius virtuals, on es presenten els continguts de tot el repositori, però de fet, el treball es duu a terme amb la porció local real d'una part del repositori (el desenvolupador veu tot el repositori, però només el requerit) els arxius a què s'accedeix es recuperen del repositori). S'admeten VFS basats en EdenFS i Git LFS, que són utilitzats per Sapling.
Finalment, per als interessats en poder conèixer-ne més, han de saber que el codi es distribueix sota la llicència Apache 2.0 i poden consultar-ne els detalls en el següent enllaç.