Introdução às licenças de código aberto
As licenças de software livre são contratos legais que definem como o software de software livre pode ser usado, modificado e distribuído. Cada projeto de software livre inclui uma licença que especifica os direitos concedidos aos usuários e quaisquer obrigações que eles devem cumprir. Compreender as licenças é essencial para implementar software livre de maneira legal e segura em contextos organizacionais.
O que as licenças de software livre definem
Uma licença de software livre é um documento legal que acompanha o código-fonte e especifica:
Permissões concedidas
As licenças concedem explicitamente aos usuários certos direitos:
- Direitos de uso: Permissão para usar o software para qualquer finalidade, incluindo aplicativos comerciais.
- Direitos de modificação: Permissão para modificar o código-fonte para atender a necessidades específicas, corrigir bugs ou adicionar recursos.
- Direitos de distribuição: Permissão para compartilhar o software com outras pessoas, no formato original ou modificado.
- Direitos de sublicenciamento: Em alguns casos, a permissão para licenciar o software para outras pessoas em termos diferentes.
Sem uma licença explícita, a lei de direitos autorais proíbe o uso, a modificação ou a distribuição de software. A licença fornece permissão legal para essas atividades.
Obrigações impostas
As licenças normalmente impõem requisitos aos usuários:
- Requisitos de atribuição: Deve preservar avisos de direitos autorais e texto de licença em cópias distribuídas.
- Divulgação do código-fonte: Algumas licenças exigem o fornecimento de código-fonte ao distribuir binários.
- Preservação de licença: Deve incluir o texto da licença com cópias distribuídas.
- Licenciamento de trabalho derivado: Algumas licenças exigem trabalhos derivados para usar a mesma licença (copyleft).
- Concessões de patente: Algumas licenças incluem concessões de patente explícitas ou cláusulas de rescisão defensiva.
Isenção de responsabilidade e garantia
Quase todas as licenças de software livre isentam a responsabilidade e as garantias:
- Sem garantia: O software é fornecido "como está" sem garantias de comercialização, aptidão para fins ou não infração.
- Sem responsabilidade: Autores e detentores de direitos autorais não são responsáveis por danos resultantes do uso de software.
- Risco do usuário: Os usuários aceitam todos os riscos associados ao uso do software.
Esses avisos de isenção de responsabilidade protegem os desenvolvedores de software livre contra a responsabilidade legal, reconhecendo que o software normalmente é fornecido livremente sem compensação.
A definição de software livre
A OSI (Open Source Initiative) mantém a definição autoritativa de software livre que especifica critérios para que as licenças sejam consideradas verdadeiramente de software livre:
Requisitos principais
De acordo com a Definição de Software Livre, as licenças de software livre devem:
Redistribuição gratuita:
- Sem restrições: As licenças não podem impedir que ninguém venda ou forneça o software como parte de uma distribuição agregada.
- Sem royalties: As licenças não podem exigir royalties ou taxas para essas vendas.
Inclusão do código-fonte:
- Disponibilidade: Os programas distribuídos devem incluir o código-fonte ou fornecer instruções claras para obtê-lo sem custo.
- Formulário preferencial: O código-fonte deve estar no formulário preferencial para modificações.
- Sem ofuscação: O código-fonte ofuscado deliberadamente não atende ao requisito.
Trabalhos derivados:
- Modificações permitidas: As licenças devem permitir modificações e trabalhos derivados.
- Mesmos termos: As licenças devem permitir a distribuição de modificações nos mesmos termos do software original.
Integridade do código-fonte do autor:
- Arquivos de patch: As licenças podem exigir modificações para serem distribuídas como arquivos de patch junto com a origem original.
- Nomeação: As licenças podem exigir trabalhos derivados para usar nomes ou números de versão diferentes do original.
Nenhuma discriminação contra pessoas ou grupos:
- Acesso universal: As licenças não podem discriminar qualquer pessoa ou grupo de pessoas.
- Direitos iguais: Todos devem ter os mesmos direitos para usar o software.
Sem discriminação contra campos de esforço:
- Qualquer finalidade: As licenças não podem impedir que o software seja usado em campos específicos, como pesquisa comercial ou genética.
- Uso comercial: As licenças não podem proibir o uso do software em aplicativos comerciais.
Distribuição da licença:
- Aplicativo automático: Os direitos anexados ao programa devem ser aplicados a todos aos quais o programa é redistribuído.
- Nenhuma licença adicional: Os usuários não devem precisar executar licenças adicionais para receber esses direitos.
A licença não deve ser específica para um produto:
- Direitos autônomos: Os direitos não devem depender do programa fazer parte de uma distribuição de software específica.
- Execução independente: Se extraído da distribuição original, o software deverá ter os mesmos direitos.
A licença não deve restringir outros softwares:
- Sem contaminação: As licenças não podem impor restrições a outros softwares distribuídos junto com o software licenciado.
- Agregação permitida: As licenças não podem impedir a distribuição do software junto com o software em licenças diferentes.
A licença deve ser neutra em termos de tecnologia:
- Sem restrições de interface: As licenças não podem exigir tecnologias específicas ou estilos de interface.
- Agnóstico do método de execução: As licenças não devem se importar se o software é executado por meio do clique em ícones, linhas de comando ou interfaces da Web.
Por que esses requisitos importam
A Definição de Software Livre garante que as licenças forneçam liberdade significativa:
Protege a liberdade do usuário: Os requisitos impedem que as licenças imponham restrições ocultas que prejudicariam os princípios de software livre.
Habilita o uso comercial: Ao proibir a discriminação contra campos de esforço, a definição garante que as empresas possam criar produtos usando software de software de software livre.
Promove a compatibilidade: Os requisitos que limitam como as licenças podem afetar outros softwares reduzem problemas de compatibilidade.
Impede a fragmentação: Ao exigir termos razoáveis, a definição impede a proliferação de licenças quase abertas incompatíveis.
Categorias de licenças de software livre
Embora existam muitas licenças de software livre diferentes, elas geralmente se enquadram em duas categorias amplas:
Licenças permissivas
Licenças permissivas impõem requisitos mínimos em trabalhos derivados:
- Características: Permitir a incorporação de código em software proprietário sem exigir que o software proprietário seja de software livre.
- Requisitos: Normalmente, só exigem atribuição (preservando avisos de direitos autorais e texto de licença).
- Uso comercial: Totalmente compatível com o desenvolvimento de software comercial.
- Exemplos: Licença do MIT, Licença do Apache 2.0, Licenças BSD.
Licenças permissivas maximizam a liberdade para os usuários, permitindo que eles criem produtos comerciais de software fechado incorporando código de software livre.
Licenças copyleft
As licenças copyleft exigem trabalhos derivados para usar a mesma licença:
- Características: Verifique se as versões modificadas e os trabalhos derivados permanecem de software livre.
- Requisitos: Exigir a distribuição do código-fonte e o uso da mesma licença para trabalhos derivados.
- Uso comercial: Pode ser usado em software comercial, mas os trabalhos derivados devem ser de software livre.
- Exemplos: Licença Pública Geral GNU (GPL), Licença Pública Geral Menor GNU (LGPL), Licença Pública Mozilla (MPL).
As licenças copyleft priorizam a liberdade do software em vez da liberdade do usuário, garantindo que o software de código aberto permaneça de código aberto, mesmo enquanto evolui.
Copyleft fraca
Algumas licenças ocupam um meio termo:
- Uso permitido da biblioteca: Permitir a vinculação a bibliotecas em aplicativos proprietários sem tornar o código-fonte do aplicativo aberto.
- Restrições de modificação: As modificações na própria biblioteca devem ser de software livre.
- Exemplos: GNU LGPL, Licença Pública da Mozilla.
Licenças copyleft fracas equilibram a promoção do desenvolvimento de código aberto com a possibilidade de uso comercial.
Seleção de licença por projetos
Os projetos de software livre escolhem licenças com base em suas metas:
Maximizando a adoção: Projetos que priorizam a adoção generalizada normalmente escolhem licenças permissivas que não impõem obrigações significativas aos usuários.
Garantindo a liberdade: Os projetos que priorizam a liberdade de software escolhem licenças copyleft que garantem que os trabalhos derivados permaneçam de software livre.
Impedindo bifurcações proprietárias: As licenças copyleft impedem que as empresas criem versões proprietárias de software de software livre.
Proteção de patente: Projetos preocupados com patentes escolhem licenças com concessões explícitas de patente (como Apache 2.0) que fornecem direitos de patente mais claros.
Compatibilidade: Os projetos podem escolher licenças compatíveis com outros softwares dos quais dependem ou querem se integrar.
Várias licenças
Alguns projetos usam várias estratégias de licenciamento:
Licenciamento duplo: Ofereça software em licenças de software livre e comercial, permitindo que os usuários escolham quais termos se aplicam.
Empilhamento de licenças: Componentes diferentes de um projeto podem ter licenças diferentes.
Evolução da licença: Os projetos às vezes alteram licenças ao longo do tempo, embora isso exija contrato de todos os colaboradores.
O paradoxo da transparência
A transparência do código-fonte cria benefícios e riscos de segurança:
Benefícios de segurança da transparência
O código-fonte público permite melhorias de segurança:
- Muitos olhos: Milhares de desenvolvedores podem examinar o código em busca de vulnerabilidades, aumentando a probabilidade de descoberta.
- Divulgação mais rápida: Quando as vulnerabilidades são encontradas, elas podem ser divulgadas e corrigidas publicamente, informando todos os usuários.
- Patches da comunidade: Os desenvolvedores conscientes da segurança contribuem com patches para corrigir vulnerabilidades.
- Capacidade de auditoria: As organizações podem auditar dependências de software livre para problemas de segurança, o que é impossível com o software de origem fechada.
Riscos de segurança de transparência
O código-fonte público também auxilia os invasores:
- Descoberta de vulnerabilidades: Atores mal-intencionados podem analisar o código-fonte para encontrar vulnerabilidades exploráveis.
- Desenvolvimento de exploit: Entender os detalhes da implementação ajuda os invasores a desenvolver exploits.
- Identificação de destino: Os invasores podem identificar quais aplicativos usam versões vulneráveis de componentes de software livre.
- Exploração de dia zero: Os invasores podem descobrir e explorar vulnerabilidades antes de serem divulgadas publicamente.
O saldo
Pesquisas sugerem que a transparência fornece benefícios de segurança líquida:
Lei de Linus: "Com olhos suficientes, todos os bugs são superficiais." A revisão aberta geralmente encontra e corrige vulnerabilidades mais rapidamente do que o desenvolvimento de código fechado.
A obscuridade não é a segurança: Manter o código-fonte em segredo não impede vulnerabilidades, apenas as oculta até que os invasores as descubram.
Divulgação responsável: A comunidade de software livre desenvolveu práticas de divulgação responsável que equilibram a segurança com transparência.
Realidade prática: As violações de segurança mais graves envolvem software de código fechado ou configuração incorreta, não vulnerabilidades de software livre, sugerindo que a transparência não reduz inerentemente a segurança.
Noções básicas sobre licenças de software livre e suas categorias fornece a base para avaliar licenças específicas. A próxima unidade explora as licenças comuns de software livre em detalhes, ajudando você a entender quais termos as licenças populares impõem e como elas diferem.