Bazel Vision

Informa un problema Ver código fuente

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

  • Los ingenieros pueden dar por sentado los aspectos fundamentales de la compilación. Los desarrolladores de software se enfocan en el proceso creativo de crear 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 de organización únicas, los usuarios se enfocan en los aspectos de la extensibilidad que son únicos para su caso práctico, sin tener que reinventar la plomería básica.

  • Los ingenieros pueden contribuir fácilmente a cualquier proyecto. Un desarrollador que desee comenzar a trabajar en un proyecto nuevo puede clonarlo y ejecutar la compilación. No hay necesidad de configuración local, solo funciona. Con la ejecución remota multiplataforma, pueden funcionar en cualquier máquina en cualquier lugar y probar por completo sus cambios en todas las plataformas a las que se orienta el proyecto. Los ingenieros pueden configurar la compilación con rapidez para un proyecto nuevo o migrar de forma incremental una compilación existente.

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

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

Bazel se compiló desde cero para permitir compilaciones que se puedan reproducir (un conjunto de entradas dado siempre producirá las mismas salidas) y portátiles (una compilación se puede ejecutar en cualquier máquina sin afectar el resultado).

Estas características admiten una incrementalidad segura (la recompilación solo cambia las entradas no introduce el riesgo de corrupción) y la 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 hacer que cualquier compilación sea rápida.

La capa de abstracción de Bazel, que es específica de los lenguajes, las plataformas y las cadenas de herramientas implementadas en un lenguaje de extensibilidad simple, permite aplicarla fácilmente en cualquier contexto.

Competencias centrales en 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 los 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 extensible y a fin de definir compilaciones para cualquier lenguaje o plataforma.
  4. Bazel permite que tus compilaciones 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 la adopción de Bazel requiere esfuerzo, pero es posible adopción gradual. Interfaces de Bazel con herramientas estándar de facto para un lenguaje o una plataforma determinados.

Brinda servicios a las comunidades lingüísticas

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

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

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

Requisitos para 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 interfaces con un “administrador de paquetes” de uso general para el lenguaje (como Maven para Java) y admitir rutas de migración incrementales de otros sistemas de compilación de uso general.
  3. Las reglas deben ser extensibles e interoperables, según los principios “Sandwich 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 que se usa mucho en el lenguaje, si es que existe.
  6. Las reglas deben tener documentación exhaustiva y útil con material de introducción para los usuarios nuevos y documentos completos para los usuarios expertos.

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

En conjunto, son lo suficientemente grandes. Una vez que se cumplen todos los requisitos, Bazel entrega por completo su valor a los miembros de esa comunidad lingüística.