Você precisa incluir um aviso de licença em todos os arquivos de origem?

111

Eu tenho procurado várias licenças que posso usar para um projeto de código aberto meu, mas todos os projetos que eu vi, com todos os tipos de licenças, parecem ter um gigante e desagradável (na minha opinião) aviso em cada arquivo de origem que afirma que o arquivo está listado sob uma determinada licença. Não acho que encontrei um único projeto de origem que não seja de domínio público e que não tenha um aviso como esse.

Isso parece um desperdício de tempo e espaço no arquivo. Planejo colocar @licensee @authormarcar meus projetos, mas não vejo por que preciso listar um aviso tão gigantesco em cada arquivo individual, se não quero tornar meu código em domínio público.

Existe alguma razão pela qual eu gostaria de incluir esse aviso em meus projetos ou simplesmente incluir um aviso na tag READMEe uma @licensetag seria bom o suficiente? Isso afeta a regra "claramente declarada" da maioria das licenças ou é apenas um exagero para que as pessoas não discutam?

RétroX
fonte
10
Seu editor deve permitir que você dobre / oculte a licença em 1 linha.
Pubby
1
Realisticamente, se alguém mexer no seu código, renomeia uma variável e remove os direitos autorais, um tribunal consideraria esses dois arquivos idênticos?
NoChance
5
@ Emmad: Não, um tribunal não diria que eles são idênticos. (Mas eles podem ser "essencialmente idênticos".) Sim, um tribunal diria que é uma violação de direitos autorais.
Andrew Dalke
Também: opensource.stackexchange.com/a/322/7022
Ioannis Filippidis

Respostas:

39

No meu entendimento, a GPLv3 sugere fortemente (ou talvez exija, pelo menos, como eu entendo o texto Como aplicar esses termos a seus novos programas , após a seção 17) um aviso de direitos autorais em todos os arquivos de origem. Diz

Para fazer isso, anexe os seguintes avisos ao programa. É mais seguro anexá-los ao início de cada arquivo de origem para declarar com mais eficácia a exclusão da garantia; e cada arquivo deve ter pelo menos a linha "copyright" e um ponteiro para onde o aviso completo é encontrado.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year>  <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

E os projetos GNU de propriedade da FSF, como o GCC, têm esse aviso em todos os arquivos.

Também conheço um programa (sistema CAIA da J.Pitrat) que foi recusado em um site da comunidade de software livre porque não tinha esse aviso em todos os arquivos.

Não sou advogado , mas acredito que esse aviso é praticamente obrigatório em todos os arquivos de origem de um programa GPLv3 .

(se você usar outra licença, principalmente uma que não seja da FSF, leia atentamente sobre como aplicá-la; YMMV; no entanto, o AFAIK escrever um aviso em todos os arquivos não prejudicará.)

Basile Starynkevitch
fonte
16
Não pode ser obrigatório, porque existem sistemas, como imagens Smalltalk, que não expressam o código-fonte como arquivos. Eles dizem "mais seguro" e "deveria", não "deve". O que eles recomendam é uma diretriz de fácil entendimento, com poucas chances de alguém cometer um erro, mas definitivamente não é "praticamente obrigatório".
Andrew Dalke
Eu concordo e disse "arquivo de origem" de propósito. Na verdade, o sistema da CAIA é um pouco como o Smalltalk: a imagem está em arquivos de dados e os "arquivos de origem" do CAIA que eu mencionei são arquivos C gerados. No entanto, meu GCC MELT (uma filial do GCC, sob direitos autorais da FSF) também é metaprogramado, e eu cuido de gerar comentários de avisos de direitos autorais em arquivos C gerados (e os coloco no código C & MELT escrito à mão).
Basile Starynkevitch
Ponto tomado. Agora conheço um parágrafo sobre o MELT. Em geral, é melhor que os arquivos gerados incluam o aviso de direitos autorais, pois é muito difícil "anexar" a licença. Por exemplo, "yacc" e "lex" são restritos no que eles podem fazer.
Andrew Dalke
1
Por experiência pessoal: para ter um projeto aceito em Savannah, é necessário ter uma licença em cada arquivo.
Mael 4/17
1
Só para esclarecer, de acordo com o GPL FAQ, #LicenseCopyOnly e #NoticeInSourceFile no momento da redação deste texto, é não necessário para incluir o Como Aplicar ... texto para cada arquivo de origem; observe que o idioma usa "deve" e não "deve". No entanto, eles recomendam fortemente que você siga essa prática.
ZeroKnight 13/07
37

Eu já vi muitos projetos que mencionam apenas a licença no arquivo README ou em um arquivo LICENSE or COPYING.

Seu software é coberto automaticamente por direitos autorais, conforme acordado na lei internacional. (A menos que você esteja trabalhando para o governo dos EUA ou alguma outra organização à qual os direitos autorais não se apliquem.)

Se alguém usa seu software, deve seguir o contrato de licença ou seguir as restrições de uso justo sobre o que pode fazer.

Suponha que a pessoa queira usar um dos arquivos em sua distribuição de código, o que obviamente requer uma cópia e, portanto, a lei de direitos autorais se aplica. Por padrão, eles NÃO têm o direito de usar seu software sob a lei de direitos autorais. É somente quando eles conhecem e seguem as restrições de licença que eles têm permissão para usá-lo.

Portanto, se eles usam um arquivo sem uma licença de software, estão violando a lei de direitos autorais. Como todas as licenças dizem algo como "O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software", eles são obrigados a colocar essa licença em algum lugar.

Isso pode estar no próprio arquivo ou, quando usei o código como biblioteca, coloquei as partes relevantes em seu próprio diretório e adicionei um "README" ou "LICENSE" a esse subdiretório.

Em resumo, você não precisa colocar a licença em cada arquivo. Eu acho que é um exagero. Não há proteção legal extra para isso. Ajuda um usuário a jusante um pouco, mas não muito.

Penso que a tradição de muitos metadados baseados em comentários (licença, data de criação de cada função, changelog etc.) são tradições muito antigas que existem porque são fáceis de fazer e que são mais um talismã do que úteis.

Por exemplo, o modelo padrão do Eclipse adiciona o que considero metadados inúteis antes de cada função, que acho que é muito melhor capturada pelo controle de versão. Mas essa prática é comum em muitas lojas.

Andrew Dalke
fonte
2
Por exemplo, não vejo nada relacionado ao licenciamento nos arquivos de origem do Rails.
Anton Barkovsky
3
E dos 200 arquivos na biblioteca padrão do Python de nível superior, apenas 34 contêm a palavra "copyright", e apenas 4 deles pertencem à Python Software Foundation, que controla os direitos autorais do Python.
Andrew Dalke
sim, acho que os avisos de direitos autorais por arquivo não durarão ... é demais .. simplesmente não pode ser o caminho do futuro .. pense em SECO ... LICENÇA no nível raiz e vamos chame de um dia .. acho que quase tudo na NPM já está fazendo assim
ChaseMoskal
13

O problema é que é muito fácil desagregar um único arquivo de código-fonte de seu projeto maior, como alguém apenas fazendo check-out, enviando um e-mail, baixando um arquivo, sem o restante que contém os direitos autorais completos. E, em seguida, esse arquivo pode ser passado ad-infinitum no tempo, para as enésimas partes que talvez não tenham idéia da origem dos arquivos.

O aviso de direitos autorais na parte superior lembra a todos que encontram esse arquivo solitário que ele é de fato protegido por direitos autorais, e não por domínio público, e, portanto, alguma licença pode ou não estar envolvida em sua distribuição ou uso. Versus, deixando o buscador fazer suas próprias suposições aleatórias.

hotpaw2
fonte
21
Não é tão fácil desagregar por meio de copiar e colar vários fragmentos de um arquivo de origem também? O que então? Este argumento parece inconsistente para mim.
Travis Griggs
10
Assumir domínio público para um trabalho sem aviso de direitos autorais é o problema. Se você encontrar um arquivo sem um aviso de direitos autorais, não deverá copiá-lo e enviá-lo para outras pessoas.
Ricos Remer
é claro que há o problema de "clonar e possuir" um arquivo, nós colocamos o código aberto no repositório do projeto diretamente porque às vezes é difícil corrigir um bug fora do projeto upstream, mas você não pode esperar eles para liberar também. Não estou dizendo que é uma boa ideia, mas já fizemos.
Xenoterracide
8

Não há reunião secreta de superpotências em um abrigo subterrâneo que diga o que você deve colocar em cada arquivo de origem.

Isso deixa claro para o usuário que esse arquivo está sob qualquer licença e, de fato, a maioria dos softwares da GPL contém um pequeno preâmbulo para ler license.txt. Lembre-se de que os projetos são divididos e os arquivos são reutilizados, portanto, apenas colocar a mensagem em um único arquivo pode não ser uma boa ideia.

Se no caso improvável de ir a tribunal, você poderia ter mais reclamações se tivesse marcado claramente cada arquivo como seu trabalho e sob qual licença ele estava - então ninguém poderia afirmar que eles achavam que esse arquivo particular não estava coberto

Martin Beckett
fonte
6

Eu quase postei uma pergunta notavelmente semelhante. Menos sobre aborrecimentos e mais sobre aspectos técnicos. TL; DR: Eu acredito que a resposta é uma questão de prioridades do autor. Talvez a intenção seja mais precisa que as prioridades ...

Eu acredito que não há problema em fazer referência a uma licença em sua fonte, dependendo da sua definição de "ok". Vamos concordar que o termo "desacompanhado" indica um arquivo de origem que faz parte de um projeto que foi implacavelmente separado de sua base de códigos amorosa. Esse arquivo contém uma linha como esta:

# This file is covered by the LICENSING file in the root of this project.

Ou uma linha muito mais legal como esta:

* @license OMGBBQ <http://goodlics.com/bbq>

"Mas espere!" , você exclama: "você acabou de dizer que o arquivo foi separado do projeto! E o goodlics.com é redirecionado para um invasor de domínio! Pare de ser muito trixy!" Você está certa, eu disse isso, mas pode estar tudo bem, e pare de gritar comigo. Aqui está o meu raciocínio de não advogado:

  • Quase todos os países concordaram com a [Convenção de Berna], que AFAIK significa que, se você cria algo, tem direitos autorais, ponto final. Você não precisa de uma linha (c) ou qualquer porcaria assim, mas essas coisas (mais um VCS de terceiros como o GitHub) tornam mais fácil provar que você a criou e quando a criou.
  • Portanto, se você publicar algum código 1337 suculento on-line que você criou, terá direitos autorais. Ninguém pode copiá-lo (legalmente). É raro e chocante, eu sei, mas ouvi dizer que as pessoas infringem a lei algumas vezes. Isso ainda é possível.
  • Esse nyancat-bcminer-algo.qbasicarquivo incrível que você escreveu e postou no LiveJournal é, acredite ou não, não é de domínio público. A menos que você diga que é de domínio público. Por padrão , é seu e somente seu. É ... Precioso . (Pelo menos por 25 a 50 anos ou mais, a menos que você seja da Disney.)
  • As pessoas comunicam convencionalmente essa intenção (tornando alguns ou todos os direitos que não são seus e somente seus) por meio de licenças, mas você precisa anunciar essa intenção; é optar por não participar (HAHA GET IT? optando por não participar de seus direitos autorais? IMPRESSIONANTE). Adquira seus ingressos, estamos quase chegando!
  • Se tudo bem que os arquivos desacompanhados mencionados acima sejam de domínio privado - ou seja, não são legalmente copiáveis, o uso de uma referência potencialmente interrompida é perfeitamente adequado. No entanto, se não estiver tudo bem , acho que você precisa incluir o texto da licença em cada arquivo de origem. Dessa forma, os arquivos não acompanhados ainda tem certeza de ser licenciado da maneira que você prioriti-- destina . Sim, está melhor.

Esse raciocínio faz duas suposições épicas e provavelmente inválidas:

  • Uma referência de licença "quebrada" volta ao comportamento padrão (protegido por direitos autorais), que pode não ser uma suposição válida.
  • O site em que você postou não possui algum tipo de política de postagem (como o StackExchange) que torna tudo público.

Obrigado por pilotar vias aéreas com cérebro de macaco.

Isenção de responsabilidade: Isso me parece lógico: tenho 90% de certeza de que estou 100% errado.

Josh
fonte
6

Há uma diferença entre licença e preâmbulo .

Em alguns dos meus projetos, estou usando a Licença Pública Geral GNU, Versão 3.0 . A GNU GPL torna necessário ter um preâmbulo em cada arquivo de código fonte:

O preâmbulo e as instruções são parte integrante da GNU GPL e não podem ser omitidos.

Fonte: http://www.gnu.org/licenses/gpl-faq.html#GPLOmitPreamble

Então aqui está o que eu faço:

1. Adicione License.txt

Para seguir as regras, coloquei um LICENSE.txt na raiz do repositório do meu projeto. Isso também é sugerido pelo GitHub (consulte " Onde fica a licença" ).

2. Adicione preâmbulo usando dobra automática

Em seguida, incluo o preâmbulo da GPL no topo de cada arquivo de código-fonte, MAS, para dificultar a perturbação, eu o oculto no IDE. A maioria dos IDEs tem um recurso para dobrar automaticamente os blocos de código. O NetBeans também suporta dobragem de código personalizado e o WebStorm também suporta comentários dobráveis .

Então, aqui está como ele se parece:

//<editor-fold desc="Preamble">
/*
 * Company Name
 * Copyright (C) 2016 Company Name
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * ...
 */
//</editor-fold>

console.log('Here is my licensed JavaScript code.');

Penso que este é um compromisso muito bom entre conforto e segurança jurídica.

Se você tiver muitos projetos em que precisa adicionar uma licença, http://www.addalicense.com/ pode ser útil.

Observação: meu conselho se refere à GPLv3. Outros tipos de licença podem não exigir um preâmbulo.

Benny Neugebauer
fonte
7
«A GNU GPL torna necessário ter um preâmbulo em cada arquivo de código fonte:» Não. A parte que você citou apenas impede que você remova o preâmbulo do LICENSEarquivo, ou seja, você não pode alterar o texto da GPL soltando-o.
Andrea Lazzarotto 25/10
6

Há outra maneira prática ainda não mencionada aqui.

SPDX-License-Identifieretiqueta, rótulo, palavra-chave. https://spdx.org/using-spdx

Utilizando-o, seu "gabarito legal" em cada cabeçalho do arquivo de origem reduz para apenas duas linhas:

/* SPDX-License-Identifier: (GPLv3-or-later AND LGPL-2.0-only) WITH bison-exception */
/* Copyright © 1234 Project Author */

Além disso, as pessoas que automatizarem as análises da cadeia de suprimentos de software agradecerão sua adesão a um padrão comum de descrição de licença legível por máquina.

ulidtko
fonte