Bazel ( / ˈ b eɪ z əl / [ 3 ] ) es una herramienta de software libre y de código abierto que se utiliza para la automatización de la compilación y prueba de software. [ 2 ]
De forma similar a herramientas de compilación como Make , Apache Ant y Apache Maven , [ 2 ] [ 4 ] Bazel compila aplicaciones de software a partir del código fuente mediante reglas. Las reglas y macros se crean en el lenguaje Starlark , [ 5 ] un dialecto de Python . [ 4 ] Existen reglas integradas para compilar software escrito en Java , Kotlin , Scala , C , C++ , Go , Python , Rust , JavaScript , Objective-C y scripts bash . [ 4 ] [ 6 ] Bazel puede producir paquetes de aplicaciones de software adecuados para su implementación en los sistemas operativos Android e iOS . [ 7 ]
Historia
En 2006, [ 8 ] Google comenzó el desarrollo de una herramienta de compilación llamada Blaze . [ 9 ] La motivación era tener un sistema de compilación que proporcionara velocidad y corrección en un gran monorepo . [ 10 ]
Bazel fue creado como una versión de código abierto de Blaze, usando su anagrama como nombre. [ 4 ] Bazel fue lanzado por primera vez en marzo de 2015 y entró en fase beta en septiembre de 2015. [ 6 ] La versión 1.0 fue lanzada en octubre de 2019. [ 11 ]
Razón fundamental
Bazel ha sido descrito como "uno de los primeros sistemas de compilación en la nube de acceso abierto". Es capaz de guardar el historial de comandos ejecutados previamente y compartir los resultados entre varios usuarios. [ 12 ] Para ello, Bazel requiere que las entradas y salidas de los objetivos de compilación estén completamente especificadas.
Lenguaje de la alondra
Bazel es extensible con el lenguaje de programación Starlark. [ 13 ] Starlark es un lenguaje embebido cuya sintaxis es un subconjunto de la sintaxis de Python . Sin embargo, no implementa muchas de las características del lenguaje Python, como la capacidad de acceder a la entrada/salida de archivos, para evitar extensiones que podrían generar efectos secundarios o resultados de compilación desconocidos para el propio sistema de compilación. Dichos efectos secundarios podrían conducir a un análisis incorrecto del grafo de dependencias de compilación.
Idiomas
Bazel fue diseñado como un sistema de compilación multilingüe. Es capaz de compilar software combinando múltiples lenguajes de programación dentro del mismo repositorio .
Muchos sistemas de compilación de uso común están diseñados para un lenguaje de programación específico. Algunos ejemplos son Ant y Maven para Java, Leiningen para Clojure , sbt para Scala , etc. En un repositorio con varios lenguajes, combinar sistemas de compilación independientes y lograr la velocidad y la precisión de compilación descritas anteriormente puede resultar difícil y problemático.
Relación con otras herramientas de compilación
Los sistemas de compilación más similares a Bazel son Pants, [ 14 ] Buck , [ 15 ] Please, [ 16 ] y el sistema de compilación Brazil utilizado internamente en Amazon . [ 17 ] Pants y Buck buscan objetivos de diseño técnico similares a los de Bazel, y Pants se inspiró en el sistema de compilación Blaze utilizado internamente en Google.
Bazel, Pants, Buck y Please adoptaron Starlark como analizador de archivos BUILD, respetando su sintaxis. Se han implementado sistemas de compilación desarrollados de forma independiente con usos similares en el análisis eficiente de gráficos de dependencias y el seguimiento automatizado de artefactos de compilación en sistemas de compilación como tup. [ 18 ]
Salvadera
Bazel utiliza un entorno aislado para los pasos de compilación. Cuando Bazel realiza una compilación independiente, crea un nuevo directorio y lo llena con enlaces simbólicos a las dependencias de entrada explícitas para la regla. Para lenguajes como C o C++, esto requiere que el usuario especifique claramente las dependencias y evita la inclusión inesperada de un archivo de cabecera con un nombre similar desde otro directorio de inclusión.
Este enfoque de entorno aislado genera problemas con las herramientas de compilación comunes, lo que requiere varias soluciones alternativas para compilar correctamente el código en diferentes arquitecturas. Por ejemplo, al realizar una compilación separada para las arquitecturas Mac/Darwin, el compilador escribe las rutas de entrada en símbolos SO y OSO en el binario Mach-O , que se pueden ver con un comando como nm -a mybinary | grep SO. Estas rutas son necesarias para encontrar símbolos durante la depuración. Como resultado, las compilaciones en Bazel deben corregir los objetos compilados a posteriori, intentando corregir los problemas relacionados con las rutas que surgieron de la construcción del entorno aislado utilizando indicadores como -fdebug-prefix-mapy -oso_prefix, este último disponible en Xcode 11.0 . Un manejo similar debe tener lugar en las fases de enlace, reescribiendo los valores de rpath en las bibliotecas de objetos compartidos con un comando como install_name_tool. [ 19 ]
Logo

Desde el lanzamiento inicial de Bazel, el logotipo era una letra "b" verde estilizada como el tallo de una planta de albahaca con dos hojas. El 5 de julio de 2017, el blog de Bazel anunció un nuevo logotipo, [ 20 ] que consiste en tres bloques de construcción verdes dispuestos para formar un corazón.
Adopción
Bazel es comúnmente utilizado por empresas. [ 21 ] Algunos usuarios notables incluyen BMW [ 22 ] , Google , SpaceX , [ 23 ] Stripe , [ 24 ] Tinder , [ 25 ] y Uber . [ 26 ]
Véase también
Referencias
- ↑ "Versión 9.2.0" . 13 de julio de 2026. Consultado el 14 de julio de 2026 .
- 1 2 3 Yegulalp, Serdar (11 de septiembre de 2015). "Google publica una herramienta de software escalable e independiente del lenguaje de código abierto" . InfoWorld . Archivado del original el 25 de octubre de 2017. Recuperado el 25 de junio de 2016 .
- ↑ "Preguntas frecuentes - Bazel" . bazel.build . Archivado del original el 6 de noviembre de 2016.
- 1 2 3 4 Bolton, David (27 de abril de 2015). "Bazel, el sistema de compilación de código abierto de Google: The New Stack" . thenewstack.io . The New Stack. Archivado del original el 24 de octubre de 2017. Recuperado el 25 de junio de 2016 .
- ↑ "Starlark - Bazel" . blog.bazel.build . Consultado el 18 de octubre de 2018 .
- 1 2 Daws, Ryan (10 de septiembre de 2015). "La herramienta de compilación de software de Google, Bazel, entra en fase beta" . www.developer-tech.com . Developer Tech. Archivado del original el 23 de octubre de 2017. Recuperado el 25 de junio de 2016 .
- ↑ "Preguntas frecuentes - Bazel" . bazel.build . Consultado el 25 de junio de 2016 .
- ↑ Vermeulen, Steve (21 de noviembre de 2023). "Bazel, de Blaze a Buck2: una breve historia de los sistemas de compilación monorepo modernos" .
- ↑ Beyer, Betsy; Jones, Chris; Petoff, Jennifer; Murphy, Niall Richard (23 de marzo de 2016). Ingeniería de confiabilidad de sitios: cómo Google gestiona sus sistemas de producción . O'Reilly Media, Inc. pág. 90. ISBN 9781491951187Consultado el 25 de junio de 2016 .
- ↑ Winters, Titus; Manshreck, Tom; Wright, Hyrum. Ingeniería de software en Google . O'Reilly. pág. 372.
- ↑ "Bazel 1.0" . blog.bazel.build . Consultado el 29/10/2023 .
- ↑ Mokhov, Andrey y Mitchell, Neil y Peyton Jones, Simon (2018). "Build Systems à la Carte" . Actas de la ACM sobre lenguajes de programación . 2 (ICFP): 1–29 . doi : 10.1145/3236774 .
{{cite journal}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ "Lenguaje Starlark" . bazel.build .
- ↑ "Pantalones: Un sistema de compilación rápido y escalable" .
- ↑ "Buck: Una herramienta de compilación de alto rendimiento" .
- ↑ Consulte las preguntas frecuentes
- ↑ Sistema de compilación de Amazon
- ↑ Shal, Mike (2009). "Reglas y algoritmos del sistema de construcción" (PDF) .
- ↑ "tools/cpp/osx_cc_wrapper.sh" . Github. 5 de febrero de 2022.
- ↑ Giannini, Steren (5 de julio de 2017). "Un nuevo logotipo y página de inicio para Bazel" .
- ↑ "¿Quién usa Bazel? "
- ↑ "Cambio de rumbo en la integración continua: estrategias de BMW para la producción a alta velocidad" . 31 de marzo de 2025.
- ↑ "Construyendo sistemas en tiempo real con Bazel con SpaceX" . 11 de diciembre de 2017 – vía YouTube .
- ↑ "Compilaciones rápidas, compilaciones seguras. Elige dos" . 4 de mayo de 2022.
- ↑ Tinder (13 de junio de 2022). "Bazel Hermetic Toolchain and Tooling Migration" . Medium .
- ↑ "Creando el monorepo de Go de Uber con Bazel | Blog de Uber" .
Enlaces externos
- Automatización de compilaciones
- Herramientas de compilación
- Software de Google
- Software que utiliza la licencia Apache.