Visão do Bazel

Qualquer desenvolvedor de software pode criar, testar e empacotar com eficiência qualquer projeto, de qualquer tamanho ou complexidade, com ferramentas fáceis de adotar e ampliar.

  • Os engenheiros podem ter certeza de que os princípios básicos de build são concretizados. Os desenvolvedores de software se concentram no processo criativo de criação de código, porque o processo mecânico de criação e teste é resolvido. Ao personalizar o sistema de compilação para oferecer suporte a novos idiomas ou necessidades organizacionais únicas, os usuários se concentram nos aspectos de extensibilidade exclusivos do caso de uso, sem ter que reinventar o encanamento básico.

  • Os engenheiros podem contribuir facilmente para qualquer projeto. Um desenvolvedor que queira começar a trabalhar em um novo projeto pode simplesmente clonar o projeto e executar o build. Não é necessário usar configurações locais. Elas simplesmente funcionam. Com a execução remota em várias plataformas, eles podem trabalhar em qualquer máquina em qualquer lugar e testar totalmente as alterações em todas as plataformas a que o projeto se destina. Os engenheiros podem configurar rapidamente o build para um novo projeto ou migrar incrementalmente um build existente.

  • Os projetos podem ser dimensionados para qualquer tamanho de base de código e equipe de qualquer tamanho. Os testes rápidos e incrementais permitem que as equipes validem totalmente todas as alterações antes que elas sejam confirmadas. Isso continua sendo verdade mesmo à medida que os repositórios crescem, os projetos abrangem vários repositórios e várias linguagens são introduzidas. A infraestrutura não força os desenvolvedores a trocar a cobertura de teste pela velocidade do build.

Acreditamos que o Bazel tem o potencial de cumprir essa visão.

Ele foi criado do zero para permitir builds reproduzíveis (um determinado conjunto de entradas sempre produzirá as mesmas saídas) e portáteis (um build pode ser executado em qualquer máquina sem afetar a saída).

Essas características são compatíveis com a incrementabilidade segura (a recriação apenas de entradas modificadas não apresenta o risco de corrupção) e a distribuição (as ações de build são isoladas e podem ser transferidas). Ao minimizar o trabalho necessário para fazer uma compilação correta e carregar em paralelo esse trabalho em vários núcleos e sistemas remotos, o Bazel pode tornar qualquer compilação rápida.

A camada de abstração do Bazel, instruções específicas para linguagens, plataformas e conjuntos de ferramentas implementadas em uma linguagem de extensibilidade simples, permite que ela seja facilmente aplicada a qualquer contexto.

Competências principais do Bazel

  1. O Bazel é compatível com builds e testes em vários idiomas e plataformas. É possível executar um único comando para criar e testar toda a árvore de origem, independentemente da combinação de linguagens e plataformas que você segmenta.
  2. Os builds do Bazel são rápidos e corretos. Cada compilação e cada execução de teste são incrementais nas máquinas dos desenvolvedores e na CI.
  3. O Bazel fornece uma linguagem uniforme e extensível para definir builds para qualquer linguagem ou plataforma.
  4. O Bazel permite que suas versões sejam escalonadas conectando-se a serviços de execução remota e armazenamento em cache.
  5. Ele funciona em todas as principais plataformas de desenvolvimento (Linux, MacOS e Windows).
  6. Aceitamos que a adoção do Bazel exige esforço, mas a adoção gradual é possível. Interfaces do Bazel com ferramentas padrão para uma determinada linguagem/plataforma.

Como atender comunidades linguísticas

A engenharia de software evolui no contexto de comunidades linguísticas, normalmente grupos auto-organizados de pessoas que usam ferramentas e práticas comuns.

Para serem usadas pelos membros de uma comunidade de idiomas, é preciso disponibilizar regras de alta qualidade do Bazel que se integrem aos fluxos de trabalho e às convenções dessa comunidade.

Ele é considerado extensível e aberto, além de oferecer suporte a bons conjuntos de regras para qualquer linguagem.

Requisitos de um bom conjunto de regras

  1. As regras precisam oferecer suporte à criação e testes eficientes da linguagem, incluindo cobertura de código.
  2. As regras precisam interagir com um "gerenciador de pacotes" amplamente usado na linguagem (como Maven para Java) e oferecer suporte a caminhos de migração incrementais de outros sistemas de build muito usados.
  3. As regras precisam ser extensíveis e interoperáveis, seguindo os princípios "Bazel sanduíche".
  4. As regras precisam estar prontas para execução remota. Na prática, isso significa configurável usando o mecanismo de conjuntos de ferramentas.
  5. As regras e o Bazel precisam interagir com um ambiente de desenvolvimento integrado amplamente utilizado para a linguagem, se houver.
  6. As regras precisam ter uma documentação completa e utilizável, com material introdutório para novos usuários e documentos abrangentes para usuários avançados.

Cada um desses itens é essencial e somente juntos eles cumprem as competências do Bazel para o ecossistema específico.

Em geral, eles são suficientes. Quando todos são atendidos, o Bazel agrega valor total aos membros dessa comunidade linguística.