¿Tiene que incluir un aviso de licencia con cada archivo fuente?

111

He estado buscando varias licencias que puedo usar para un proyecto de código abierto mío, pero todos los proyectos que he visto, con todo tipo de licencias, parecen tener un tamaño gigante y desagradable (en mi opinión) aviso en cada archivo fuente que indica que el archivo está listado bajo una licencia determinada. No creo que haya encontrado un proyecto de fuente única que no sea de dominio público y que no tenga un aviso como ese.

Esto parece una pérdida de tiempo y espacio de archivos. Mi plan es poner @licensey @authoretiquetas en mis proyectos, pero no veo por qué tengo que enumerar un aviso tan gigante en cada archivo individual si no quiero hacer mi código de dominio público.

¿Hay alguna razón por la que quisiera incluir tal aviso en mis proyectos, o simplemente incluir un aviso en READMEy una @licenseetiqueta sería lo suficientemente bueno? ¿Afecta esto a la regla "claramente establecida" de la mayoría de las licencias, o es simplemente una exageración para que la gente no discuta?

RétroX
fuente
10
Su editor debe permitirle plegar / ocultar la licencia en 1 línea.
Pubby
1
Siendo realistas, si alguien roba su código, cambia el nombre de una variable y elimina los derechos de autor, ¿un tribunal consideraría estos 2 archivos idénticos?
NoChance
55
@Emmad: No, un tribunal no diría que son idénticos. (Pero podrían ser "esencialmente idénticos"). Sí, un tribunal diría que es una infracción de derechos de autor.
Andrew Dalke
También: opensource.stackexchange.com/a/322/7022
Ioannis Filippidis

Respuestas:

39

Según tengo entendido, la GPLv3 sugiere fuertemente (o tal vez requiera, al menos eso, cómo entiendo el texto Cómo aplicar estos términos a sus nuevos programas , después de su sección 17) un aviso de copyright en cada archivo fuente. Dice

Para hacerlo, adjunte los siguientes avisos al programa. Es más seguro adjuntarlos al inicio de cada archivo fuente para indicar de manera más efectiva la exclusión de la garantía; y cada archivo debe tener al menos la línea de "copyright" y un puntero a donde se encuentra el aviso completo.

<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/>.

Y los proyectos GNU que son propiedad de FSF, como GCC, tienen ese aviso en cada archivo.

También conozco un programa (el sistema CAIA de J.Pitrat) que se ha rechazado en un sitio web de la comunidad de software libre porque no tenía ese aviso en cada archivo.

No soy abogado , pero creo que dicha notificación es prácticamente obligatoria en cada archivo fuente de un programa GPLv3 .

(si usa otra licencia, especialmente una que no sea FSF, lea cuidadosamente sobre cómo aplicarla; YMMV; sin embargo, AFAIK escribir un aviso en cada archivo no perjudicará).

Basile Starynkevitch
fuente
16
No puede ser obligatorio porque hay sistemas, como las imágenes de Smalltalk, que no expresan el código fuente como archivos. Dicen "más seguro" y "debería", no "debe". Lo que recomiendan es una guía fácil de entender con pocas posibilidades de que alguien cometa un error, pero definitivamente no es "prácticamente obligatorio".
Andrew Dalke
Estoy de acuerdo, y dije "archivo fuente" a propósito. En realidad, el sistema de CAIA es un poco como Smalltalk: la imagen está en archivos de datos, y los "archivos fuente" de CAIA que mencioné son archivos C generados. Sin embargo, mi GCC MELT (una rama de GCC, bajo derechos de autor FSF) también está metaprogramado, y me encargo de generar comentarios de aviso de derechos de autor en los archivos C generados (y los pongo en código C & MELT escrito a mano).
Basile Starynkevitch
Punto a favor. Ahora sé un párrafo sobre MELT. En general, es mejor que los archivos generados incluyan el aviso de copyright, ya que de lo contrario es muy difícil "adjuntar" la licencia. Por ejemplo, "yacc" y "lex" están restringidos en lo que pueden hacer.
Andrew Dalke
1
Por experiencia personal: para que un proyecto sea aceptado en Savannah , debe tener una licencia en cada archivo.
Mael
1
Solo para aclarar, de acuerdo a GPL FAQ, #LicenseCopyOnly y #NoticeInSourceFile en el momento de escribir estas líneas, es no necesario incluir el Cómo aplicar ... texto para cada archivo de origen; observe que el lenguaje usa "debería" y no "debe". Sin embargo, recomiendan encarecidamente que sigas esta práctica.
ZeroKnight
37

He visto muchos proyectos que solo mencionan la licencia en el archivo README o en un archivo de LICENCIA o COPIA.

Su software está automáticamente cubierto por derechos de autor, según lo acordado en el derecho internacional. (A menos que trabaje para el gobierno de los EE. UU. O alguna otra organización para la que no se apliquen los derechos de autor).

Si alguien usa su software, debe asegurarse de seguir el acuerdo de licencia o de las restricciones de uso justo sobre lo que puede hacer.

Suponga que esa persona quiere usar uno de los archivos en la distribución de su código, que por supuesto requiere una copia y, por lo tanto, se aplica la ley de derechos de autor. Por defecto, NO tienen el derecho de usar su software bajo la ley de derechos de autor. Solo cuando conocen y siguen las restricciones de la licencia se les permite usarlo.

Entonces, si usan un archivo sin licencia de software, están violando la ley de derechos de autor. Dado que todas las licencias dicen algo como "El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software", están obligados a colocar esa licencia en algún lugar.

Eso puede estar en el archivo mismo, o cuando he usado código como biblioteca pongo las porciones relevantes en su propio directorio y agregué un "LÉAME" o "LICENCIA" en ese subdirectorio.

En resumen, no necesita poner la licencia en cada archivo. Creo que es exagerado. No hay protección legal adicional al hacerlo. Ayuda un poco a un usuario intermedio, pero no mucho.

Creo que la tradición de muchos metadatos basados ​​en comentarios (licencia, fecha de creación de cada función, registro de cambios, etc.) son tradiciones muy antiguas que existen porque son fáciles de hacer y son más un talismán que útiles.

Por ejemplo, la plantilla predeterminada de Eclipse agrega lo que considero metadatos inútiles antes de cada función, que creo que es mucho mejor capturado por el control de versiones. Pero esa práctica es común en muchas tiendas.

Andrew Dalke
fuente
2
Por ejemplo, no veo nada relacionado con las licencias en los archivos fuente de Rails.
Anton Barkovsky
3
Y de los 200 archivos en la biblioteca estándar de Python de nivel superior, solo 34 contienen la palabra "copyright", y solo 4 de ellos son para Python Software Foundation, que controla los derechos de autor de Python.
Andrew Dalke
sí, no creo que los avisos de copyright por archivo vayan a durar ... es demasiado ... simplemente no puede ser el camino del futuro ... piense SECO ... LICENCIA de nivel raíz, y vamos llámalo un día ... creo que casi todo en npm ya lo está haciendo de esta manera
ChaseMoskal
13

El problema es que es muy fácil desagrupar un único archivo de código fuente de su proyecto más grande, como alguien que simplemente revisa, envía un correo electrónico, descarga un archivo, sin el resto que contiene todos los derechos de autor. Y luego ese archivo puede pasar ad infinitum en el tiempo, a enésimas partes que pueden no tener idea de los orígenes de los archivos.

El aviso de derechos de autor en la parte superior recuerda a cualquiera que se encuentre con ese archivo solitario que, de hecho, está protegido por derechos de autor, no es de dominio público, y por lo tanto alguna licencia puede o no estar involucrada en su distribución o uso. Versus dejar que el buscador haga sus propias suposiciones aleatorias.

hotpaw2
fuente
21
¿No es tan fácil desagrupar también a través de copiar y pegar varios fragmentos de un archivo fuente? ¿Entonces que? Este argumento me parece inconsistente.
Travis Griggs
10
Asumir el dominio público para una obra sin aviso de copyright es el problema. Si se encuentra con un archivo sin un aviso de copyright, no debería copiarlo y enviarlo a otros.
Rich Remer
por supuesto, está el problema de que es legal "clonar y poseer" un archivo, hemos puesto código abierto en nuestro repositorio de proyectos directamente porque a veces es difícil solucionar un error fuera del proyecto ascendente, pero no puede esperar ellos para liberar tampoco. No digo que sea una buena idea, pero lo hemos hecho.
xenoterracide
8

No hay una reunión secreta de superpotencias en un búnker subterráneo que diga qué debes poner en cada archivo fuente.

Le deja claro al usuario que este archivo está bajo cualquier licencia y, de hecho, la mayoría del software GPL contiene un breve preámbulo que dice que lea license.txt. Recuerde que los proyectos se dividen y los archivos se reutilizan, por lo que solo poner el mensaje en un solo archivo podría no ser una buena idea.

Si en el improbable caso de que fuera a la corte, podría tener más reclamos si hubiera marcado claramente cada archivo como su trabajo y bajo qué licencia estaba, entonces nadie podría reclamar que pensaban que este archivo en particular no estaba cubierto

Martin Beckett
fuente
6

Casi publiqué una pregunta notablemente similar. Menos sobre molestias y más sobre tecnicismos. TL; DR: Creo que la respuesta es una cuestión de prioridades del autor. Tal vez la intención sería más precisa que las prioridades ...

Creo que está bien hacer referencia a una licencia en su fuente, dependiendo de su definición de "está bien". Acordemos que el término "no acompañado" indica un archivo fuente que es parte de un proyecto que ha sido despiadadamente separado de su base de código amorosa. Dicho archivo contiene una línea como esta:

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

O una línea mucho más fresca como esta:

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

"¡Pero espera!" , exclamas, "¡acabas de decir que el archivo fue separado de su proyecto! ¡Y goodlics.com redirige a un okupador de dominio! ¡Deja de ser trixy!" Tienes razón, dije eso, pero eso podría estar bien, y deja de gritarme. Aquí está mi razonamiento de no abogado:

  • Casi todos los países han aceptado la [sentir la] Convención de Berna, que AFAIK significa que si creas algo, tienes derechos de autor sobre él, punto. No necesita una línea (c) ni ninguna basura como esa, pero esas cosas (más un VCS de terceros como GitHub) hacen que sea más fácil demostrar que lo creó y cuándo lo creó.
  • Por lo tanto, si publica un jugoso código 1337 en línea que creó, tiene derechos de autor. Nadie puede copiarlo (legalmente). Es raro e impactante, lo sé, pero he oído que a veces la gente infringe la ley. Eso todavía es posible.
  • Ese increíble nyancat-bcminer-algo.qbasicarchivo que escribiste y publicaste en LiveJournal es, lo creas o no, no es de dominio público. No, a menos que digas que es de dominio público. Por defecto es tuyo y solo tuyo. Es ... preciosa . (Al menos por más de 25-50 años, a menos que seas Disney).
  • Las personas convencionalmente comunican esta intención (haciendo que algunos o todos los derechos no sean tuyos y solo tuyos) a través de licencias, pero debes anunciar esa intención; es opt-in opt-out (HAHA GET IT? optar por optar por su copyright? IMPRESIONANTE). Consigue tus boletos, ¡ya casi llegamos!
  • Si está bien que los archivos no acompañados mencionados anteriormente sean de dominio privado, es decir, que no se puedan copiar legalmente, entonces usar una referencia potencialmente rota está perfectamente bien. Sin embargo, si no está bien , creo que debe incluir el texto de la licencia en cada archivo fuente. De esta manera, los archivos no acompañados están todavía seguros de ser autorizada la forma en que prioriti-- intención . Si, eso está mejor.

Este razonamiento hace dos supuestos épicos y probablemente inválidos:

  • Una referencia de licencia "rota" recurre al comportamiento predeterminado (con derechos de autor), que puede no ser una suposición válida.
  • El sitio en el que publicó no tiene algún tipo de política de publicación (como StackExchange) que haga que todo sea de dominio público.

Gracias por viajar en las vías aéreas de cerebro de mono.

Descargo de responsabilidad: esto me parece lógico porque estoy 90% seguro de que estoy 100% equivocado.

Josh
fuente
6

Hay una diferencia entre licencia y preámbulo .

En algunos de mis proyectos estoy usando la Licencia Pública General de GNU, Versión 3.0 . La GNU GPL hace necesario tener un preámbulo en cada archivo de código fuente:

El preámbulo y las instrucciones son partes integrales de la GNU GPL y no pueden omitirse.

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

Entonces, esto es lo que hago:

1. Agregar License.txt

Para seguir las reglas, puse un LICENCE.txt en la raíz del repositorio de mi proyecto. GitHub también sugiere esto (consulte " Dónde vive la licencia" ).

2. Agregar preámbulo usando plegado automático

A continuación, incluyo el preámbulo de GPL en la parte superior de cada archivo de código fuente PERO para que no moleste, lo oculto en el IDE. La mayoría de los IDE tienen una función para plegar automáticamente los bloques de código. NetBeans tiene soporte para Custom Code Folding y WebStorm también admite comentarios plegables .

Así es como se ve:

//<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.');

Creo que este es un muy buen compromiso entre comodidad y seguridad legal.

Si tiene muchos proyectos en los que necesita agregar una licencia, entonces http://www.addalicense.com/ podría ser de ayuda.

Tenga en cuenta: Mi consejo se refiere a GPLv3. Otros tipos de licencia pueden no requerir un preámbulo.

Benny Neugebauer
fuente
77
«La GNU GPL hace necesario tener un preámbulo en cada archivo de código fuente:» No lo tiene. La parte que citó simplemente le impide eliminar el preámbulo del LICENSEarchivo, es decir, no puede alterar el texto de la GPL soltándolo.
Andrea Lazzarotto
6

Hay otra forma práctica que aún no se menciona aquí.

SPDX-License-Identifieretiqueta. https://spdx.org/using-spdx

Al usarlo, su "plantilla legal" en cada encabezado de archivo fuente se reduce a solo dos líneas:

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

Además, las personas que automatizan los análisis de la cadena de suministro de software estarán agradecidos por su apego a un estándar común de descripción de licencia legible por máquina.

ulidtko
fuente