Buck2, el nuevo sistema de compilación de Facebook

Buck2-Hero

Buck2, el nuevo sistema de compilación de código abierto de Facebook

Facebook presentó recientemente un nuevo sistema de compilación llamado «Buck2», el cual destaca que está enfocado en construir proyectos a partir de repositorios muy grandes que incluyen código en diferentes lenguajes de programación.

Las diferencias clave entre la nueva implementación y el sistema Buck utilizado anteriormente por Facebook son el uso del lenguaje Rust en lugar de Java y un aumento significativo en la eficiencia y el rendimiento del proceso de ensamblaje (en pruebas internas en la misma infraestructura, Buck2 realiza ensamblaje tareas el doble de rápido que Buck).

Los sistemas de compilación se interponen entre un programador y la ejecución de su código, por lo que cualquier cosa que podamos hacer para que la experiencia sea más rápida o más productiva afecta directamente la eficacia que puede tener un desarrollador. El objetivo de Buck2 era mantener lo que nos gustaba de Buck1 (los conceptos básicos y los flujos de trabajo), inspirarnos en las innovaciones posteriores a Buck1 (incluidos Bazel , Adapton y Shake ) y centrarnos en la velocidad y permitir nuevas experiencias.

Sobre Buck2

Se destaca que el sistema no está vinculado a la creación de código en lenguajes específicos y, de forma inmediata, admite proyectos de creación escritos en C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell y OCaml utilizados por Facebook.

El lenguaje Starlark, basado en Python (como en Bazel), se usa para diseñar complementos, crear scripts y reglas. Starlark le permite ampliar las capacidades del sistema de construcción y abstraerse de los lenguajes específicos utilizados en los proyectos que se están construyendo.

Se menciona que el alto rendimiento se logra mediante el almacenamiento en caché de los resultados, la paralelización del trabajo y el soporte para la ejecución remota de tareas (Remote Build Execution).

El entorno de compilación utiliza el concepto de «hermeticidad»: el código compilado se separa del mundo exterior, no se carga nada desde el exterior durante el proceso de compilación y la ejecución repetida del trabajo en diferentes sistemas conduce al mismo resultado (construcciones repetidas, por ejemplo, el resultado de compilar un proyecto en la máquina del desarrollador será exactamente el mismo que la compilación en el servidor de integración continua). La situación de falta de dependencia se percibe en Buck2 como un error.

Por la parte de las características clave de Buck2, se destacan las siguientes:

  • Las reglas para admitir lenguajes de programación y el núcleo del sistema de compilación están completamente separados. Las reglas están escritas en el lenguaje Starlark, y el kit de herramientas y la implementación de Starlark están escritos en Rust.
  • El sistema de compilación utiliza un único gráfico de dependencia incremental (sin división en etapas), lo que le permite aumentar la profundidad de la paralelización del trabajo en comparación con Buck y Bazel y evitar muchos tipos de errores.
  • El código de Buck2 publicado en GitHub y las reglas de soporte del lenguaje de programación son casi idénticas a la versión interna utilizada en la infraestructura de Facebook (las únicas diferencias están en el enlace a las ediciones del compilador y los servidores de compilación utilizados por Facebook).
  • El sistema de compilación está diseñado con miras a la integración con sistemas de ejecución de trabajos remotos que le permiten ejecutar trabajos en servidores remotos. La API de ejecución remota es compatible con Bazel y se ha probado su compatibilidad con Buildbarn y EngFlow.
  • Se proporciona integración con sistemas de archivos virtuales, en los que se presentan los contenidos de todo el repositorio, pero de hecho, el trabajo se lleva a cabo con la porción local real de una parte del repositorio (el desarrollador ve todo el repositorio, pero solo lo requerido) los archivos a los que se accede se recuperan del repositorio). Se admiten VFS basados ​​en EdenFS y Git LFS , que son utilizados por Sapling.

Finalmente, para los interesados en poder conocer más al respecto, deben saber que el código se distribuye bajo la licencia Apache 2.0 y pueden consultar los detalles en el siguiente enlace.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.