Declarando várias licenças em um projeto GitHub

28

Durante anos, tenho sido um grande fã de colocar licenças em coisas compartilhadas on-line para facilitar a outras pessoas determinar se e como elas podem reutilizar essas coisas. Antes de o GitHub começar a empurrar gentilmente seus usuários para incluir arquivos LICENSE em seus repositórios, eu realmente não sabia como fazer isso melhor com código - particularmente código compartilhado publicamente no GitHub! - mas tentei fazer bom uso dos arquivos LICENSE desde então.

Agora estou na situação em que trabalhei em um projeto pequeno com outras pessoas, o que exige menção de várias licenças (devido a bibliotecas e códigos de terceiros, além de arquivos que não são de código). Enquanto meus parceiros discutem o assunto de maneira desleixada - foi sugerido que eu “coloque o código on-line como está, ninguém se importará” -, prefiro fazer isso corretamente. O problema é: não sei como se deve mencionar várias licenças (diferentes) no GitHub.

Eu já vi várias soluções diferentes no GitHub, e é por isso que é difícil para mim julgar se essa resposta a uma pergunta um pouco diferente é autoritativa. O que eu gostaria de saber é qual das alternativas a seguir - se houver - é a mais comum ou se existem outras maneiras adicionais de fazer isso.

  1. Crie um único arquivo LICENSE e coloque as descrições de todas as diferentes licenças. ( Perguntas : elas devem ser colocadas em uma ordem específica? Iniciarei o arquivo mencionando os nomes de todas as licenças contidas nela, para uma melhor visão geral)?
  2. Criar um arquivo de licença por licença usado e nomeá-los LICENSE.md, LICENSE.LibNameA.md, LICENSE.AssetsB.mdetc., tal como sugerido na resposta ligada. ( Pergunta : A nomeação basear-se-ia em nomes de projeto? Não em nomes de licença? Se eu usasse mais de uma licença para material de contribuição automática, eu mencionaria todas elas no 'principal' LICENSE.md? Se não, o que eu faria?)
  3. Crie dois arquivos de LICENÇA : um listando a (s) licença (s) para o conteúdo 'principal', ou seja, todos os códigos / ativos que você mesmo criou; um para todos os materiais de terceiros. ( Perguntas como acima : existe um esquema de nomeação específico que alguém usaria e ordem em que listaria os materiais de terceiros?)

Por fim, se eu entendi as várias explicações e projetos do GitHub a respeito de suas APIs de licenças corretamente, apenas o arquivo 'main' LICENSE será levado em consideração ao determinar uma licença de repo (embora eu não tenha conseguido descobrir qual licença seria escolhida se vários foram mencionados).

Kay
fonte
2
Portanto, tenha um README e um ou mais arquivos de LICENÇA. Isso não é ciência de foguetes.
Robert Harvey
4
Em relação à página vinculada: ela não tem nada a ver com a distribuição dos arquivos de licença, mas com a API de licenças do GitHub, que determina / reporta a licença de um repo. Como eu estava perguntando sobre o licenciamento / uso de arquivos LICENSE no GitHub especificamente, não sobre código aberto ou git em geral, a maneira como um projeto de código aberto é 'retratado' para ser licenciado também é relevante. 'Isso não é ciência de foguetes' não é particularmente útil, aliás, esp. não no contexto da minha pergunta focada no GitHub.
Kay
2
Eu poderia sugerir que o seu README possua uma seção sobre licenciamento, afirmando simplesmente que existem várias licenças e informando a cada licença o nome do arquivo de LICENÇA em que ele está.
Erik Eidt
3
@immibis Estou ciente disso e não é de todo que minha pergunta era. Eu estava especificamente pedindo uma resposta sobre 'qualquer maneira que faça mais sentido para os seres humanos' (no: GitHub).
Kay
3
@immibis: "Nenhum compilador irá lê-lo" - a questão é que, estritamente falando, isso não é verdade para o Github. O Github usa uma ferramenta automática para determinar "a" licença aplicada ao conteúdo do repositório. O nome da licença assim determinada será exibido na barra de título do repositório, junto com algumas informações mais gerais que fornecem aos visitantes uma impressão básica do projeto (por exemplo, número de colaboradores e liberações).
OR Mapper

Respostas:

15

Você pode usar qualquer mecanismo para incluir as licenças que desejar, desde que fique claro para o visitante do seu projeto qual licença é aplicável a qual parte do projeto.

Minha preferência seria:

  • Coloque cada biblioteca de terceiros que você usa em um diretório próprio. Este diretório deve conter todos os arquivos que fazem parte da distribuição da biblioteca, incluindo os arquivos de licença e leia-me.
  • No seu próprio arquivo de licença, consulte apenas a licença do seu próprio código
  • No arquivo leia-me do seu projeto, mencione em quais bibliotecas de terceiros você usa e em que licença cada biblioteca é distribuída. Para detalhes completos da licença, consulte o arquivo de licença no diretório da biblioteca.
Bart van Ingen Schenau
fonte
1
Como você lidaria com seu próprio arquivo LICENSE no caso de duplo licenciamento de conteúdo próprio nesse cenário? Ou seja, se você usou licenças diferentes para partes diferentes do projeto (código x arquivos de mídia) ou se quisesse distribuir seu código sob duas (ou mais) licenças de software diferentes? Colocar informações adicionais no README faz muito sentido e é o que eu faria também, mas estou particularmente interessado em como lidar com arquivos LICENSE no GitHub (que, a meu ver, são incentivados a oferecer aos visitantes / espectadores de o projeto uma rápida visão geral).
Kay
1
Se (partes) do meu próprio código tiverem licença dupla, eu adicionaria dois (ou mais) arquivos de licença ao projeto, um para cada licença, e deixaria claro no arquivo leia-me qual licença se aplica nesse caso.
Bart van Ingen Schenau
1
Bart, obrigado por compartilhar como você faria isso - isso é muito mais útil do que alguns dos comentários que recebi. :) Enquanto isso, entrei em contato com o GitHub e deixarei essa pergunta em aberto por enquanto, caso algo saia disso.
Kay
2
Quando você receber uma resposta do Github, poste essas informações como resposta automática a esta pergunta.
Bart van Ingen Schenau
1
Definitivamente vou, se estiver tudo bem com eles, pois pode ser interessante saber para os outros também!
Kay
12

Em uma apresentação dos criadores do SPDX ( slide 12 ), é muito claro:

Conteúdo de LICENSE:

Apache-2.0 OR GPL-2.0-or-later

Você pode adicionar dois arquivos LICENSE adicionais: LICENSE.Apache-2.0e LICENSE.GPL-2.0-or-later.

Em todos os casos, README.mddeve conter um identificador de licença SPDX :

SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

Você pode fazer assim:

## License

This work is dual-licensed under Apache 2.0 and GPL 2.0 (or any later version).
You can choose between one of them if you use this work.

`SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later`

Note isso Apache-2.0 OR GPL-2.0-or-latere Apache-2.0 AND GPL-2.0-or-laterfaz uma grande diferença. O primeiro significa que o usuário pode escolher entre ambos (que é o caso regular!) E o segundo indica que o usuário deve cumprir as duas licenças. Veja também multi-licenciamento na Wikipedia.

Observe que estou usando a nova Lista de licenças SPDX 3.0 (a partir de 28/12/2017 ) aqui. As versões de 2017 tinham GPL-2.0um identificador para a GPL 2.0, mas não estava claro se isso significava "apenas GPL 2.0" ou "GPL 2.0 ou qualquer versão posterior".

koppor
fonte
4

Eventualmente, entrei em contato diretamente com o suporte do GitHub com relação à minha pergunta e eles disseram que não havia problema em citá-los se eu deixasse claro que as respostas eram apenas sugestões, não recomendações.

Nossa equipe não tem nenhuma recomendação específica a oferecer no momento, mas solicitaremos atualizações e atualizações se houver mais alguma coisa para compartilhar!

A resposta original deles tinha o seguinte a oferecer:

Uma sugestão é ter um arquivo de LICENÇA para a maioria do seu código e adicionar o texto das licenças para o restante dos materiais de terceiros no seu arquivo LEIA-ME.

Outra maneira é que cada caminho tenha seu próprio arquivo LICENSE quando fizer sentido. Portanto, se, por exemplo, seu repositório tiver o seguinte caminho: libs / awesome-lib-v2 / você poderá ter libs / awesome-lib-v2 / LICENSE.

Nesse último caso, convém mencionar isso no arquivo README e / ou no arquivo LICENSE em sua raiz.

Você também pode considerar o uso de um arquivo LICENSE na raiz do seu repositório e adicionar subseções para qualquer material, código etc.

Kay
fonte