Bazel Vision

Cualquier desarrollador de software puede compilar, probar y empaquetar de manera eficiente cualquier proyecto, de cualquier tamaño o complejidad, con herramientas fáciles de adoptar y extender.

  • Los ingenieros pueden dar por sentado los aspectos básicos de compilación. Los desarrolladores de software se centran en el proceso creativo de la creación de código porque el proceso mecánico de compilación y prueba está resuelto. Cuando personalizas el sistema de compilación para que admita nuevos lenguajes o necesidades organizativas únicas, los usuarios se enfocan en los aspectos de extensibilidad que son exclusivos de su caso de uso, sin tener que reinventar las tuberías básicas.

  • Los ingenieros pueden contribuir fácilmente a cualquier proyecto. Un desarrollador que desea comenzar a trabajar en un proyecto nuevo puede simplemente clonar el proyecto y ejecutar la compilación. No se necesita una configuración local, simplemente funciona. Con la ejecución remota multiplataforma, pueden trabajar en cualquier máquina y en cualquier lugar y probar por completo los cambios en todas las plataformas a las que se oriente el proyecto. Los ingenieros pueden configurar rápidamente la compilación para un proyecto nuevo o migrar una compilación existente de forma incremental.

  • Los proyectos pueden escalar a bases de código de cualquier tamaño y equipos de cualquier tamaño. Las pruebas incrementales rápidas permiten a los equipos validar por completo cada cambio antes de que se confirme. Esto sigue siendo así, incluso a medida que crecen los repositorios, los proyectos abarcan varios repositorios y se introducen varios lenguajes. La infraestructura no obliga a los desarrolladores a intercambiar cobertura de prueba por velocidad de compilación.

Creemos que Bazel tiene el potencial para cumplir con esta visión.

Bazel se compiló desde cero para habilitar compilaciones que sean reproducibles (un conjunto determinado de entradas siempre producirá las mismas salidas) y portátiles (una compilación se puede ejecutar en cualquier máquina sin afectar la salida).

Estas características admiten la incrementalidad segura (la recompilación solo de entradas modificadas no introduce el riesgo de corrupción) y la capacidad de distribución (las acciones de compilación están aisladas y se pueden descargar). Cuando se minimiza el trabajo necesario para realizar una compilación correcta y se paraleliza el trabajo en varios núcleos y sistemas remotos, Bazel puede acelerar cualquier compilación.

La capa de abstracción de Bazel (instrucciones específicas para lenguajes, plataformas y cadenas de herramientas implementadas en un lenguaje de extensibilidad simple) permite aplicarla con facilidad a cualquier contexto.

Competencias centrales de Bazel

  1. Bazel admite compilaciones y pruebas multilingües y multiplataforma. Puedes ejecutar un solo comando para compilar y probar todo el árbol de fuentes, sin importar la combinación de lenguajes y plataformas a la que te orientes.
  2. Las compilaciones de Bazel son rápidas y correctas. Cada compilación y ejecución de prueba es incremental, en las máquinas de los desarrolladores y en la CI.
  3. Bazel proporciona un lenguaje uniforme y extensible para definir compilaciones para cualquier lenguaje o plataforma.
  4. Bazel permite que tus compilaciones se escalen mediante la conexión a servicios de ejecución remota y almacenamiento en caché.
  5. Bazel funciona en todas las plataformas de desarrollo principales (Linux, MacOS y Windows).
  6. Aceptamos que adoptar Bazel requiere esfuerzo, pero es posible la adopción gradual. Bazel interactúa con herramientas estándar de facto para un lenguaje o una plataforma determinados.

Al servicio de las comunidades lingüísticas

La ingeniería de software evoluciona en el contexto de las comunidades lingüísticas. Por lo general, son grupos de personas autoorganizadas que usan herramientas y prácticas comunes.

Para que las puedan usar los miembros de una comunidad lingüística, las reglas de Bazel de alta calidad deben estar disponibles que se integren en los flujos de trabajo y las convenciones de esa comunidad.

Bazel se compromete a ser extensible y abierta, y admite buenos conjuntos de reglas para cualquier lenguaje.

Requisitos de un buen conjunto de reglas

  1. Las reglas deben admitir compilaciones y pruebas eficientes para el lenguaje, incluida la cobertura de código.
  2. Las reglas deben interactuar con un “administrador de paquetes” muy usado para el lenguaje (como Maven para Java) y admitir rutas de migración incrementales de otros sistemas de compilación muy utilizados.
  3. Las reglas deben ser extensibles y interoperables, según los principios de “sándwich de bazel”.
  4. Las reglas deben estar listas para la ejecución remota. En la práctica, esto significa configurable mediante el mecanismo de cadenas de herramientas.
  5. Las reglas (y Bazel) deben interactuar con un IDE ampliamente utilizado para el lenguaje, si lo hay.
  6. Las reglas deben tener documentación exhaustiva y que se pueda usar, con material introductorio para los usuarios nuevos y documentos completos para los usuarios expertos.

Cada uno de estos elementos es esencial y solo en conjunto cumplen con las competencias de Bazel para su ecosistema particular.

En términos generales, también son suficientes: una vez que se cumplen todos, Bazel entrega plenamente su valor a los miembros de esa comunidad lingüística.