¿Qué es Bazel (aka Blaze)?

¿Es un pájaro? ¿Es un avión? ¡No! Es una herramienta de construcción.

Concretamente, es la versión abierta del sistema que usan internamente en Google, que se llama Blaze, y que forma parte de un triángulo de tecnologías que dan soporte al desarrollo de todas sus aplicaciones internas –los proyectos de Google que se hacen en abierto, como Chromium, se gestionan de otra forma.

¿He oído build tool?

Bazel es un sistema de construcción de software como make, Maven, Gradle o Gulp. Es decir, su tarea es generar una salida a partir de un código fuente. Esa salida puede ser un ejecutable, una librería, o cualquier "artefacto" que tenga utilidad.

Espera, ¿por qué coño te estoy contando esto si ya lo deberías saber?

Lo que diferencia a Bazel del resto es que cubre un nicho que ningún otro cubre: las necesidades especiales de Google. Bueno, existen otras dos herramientas parecidas que figuran al final de la entrada.

Google, el niño especial.

Supongo que lo más fácil es pensar que una empresa como Google siempre tiene un síndrome NIH bestial, y le gusta reinventar la rueda. Pero, entre tú y yo, ¿cuántas empresas conoces que reunan todas estas características?

  • Tiene miles de desarrolladores picando a la vez, y muy buenos.
  • Trabajan en proyectos propios que suelen estar interrelacionados.
  • Despliegan sistemas donde la seguridad es crítica.
  • Sus productos incluyen hardware y software.
  • El código fuente que generan se queda en casa.

Esto tiene un nombre –no oficial: un problema de escala Google.

Que sí, coño, vete al grano.

Blaze, tal como comentan en la FAQ de Bazel, surgió como respuesta a la dificultad que tenían para manejar los miles de makefiles que necesitaban para C. Y se diseñó para que fuera un sistema multilenguaje y multiplataforma, algo que todo Google pudiera usar.

Eso significa que Bazel va a lo básico, al factor común de todo desarrollo: la construcción de un software se basa en pasos, donde cada paso es una transformación de una entrada en una salida. Sobre este esquema, se crean "reglas" que son las que saben operar con los datos –compilar un .java, generar un .exe, empaquetar una librería. Una construcción equivale entonces a un grafo de pasos en los que cada paso puede depender de otros y a la vez ser una dependencia de un paso posterior.

Además, hay una serie de restricciones, que persiguen tres objetivos importantes:

  • Determinismo.
  • Reproducibilidad.
  • Trazabilidad.

Esto, junto con la escala Google, será fundamental para entender el porqué, pero en una próxima entrada.

Las ovejas descarriadas.

Existen dos proyectos similares a Bazel, creados por ex-Googlers en sus nuevas empresas: Buck, de Facebook, y Pants, de Foursquare.

Autor

Héctor

Viendo los bytes pasar desde mi ventana