Bazel Vision

Informar un problema Ver fuente Noche}

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

  • Los ingenieros pueden dar por sentado los fundamentos 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 se resuelve. Cuando se personaliza el sistema de compilación para admitir lenguajes nuevos o necesidades únicas de la organización, los usuarios se enfocan en los aspectos de la extensibilidad que son exclusivos de su caso de uso, sin tener que reinventar la estructura básica.

  • Los ingenieros pueden contribuir con facilidad en cualquier proyecto. Un desarrollador que desee comenzar a trabajar en un proyecto nuevo puede clonarlo y ejecutar la compilación. No es necesario realizar 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 sus 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 de forma incremental una compilación existente.

  • Los proyectos se pueden escalar a equipos de cualquier tamaño y base. Las pruebas incrementales rápidas permiten a los equipos validar por completo cada cambio antes de confirmarlo. 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 sacrificar la cobertura de prueba por la velocidad de compilación.

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

Bazel se compiló desde cero para habilitar compilaciones que sean 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 una incrementalidad segura (la recompilación solo las entradas modificadas no presenta el riesgo de corrupción) y la distribubilidad (las acciones de compilación están aisladas y pueden descargarse). Gracias a la minimización del trabajo necesario para realizar una compilación correcta y la paralelización que funciona en varios núcleos y sistemas remotos, Bazel puede agilizar 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 en cualquier contexto.

Competencias principales 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 ejecución de prueba y compilación es incremental en las máquinas de tus desarrolladores y en CI.
  3. Bazel proporciona un lenguaje uniforme y extensible para 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 principales plataformas de desarrollo (Linux, MacOS y Windows).
  6. Aceptamos que la adopción de Bazel requiere esfuerzo, pero la adopción gradual es posible. Bazel interactúa con herramientas estándar de facto para un lenguaje o una plataforma determinados.

Servicio a comunidades lingüísticas

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

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

Bazel tiene el compromiso de ser extensible y abierto, y de admitir conjuntos de reglas adecuados para cualquier lenguaje.

Requisitos de un buen conjunto de reglas

  1. Las reglas deben admitir una compilación y prueba eficientes para el lenguaje, incluida la cobertura de código.
  2. Las reglas deben interactuar con un "administrador de paquetes" muy utilizado para el lenguaje (como Maven para Java) y admitir rutas de migración incrementales desde otros sistemas de compilación ampliamente usados.
  3. Las reglas deben ser interoperables y extensibles de acuerdo con los principios de “sándwich de Bazel”.
  4. Las reglas deben estar listas para la ejecución remota. En la práctica, esto significa que se puede configurar mediante el mecanismo de cadenas de herramientas.
  5. Las reglas (y Bazel) deben interactuar con un IDE muy usado para el lenguaje, si lo hay.
  6. Las reglas deben contar con documentación completa y utilizable, con material introductorio para los usuarios nuevos y documentos exhaustivos para los usuarios expertos.

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

Además, en líneas generales, son suficientes: una vez que se cumplen todos los requisitos, Bazel entrega por completo su valor a los miembros de esa comunidad lingüística.