Introdução às licenças de código aberto

Concluído

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.