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 sentados los aspectos fundamentales de la compilación. Los desarrolladores de software se enfocan en el proceso creativo de crear código porque se resuelve el proceso mecánico de compilación y prueba. Cuando personalizan el sistema de compilación para admitir lenguajes nuevos o necesidades organizacionales únicas, los usuarios se enfocan en los aspectos de extensibilidad que son exclusivos de su caso de uso, sin tener que reinventar la infraestructura básica.

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

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

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

Bazel se creó desde cero para habilitar compilaciones reproducibles (un conjunto determinado de entradas siempre producirá los mismos resultados) y portátiles (una compilación se puede ejecutar en cualquier máquina sin afectar el resultado).

Estas características admiten la incrementalidad segura (volver a compilar solo las 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). Al minimizar el trabajo necesario para realizar una compilación correcta y paralelizar ese 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 que se aplique fácilmente a cualquier contexto.

Competencias clave de Bazel

  1. Bazel admite compilaciones y pruebas multiplataforma y multilingüe. Puedes ejecutar un solo comando para compilar y probar todo el árbol de origen, sin importar qué combinación de lenguajes y plataformas elijas como objetivo.
  2. Las compilaciones de Bazel son rápidas y correctas. Cada ejecución de compilación y 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 conectándose a servicios de ejecución y almacenamiento en caché remotos.
  5. Bazel funciona en todas las plataformas de desarrollo principales (Linux, MacOS y Windows).
  6. Aceptamos que la adopción de Bazel requiere esfuerzo, pero es posible una adopción gradual. Bazel interactúa con herramientas estándar de facto para un lenguaje o plataforma determinados.

Servicio a las comunidades de lenguajes

La ingeniería de software evoluciona en el contexto de las comunidades de lenguajes, por lo general, grupos de personas autoorganizados que usan herramientas y prácticas comunes.

Para que sean útiles para los miembros de una comunidad de lenguajes, deben estar disponibles reglas de Bazel de alta calidad que se integren con los flujos de trabajo y las convenciones de esa comunidad.

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

Requisitos de un buen conjunto de reglas

  1. Las reglas deben admitir compilación y pruebas eficientes para el lenguaje, incluida la cobertura de código.
  2. Las reglas deben interactuar con un "administrador de paquetes" de uso generalizado para el lenguaje (como Maven para Java) y admitir rutas de migración incrementales desde otros sistemas de compilación de uso generalizado.
  3. Las reglas deben ser extensibles e interoperables y seguir los "principios de sándwich de Bazel".
  4. Las reglas deben estar preparadas para la ejecución remota. En la práctica, esto significa que se pueden configurar con el mecanismo de cadenas de herramientas.
  5. Las reglas (y Bazel) deben interactuar con un IDE de uso generalizado para el lenguaje, si existe.
  6. Las reglas deben tener una documentación completa y utilizable , con material introductorio para usuarios nuevos y documentación integral para usuarios expertos.

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

También son, en general, suficientes. Una vez que se cumplen todos, Bazel entrega por completo su valor a los miembros de esa comunidad de lenguajes.