O que é software de código aberto?
Software de código aberto é um software cujo código-fonte é disponibilizado publicamente para qualquer pessoa inspecionar, modificar e distribuir. A Iniciativa Open Source fornece a definição amplamente aceite:
"Software de código aberto é um software com código-fonte que qualquer pessoa pode inspecionar, modificar e melhorar. O detentor dos direitos autorais concede aos usuários os direitos de estudar, alterar e distribuir o software para qualquer pessoa e para qualquer finalidade, sujeito aos termos de uma licença de código aberto."
Esta definição enfatiza vários princípios fundamentais:
- Disponibilidade do código-fonte: O código-fonte completo deve ser acessível publicamente, não apenas binários executáveis.
- Liberdade de modificação: Os usuários podem alterar o software para atender às suas necessidades, corrigir bugs ou adicionar recursos.
- Direitos de redistribuição: Os usuários podem compartilhar o software com outras pessoas, seja na forma original ou modificada.
- Termos de licença: Os direitos de uso são definidos por uma licença de código aberto que especifica permissões, restrições e obrigações.
O software de código aberto difere fundamentalmente do software proprietário, em que o código-fonte permanece secreto e os direitos de utilização são rigorosamente controlados pelo detentor dos direitos de autor.
O modelo colaborativo de código aberto
O desenvolvimento de código aberto envolve a criação colaborativa de software com vários contribuidores:
Desenvolvimento impulsionado pela comunidade
- Contribuidores distribuídos: Desenvolvedores de todo o mundo contribuem com código, documentação, testes e suporte.
- Participação voluntária: Muitos colaboradores participam voluntariamente, motivados pela resolução de problemas, aprendizagem, construção de reputação ou ferramentas de apoio que utilizam.
- Meritocracia: A influência em projetos normalmente se correlaciona com a qualidade e quantidade de contribuições, em vez de hierarquia organizacional.
- Processos transparentes: O desenvolvimento acontece em repositórios públicos, onde qualquer pessoa pode observar discussões, decisões e mudanças.
Fluxos de trabalho colaborativos
- Repositórios públicos: O código é hospedado em plataformas como GitHub, GitLab ou Bitbucket, onde qualquer pessoa pode visualizá-lo.
- Acompanhamento de problemas: Bugs e solicitações de recursos são rastreados publicamente, permitindo que os membros da comunidade identifiquem problemas e proponham soluções.
- Pull request reviews: Os colaboradores enviam alterações por meio de solicitações pull que são revisadas pelos mantenedores e outros membros da comunidade antes da fusão.
- Gerenciamento de lançamento: Os mantenedores coordenam as liberações, garantindo estabilidade e compatibilidade enquanto incorporam contribuições da comunidade.
Modelos de governação de projetos
Diferentes projetos de código aberto adotam várias abordagens de governança:
- Ditador benevolente: Um único indivíduo (muitas vezes o fundador) toma decisões finais sobre a direção do projeto (por exemplo, Python com Guido van Rossum historicamente).
- Equipa principal: Um pequeno grupo de mantenedores toma decisões coletivamente por meio de consenso ou votação.
- Governação da fundação: Grandes projetos geralmente criam fundações (como Apache Foundation, Linux Foundation) que fornecem estrutura jurídica, recursos e estruturas de governança.
- Patrocínio corporativo: Muitos projetos de código aberto são mantidos principalmente por funcionários de empresas que dependem do software.
Adoção generalizada de software de código aberto
O software de código aberto tornou-se omnipresente em todos os sectores da tecnologia:
Estatísticas de adoção do setor
- Utilização empresarial: Mais de 90% das empresas utilizam software de código aberto em ambientes de produção.
- Infraestrutura da Internet: A maioria dos servidores web roda em Linux (open-source), serve conteúdo através de Apache ou Nginx (open-source), e usa bancos de dados como PostgreSQL ou MySQL (open-source).
- Computação em nuvem: As principais plataformas de nuvem usam e suportam extensivamente tecnologias de código aberto — Kubernetes, Docker, Terraform e várias outras ferramentas de código aberto formam a base da infraestrutura de nuvem moderna.
- Dispositivos móveis: O Android, o sistema operacional móvel mais popular do mundo, é construído no kernel Linux e inclui extensos componentes de código aberto.
Composição do stack tecnológico
As stacks de tecnologia moderna são predominantemente de código aberto.
- Sistemas operacionais: O Linux alimenta a infraestrutura de nuvem, contêineres e muitos sistemas embarcados.
- Linguagens de programação: Python, JavaScript, Java, Go, Rust, Ruby, PHP — as linguagens mais populares são de código aberto.
- Bases de dados: PostgreSQL, MySQL, MongoDB, Redis, Elasticsearch dominam as implantações de banco de dados.
- Tecnologias Web: React, Angular, Vue.js, Express, Django, Rails permitem o desenvolvimento de aplicações web.
- Ferramentas de desenvolvimento: Git, Docker, Kubernetes, Jenkins, VS Code são ferramentas essenciais de desenvolvimento de código aberto.
A adoção do código aberto pela Microsoft
A Microsoft exemplifica a transformação nas atitudes empresariais em relação ao software de código aberto:
Mudança histórica
Historicamente, a Microsoft via o código aberto como uma ameaça ao seu modelo de negócios de software proprietário. Isso mudou drasticamente na última década, à medida que a empresa reconheceu a importância estratégica do código aberto.
Código aberto no Azure
O Azure integra extensivamente tecnologias de código aberto:
Linguagens e tempos de execução: O Azure suporta Python, Node.js, Java, PHP, Ruby, Go e outras linguagens de código aberto como opções de plataforma de primeira classe.
Bases de dados: O Azure oferece serviços gerenciados para PostgreSQL, MySQL, MariaDB e Redis, além de ofertas proprietárias.
Orquestração de contêineres: O Serviço Kubernetes do Azure (AKS) fornece Kubernetes gerenciados, a plataforma de orquestração de contêineres de código aberto.
Ferramentas de desenvolvimento: O Azure DevOps integra-se com o Git, Jenkins e outras ferramentas de código aberto, enquanto o GitHub (adquirido pela Microsoft) é a maior plataforma do mundo para desenvolvimento de código aberto.
Dados e análises: O Azure suporta Apache Spark, Hadoop, Kafka e outras tecnologias de big data de código aberto.
Transformação .NET
A plataforma .NET demonstra o compromisso abrangente da Microsoft com o código aberto:
.NET de fonte aberta: A Microsoft lançou o .NET Core (agora .NET 5+) como código aberto sob a licença MIT, tornando toda a plataforma disponível gratuitamente com código-fonte. O tempo de execução do .NET, bibliotecas, compiladores e ferramentas são todos de código aberto.
Desenvolvimento multiplataforma: Ao tornar o .NET de código aberto, a Microsoft permitiu o desenvolvimento multiplataforma no Windows, Linux e macOS, expandindo drasticamente o alcance do .NET.
Contribuições comunitárias: Os repositórios .NET no GitHub recebem milhares de contribuições de desenvolvedores fora da Microsoft, com a empresa ativamente revisando e aceitando melhorias da comunidade.
Dependências de código aberto: ASP.NET aplicativos principais normalmente incorporam muitos componentes de código aberto:
- Bibliotecas frontend: jQuery, React, Angular, Vue.js permitem interfaces de usuário avançadas.
- Bibliotecas de utilitários: Newtonsoft.Json, Serilog, AutoMapper e inúmeros outros fornecem funcionalidades comuns.
- Estruturas de teste: xUnit, NUnit, Moq suportam desenvolvimento orientado a testes.
Contribuir para projetos de código aberto
A Microsoft contribui ativamente para projetos de código aberto além do seu:
Kernel Linux: A Microsoft contribui para o kernel Linux, melhorando a integração Hyper-V e suportando a infraestrutura do Azure.
Kubernetes: A Microsoft é um dos principais contribuintes para o Kubernetes, ajudando a moldar a plataforma que alimenta o AKS.
Iniciativas de código aberto: A Microsoft patrocina eventos de código aberto, financia infraestrutura crítica de código aberto e emprega desenvolvedores para trabalhar em tempo integral em projetos de código aberto.
Projetos de código aberto criados pela Microsoft
Além de contribuir para projetos existentes, a Microsoft cria e abre códigos-fonte de software significativo:
Código do Visual Studio: O editor de código mais popular é de código aberto, com extensões, temas e melhorias contribuídas por uma comunidade global.
TypeScript: A linguagem da Microsoft para o desenvolvimento de JavaScript seguro é de código aberto e amplamente adotada.
Núcleo do PowerShell: A estrutura de automação da Microsoft é de código aberto e multiplataforma.
Fundação .NET: A Microsoft estabeleceu o .NET Foundation para dar suporte a projetos de código aberto no ecossistema .NET, fornecendo recursos, governança e suporte à comunidade.
Para obter mais informações, consulte o site do .NET Foundation.
Fundamentação estratégica
A adoção do código aberto pela Microsoft reflete decisões estratégicas de negócios:
Adoção pelo desenvolvedor: Os desenvolvedores preferem ferramentas e linguagens de código aberto. Ao suportar código aberto, a Microsoft atrai desenvolvedores para suas plataformas.
Negócios na nuvem: As cargas de trabalho de código aberto impulsionam a adoção da nuvem. O excelente suporte de código aberto no Azure torna a plataforma mais atraente.
Velocidade de inovação: O código aberto permite uma inovação mais rápida através de contribuições da comunidade, reduzindo a carga de desenvolvimento da Microsoft.
Crescimento dos ecossistemas: As comunidades de código aberto criam extensões, ferramentas e conhecimento valiosos que aumentam o valor da plataforma.
Posicionamento competitivo: Como os concorrentes (AWS, Google Cloud) oferecem suporte a código aberto extensivamente, a Microsoft deve igualar ou exceder seus recursos de código aberto.
Por que as organizações escolhem o código aberto
As organizações selecionam software de código aberto por vários motivos:
Considerações de custo: A eliminação das taxas de licenciamento reduz os custos diretos, particularmente importantes na implantação de software em escala ou na construção de produtos em que os custos de licenciamento seriam transferidos para os clientes.
Flexibilidade e controlo: O acesso ao código-fonte significa que as organizações podem modificar o software para atender a necessidades específicas, corrigir bugs críticos de forma independente e não ficar presas aos cronogramas dos fornecedores para recursos ou correções.
Transparência e segurança: O código-fonte público permite auditorias de segurança, a revisão da comunidade identifica vulnerabilidades mais rapidamente e a ausência de backdoors ocultos ou coleta de dados fornece confiança.
Evitando a dependência do fornecedor: O software de código aberto normalmente pode ser implantado em qualquer lugar, reduzindo a dependência de fornecedores específicos e melhorando as posições de negociação.
Apoio comunitário: Comunidades ativas de código aberto fornecem fóruns, documentação, tutoriais e assistência entre pares, muitas vezes rivalizando ou excedendo a qualidade do suporte comercial.
Inovação e características: As tecnologias de ponta geralmente surgem primeiro no código aberto, e as organizações podem contribuir com os recursos de que precisam, em vez de esperar por roteiros de fornecedores.
Entender o que é software de código aberto e por que ele se tornou tão amplamente adotado fornece um contexto essencial para explorar as preocupações que as organizações devem abordar ao implementar componentes de código aberto, que a próxima unidade aborda.