Resumo
Neste módulo, você explorou como o desenvolvimento de software moderno depende de componentes de código aberto e aprendeu estratégias para implementar software de código aberto enquanto gerencia riscos de segurança, legais e operacionais associados. Compreender esses conceitos permite que você aproveite os benefícios de código aberto enquanto protege sua organização de possíveis responsabilidades.
Como o software moderno é construído
Você aprendeu que as aplicações contemporâneas são montadas a partir de componentes em vez de construídas inteiramente do zero:
- Composição do componente: Os aplicativos modernos consistem em aproximadamente 80% componentes existentes mantidos fora do projeto, com apenas 20% sendo código de lógica de negócios original.
- Código aberto versus código fechado: Os componentes de código aberto fornecem código-fonte disponível publicamente que qualquer pessoa pode inspecionar, modificar e distribuir, enquanto os componentes de código fechado distribuem apenas binários sem acesso ao código-fonte.
- Ecossistemas de pacotes: Os componentes são distribuídos por meio de gerenciadores de pacotes como npm, PyPI, NuGet e Maven Central, que automatizam o gerenciamento de dependências.
- Benefícios do desenvolvimento baseado em componentes: A reutilização de componentes comprovados acelera o desenvolvimento, melhora a qualidade através da verificação da comunidade, reduz os custos evitando taxas de licenciamento e fornece acesso a inovações de ponta.
- Velocidade de desenvolvimento: O uso de componentes de código aberto reduz drasticamente o tempo de comercialização, permitindo que as equipes se concentrem no valor comercial exclusivo em vez de reconstruir a infraestrutura comum.
Preocupações corporativas sobre software de código aberto
Você examinou os riscos significativos que as organizações enfrentam ao adotar componentes de código aberto:
Preocupações de segurança:
- Vulnerabilidades conhecidas: Milhares de vulnerabilidades de segurança são descobertas em componentes de código aberto anualmente, exigindo monitoramento contínuo e correção rápida.
- Ataques à cadeia de abastecimento: Os invasores comprometem as contas dos mantenedores de pacotes, usam typosquatting ou exploram a confusão de dependências para injetar código malicioso.
- Projetos não mantidos: Muitos projetos de código aberto carecem de manutenção ativa, deixando vulnerabilidades não corrigidas quando os mantenedores abandonam projetos.
Preocupações com a qualidade e fiabilidade:
- Qualidade variável: Os componentes de código aberto variam de projetos mantidos profissionalmente a códigos de hobby mal testados.
- Alterações disruptivas: Os componentes nem sempre priorizam a compatibilidade com versões anteriores, o que exige alterações de código ao atualizar.
- Lacunas de documentação: A documentação inadequada aumenta os erros de integração e o uso indevido.
Questões legais e de licenciamento:
- Obrigações de conformidade com a licença: Cada licença de código aberto impõe requisitos que vão desde a simples atribuição até o fornecimento aberto obrigatório de trabalhos derivados.
- Propagação copyleft: Licenças copyleft fortes, como a GPL, podem exigir o fornecimento aberto de todo o seu aplicativo se não forem gerenciadas cuidadosamente.
- Proliferação de licenças: Os aplicativos podem depender de centenas de pacotes com dezenas de licenças diferentes, criando encargos complexos de conformidade.
Preocupações operacionais:
- Dependência da infraestrutura externa: Os aplicativos dependem de registros de pacotes públicos que podem sofrer interrupções ou remoção de pacotes.
- Carga de gerenciamento de atualização: Manter as dependências atualizadas requer esforço, testes e implantação contínuos.
O que é software de código aberto
Você aprendeu as características fundamentais do software de código aberto:
- Definição: Software cujo código-fonte está disponível publicamente para inspeção, modificação e distribuição, sujeito a uma licença de código aberto.
- Desenvolvimento colaborativo: Os projetos de código aberto envolvem contribuidores distribuídos em todo o mundo que participam voluntariamente, com o desenvolvimento acontecendo de forma transparente em repositórios públicos.
- Adoção generalizada: Mais de 90% das empresas usam software de código aberto na produção, e as tecnologias de código aberto alimentam a infraestrutura da Internet, plataformas de nuvem e dispositivos móveis.
- Transformação da Microsoft: A Microsoft deixou de ver o código aberto como uma ameaça para adotá-lo de forma abrangente, com o .NET de fonte aberta, contribuindo para Linux e Kubernetes e criando ferramentas populares de código aberto como Visual Studio Code e TypeScript.
- Fundamentação estratégica: As organizações escolhem o código aberto para economia de custos, flexibilidade e controle, transparência e segurança por meio da inspeção de código, evitando a dependência do fornecedor, suporte da comunidade e acesso antecipado a inovações.
Fundamentos de licença de código aberto
Você explorou como as licenças de código aberto regem o uso do software:
Finalidade da licença:
- Definir permissões: As licenças concedem direitos de uso, modificação e distribuição de software que, de outra forma, a lei de direitos autorais proibiria.
- Impor obrigações: As licenças exigem atribuição, divulgação do código-fonte, preservação da licença e, às vezes, conformidade com copyleft.
- Eximição de responsabilidade: Os autores não são responsáveis por danos e o software é fornecido "no estado em que se encontra" sem garantias.
Critérios de definição de código aberto:
- Redistribuição gratuita: Sem restrições na venda ou doação de software.
- Disponibilidade do código-fonte: Deve incluir a fonte na forma preferida para modificações.
- Trabalhos derivados permitidos: Deve permitir modificações e trabalhos derivados.
- Sem discriminação: Não pode discriminar pessoas, grupos ou campos de atuação.
- Tecnologia neutra: Não pode exigir tecnologias ou interfaces específicas.
Categorias de licença:
- Licenças permissivas: Permite incorporar código em software proprietário com restrições mínimas (MIT, Apache 2.0, BSD).
- Licenças Copyleft: Exigir trabalhos derivados para usar a mesma licença, garantindo que o software permaneça de código aberto (GPL, AGPL).
- Licenças copyleft fracas: Exigem modificações de fonte aberta no componente, mas permitem o uso proprietário (LGPL, MPL).
Licenças comuns de código aberto
Você examinou as licenças populares e suas principais características:
Licenças permissivas:
- Licença MIT: Licença permissiva mais simples que requer apenas atribuição, maximizando a adoção e o uso comercial.
- Licença Apache 2.0: Licença permissiva com concessões explícitas de patentes e extinção defensiva, proporcionando clareza de patente.
- Licenças BSD: Semelhante ao MIT, com 3-Clause BSD adicionando restrições de uso de nome para proteção de marca registrada.
Licenças copyleft fortes:
- GPL v2 e v3: Exigir que os trabalhos derivados sejam licenciados pela GPL e distribuir código-fonte com binários; A GPL v3 adiciona proteção de patentes e melhorias de compatibilidade internacional.
- AGPL: Estende a GPL v3 com provisão de uso de rede exigindo divulgação de fonte para ofertas de SaaS.
Licenças copyleft fracas:
- LGPL: Permite a ligação a bibliotecas a partir de aplicações proprietárias, ao mesmo tempo que requer modificações na própria biblioteca para ser de código aberto.
- MPL 2.0: Fornece copyleft no nível de arquivo, exigindo divulgação de fonte apenas para arquivos licenciados por MPL, não código proprietário no mesmo aplicativo.
Compatibilidade de licenças:
- Combinações compatíveis: MIT + Apache 2.0, MIT + GPL v3, Apache 2.0 + GPL v3, LGPL + GPL.
- Combinações incompatíveis: GPL v2 + Apache 2.0, GPL + Proprietário, diferentes licenças copyleft combinadas.
Implicações da licença e classificações de risco
Você aprendeu como avaliar os riscos da licença e implementar a conformidade:
Quadro de risco de licença:
- Baixo risco (Verde): Licenças permissivas como MIT, BSD, Apache 2.0 são seguras para qualquer uso comercial.
- Médio risco (Amarelo): Licenças copyleft fracas como LGPL, MPL permitem o uso proprietário com restrições a modificações.
- Alto risco (Vermelho): Fortes licenças copyleft como GPL, AGPL são incompatíveis com a distribuição de software proprietário.
- Risco desconhecido (laranja): Licenças personalizadas ou pouco claras requerem revisão legal antes do uso.
Implicações do software comercial:
- Licenças permissivas: Habilite a distribuição proprietária apenas com requisitos de atribuição.
- Copyleft fraco: Permite o uso de bibliotecas em aplicações proprietárias, mas exige que as modificações feitas às bibliotecas sejam de código aberto.
- Copyleft forte: Obriga que os trabalhos derivados sejam disponibilizados como código aberto, tornando-os incompatíveis com software proprietário.
Considerações sobre propriedade intelectual:
- Proteção IP proprietária: As licenças permissivas preservam o código proprietário; As licenças copyleft requerem divulgação.
- Disposições em matéria de patentes: Apache 2.0 e GPL v3 incluem concessões de patentes explícitas; O MIT/BSD carece de clareza em matéria de patentes.
- Perda de segredos comerciais: A divulgação do código-fonte elimina a proteção contra segredos comerciais.
Implementação de conformidade:
- Inventário de dependência: Mantenha uma lista de materiais abrangente rastreando todos os componentes e versões de código aberto.
- Verificação de compatibilidade de licença: Use ferramentas automatizadas para identificar incompatibilidades de licença.
- Conformidade com a atribuição: Gere arquivos de agregação de licença, inclua nas caixas de diálogo Sobre e mantenha na documentação.
- Disposição do código-fonte: Para licenças copyleft, forneça o código-fonte completo com instruções de compilação.
Segurança da cadeia de valor de software:
- Análise de vulnerabilidades: Analise continuamente as dependências em busca de vulnerabilidades conhecidas usando ferramentas como Snyk, Dependabot ou WhiteSource.
- Mitigação de ataques à cadeia de suprimentos: Verifique assinaturas de pacotes, prefira fontes respeitáveis, use registros privados e fixe versões de dependência.
- Avaliação da qualidade: Avalie o status de manutenção, o tamanho da comunidade, a qualidade da documentação e as práticas de segurança.
Políticas organizacionais:
- Fluxos de trabalho de aprovação: Implemente a avaliação de pré-uso para segurança, licenciamento e qualidade antes de adotar novas dependências.
- Listas de pacotes aprovados: Mantenha listas selecionadas de componentes pré-aprovados que os desenvolvedores podem usar imediatamente.
- Formação de desenvolvedores: Treine desenvolvedores sobre implicações de licença, práticas de segurança e processos de conformidade.
- Monitorização contínua: Rastreie atualizações de dependência, alterações de licença e divulgações de vulnerabilidades.
Principais conclusões
Ao implementar software de código aberto em sua organização, lembre-se destes princípios essenciais:
Adote o código aberto estrategicamente: O código aberto oferece enormes benefícios, incluindo velocidade de desenvolvimento, qualidade, economia de custos e acesso à inovação. Em vez de evitar o código aberto devido a riscos, implemente processos de governança que permitam uma adoção segura.
Conheça as suas dependências: Mantenha inventários abrangentes de todos os componentes de código aberto, incluindo dependências transitivas. Você não pode gerenciar riscos que não conhece, tornando a visibilidade da dependência fundamental para um gerenciamento eficaz de código aberto.
Entenda as implicações da licença: Licenças diferentes têm implicações dramaticamente diferentes para o software comercial. Licenças permissivas como o MIT são seguras para software proprietário; Licenças copyleft como a GPL exigem trabalhos derivados de fonte aberta. Faça corresponder a seleção de licenças ao seu modelo de negócio.
Avalie a compatibilidade da licença: Verifique se as licenças de diferentes componentes podem ser legalmente combinadas. Licenças incompatíveis podem criar problemas legais que exigem remediação dispendiosa, incluindo substituição de componentes ou regravações de código.
Implemente a conformidade automatizada: O rastreamento manual de licenças não é dimensionado para aplicativos modernos com centenas de dependências. Use ferramentas automatizadas para verificação de dependência, deteção de licenças e monitoramento de vulnerabilidades.
Priorize a segurança: As vulnerabilidades de segurança nas dependências afetam seu aplicativo, independentemente de onde elas se originam. Implemente a verificação contínua de vulnerabilidades e estabeleça processos de atualização rápida para patches de segurança críticos.
Gerencie os riscos da cadeia de suprimentos: Além das vulnerabilidades conhecidas, proteja-se contra ataques à cadeia de suprimentos por meio da verificação de pacotes, avaliação da reputação da fonte, registros privados e fixação de dependência.
Controle de equilíbrio com liberdade: Os desenvolvedores precisam de liberdade para usar ferramentas e estruturas modernas. Em vez de bloquear a adoção de código aberto, implemente fluxos de trabalho de aprovação e listas de pacotes aprovados que permitam o uso seguro.
Eduque a sua equipa: A sensibilização dos programadores para as preocupações de licenciamento e segurança é essencial. Os programas de treinamento ajudam os desenvolvedores a tomar boas decisões sobre a seleção de componentes e entender as políticas organizacionais.
Monitorize continuamente: O gerenciamento de código aberto não é uma atividade única. Novas vulnerabilidades são constantemente divulgadas, as licenças às vezes mudam e os projetos podem ser abandonados. O monitoramento contínuo garante conformidade e segurança contínuas.
Ao aplicar esses princípios e implementar práticas sistemáticas de gerenciamento de código aberto, você permite que sua organização aproveite os imensos benefícios do software de código aberto enquanto gerencia com eficácia os riscos de segurança, legais e operacionais.
Mais informações
- Implante aplicativos de código aberto com sua conta gratuita | Microsoft Azure.
- Programa de código aberto da Microsoft | Código aberto da Microsoft.
- Open Source Initiative - A definição de código aberto.
- Escolha uma Licença Open Source.
- Gráfico de dependência do GitHub.
- Verificação de dependência do OWASP.