Buck2, o novo sistema de criação do Facebook

Buck2-Herói

Buck2, o novo sistema de compilação de código aberto do Facebook

Facebook introduzido lançou recentemente um novo sistema de compilação chamado "Buck2", que observa que é focado na construção de projetos a partir de repositórios muito grandes que incluem código em diferentes idiomas programação.

Diferenças entre a nova implementação e o sistema dinheirinho usado anteriormente por Facebook estão usando a linguagem Rust em vez de Java e um aumento significativo na eficiência e desempenho do processo de montagem (em testes internos na mesma infraestrutura, o Buck2 executa tarefas de montagem duas vezes mais rápido que o Buck).

Os sistemas de compilação ficam entre um desenvolvedor e seu código em execução, portanto, qualquer coisa que possamos fazer para tornar a experiência mais rápida ou mais produtiva afeta diretamente a eficácia de um desenvolvedor. O objetivo do Buck2 era manter o que amamos no Buck1 (o básico e os fluxos de trabalho), inspirar-se nas inovações pós-Buck1 (incluindo Bazel, Adapton e Shake) e focar na velocidade e permitir novas experiências.

Sobre o Buck2

Destaca-se que o sistema não está vinculado à criação de código em linguagens específicas e fora da caixa, suporta projetos de construtor escritos em C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell e OCaml usados ​​pelo Facebook.

A linguagem Starlark, baseada em Python (como no Bazel), é usada para projetar plugins, criar scripts e regras. O Starlark permite estender os recursos do sistema de construção e abstrair das linguagens específicas usadas nos projetos que estão sendo construídos.

É mencionado que alto desempenho é alcançado armazenando em cache os resultados, paralelização de trabalho e suporte para execução remota de tarefas (Remote Build Execution).

O ambiente de construção usa o conceito de "hermeticidade": o código compilado é separado do mundo externo, nada é carregado de fora durante o processo de compilação e a execução repetida do trabalho em sistemas diferentes leva ao mesmo resultado (compilações repetidas, por exemplo, o resultado da compilação de um projeto no máquina do desenvolvedor será exatamente o mesmo que a compilação no servidor de integração contínua). A situação de falta de dependência é percebida no Buck2 como um bug.

Da parte do Principais recursos do Buck2, os seguintes se destacam:

  • As regras para suportar linguagens de programação e o sistema de compilação principal são completamente separadas. As regras são escritas na linguagem Starlark, e o kit de ferramentas Starlark e a implementação são escritos em Rust.
  • O sistema de compilação usa um único gráfico de dependência incremental (sem preparação), que permite aumentar a profundidade da paralelização do trabalho em comparação com Buck e Bazel e evitar muitos tipos de bugs.
  • O código do Buck2 postado no GitHub e as regras de suporte à linguagem de programação são quase idênticas à versão interna utilizada na infraestrutura do Facebook (as únicas diferenças estão no link para as edições do compilador e build servers utilizados pelo Facebook).
  • O sistema de compilação foi projetado para se integrar com sistemas de execução de trabalhos remotos que permitem executar trabalhos em servidores remotos. A API de execução remota é compatível com Bazel e foi testada para compatibilidade com Buildbarn e EngFlow.
  • É fornecida integração com sistemas de arquivos virtuais, nos quais é apresentado o conteúdo de todo o repositório, mas na verdade o trabalho é realizado com a parte local real de uma parte do repositório (o desenvolvedor vê todo o repositório, mas apenas o que é obrigatório) os arquivos acessados ​​são recuperados do repositório). VFS baseado em EdenFS e Git LFS são suportados, que são usados ​​por Sapling.

Finalmente, para os interessados ​​em conhecer melhor, devem saber que o código é distribuído sob a licença Apache 2.0 e podem consultar os detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.