¿Cuál es la mejor práctica para organizar el “papeleo” de licencias de biblioteca de terceros?

60

Estoy desarrollando un pequeño proyecto de código abierto. La aplicación utiliza muchas bibliotecas de terceros lanzadas con una gama de licencias: Apache, MIT, BSD, LGPL y CDDL.

Cada una de estas licencias tiene sus propios requisitos de "papeleo". Por ejemplo, la licencia de Apache, v2.0 dice:

Si la Obra incluye un archivo de texto "AVISO" como parte de su distribución, cualquier Obra Derivada que usted distribuya debe incluir una copia legible de los avisos de atribución contenidos en dicho archivo AVISO.

La licencia MIT contiene un aviso de copyright y dice:

El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.

La licencia BSD también contiene un aviso de copyright y dice:

Las redistribuciones en forma binaria deben reproducir el aviso de copyright anterior, esta lista de condiciones y el siguiente descargo de responsabilidad en la documentación y / u otros materiales proporcionados con la distribución.

LGPL v.3 dice:

(Debería) notificar de forma destacada con cada copia de la Obra combinada que la Biblioteca se utiliza en ella y que la Biblioteca y su uso están cubiertos por esta Licencia.

Las licencias LGPL y CDDL también requieren el suministro del código fuente junto con una forma binaria de una biblioteca, por lo que la información sobre la forma en que se puede obtener el código fuente debe proporcionarse en algún lugar.

¿Cuál es la mejor práctica para organizar todos estos datos? ¿Debo crear un archivo de texto y copiar el contenido de todos los NOTICEarchivos, licencias MIT y BSD, etc. en ese archivo? ... ¿o debería crear un directorio separado para cada biblioteca y poner todos los datos relacionados con la biblioteca en ese directorio? … ¿o algo mas?

También sería interesante ver ejemplos de este "papeleo" en proyectos publicados.

ACTUALIZAR:

He leído ¿Tiene que incluir un aviso de licencia con cada archivo fuente? , pero no resuelve mi problema. Mi pregunta es sobre las bibliotecas de terceros que se utilizan en un proyecto, y esa pregunta es sobre los encabezados en el propio código fuente del proyecto.

Alexey
fuente

Respuestas:

63

Primero, el descargo de responsabilidad estándar: IANAL pero un extraño aleatorio.

He estado empaquetando una aplicación AGPL (*) recientemente. Utiliza bibliotecas de terceros distribuidas bajo licencias jQuery, MIT, BSD (y algunas otras). Así es como he procedido.

Mis intenciones principales cuando diseñé esto fueron: cumplir y ser justo . Mientras que el primero debería ser suficiente, el segundo asegura que quien intente demandarme por no hacerlo 100% correcto tiene que admitir que he hecho las cosas de buena fe.

1) Archivos de origen: todos mis archivos tienen el encabezado AGPL. Todos los archivos de terceros se dejan (en su mayoría) sin modificar y, por lo tanto, incluyen su propio encabezado de licencia.

2) LICENCE.txt, en la raíz del paquete, contiene el texto de la licencia AGPL (como se explica en la sección "Cómo aplicar estos términos a sus nuevos programas").

3) Un archivo de licencia secundario, al que llamé LICENSE-3RD-PARTY.txt, también ubicado en la raíz del paquete, contiene copias literales de TODAS las licencias. Para cada licencia, un encabezado indica qué licencia es y a qué parte se aplica. También incluyo el nombre de los titulares de los derechos de autor aquí; luego los reutilizo en otro lugar, por lo que vale la pena el esfuerzo.

-----------------------------------------------------------------------------
                        The MIT License (MIT)
        applies to: 
        - AJAX Upload, Copyright (c) Andrew Valums
        - jQuery hashchange event, Copyright (c) 2010 "Cowboy" Ben Alman
        - jquery.hotkeys, Copyright (c) 2010 John Resig
-----------------------------------------------------------------------------

Permission is hereby granted, free of charge [...]

4) README.txt, también en la raíz, explica que el software es AGPL (vea LICENSE.txt) y usa bibliotecas de terceros que se distribuyen bajo sus propios términos (vea LICENSE-3RD-PARTY.txt)

5) En la documentación en línea, tengo una página de Licencia que repite la información del archivo Léame: mi software es AGPL y utiliza componentes de terceros que son BSD / MIT / [...]. He decidido mantener esta página más limpia y legible, por lo tanto, solo se proporciona el nombre de la licencia, con un enlace al texto completo y el nombre de los titulares de los derechos de autor con un enlace a su propio sitio web.

jQuery
    Copyright 2013 jQuery Foundation and other contributors
    http://jquery.com
    MIT License
Data Driven Documents (D3)
    Copyright (c) 2013, Michael Bostock    <-- link to personal website, if any
    http://d3js.org                        <-- link to software website
    BSD-like license                       <-- link to license full text
[...]

6) También en la documentación en línea, tengo una página de Créditos , donde enumero los principales contribuyentes directos e indirectos. Por ejemplo, he citado el grupo PostgreSQL, aunque PostgreSQL no está incluido en la descarga, pero lo necesita para ejecutar el software. Este sería un buen lugar para colocar todos los reconocimientos requeridos o deseados por los autores de herramientas / bibliotecas de terceros / etc.

7) Dentro del propio software, la lista de bibliotecas junto con la licencia y los titulares de los derechos de autor se repite en el cuadro de diálogo Acerca de.

Para abordar sus preguntas específicas con respecto a la inclusión del código fuente y el diseño del archivo:

  • generalmente se acepta que solo se vincule al código fuente completo de paquetes de terceros. Consulte cada licencia específica para estar seguro, pero en mi humilde opinión, proporcionar el enlace debería ser suficiente. Por ejemplo, si usa una versión reducida de una biblioteca, puede proporcionar el enlace a la descarga estándar y estar bien.

  • a menos que el componente de terceros exija explícitamente que las distribuciones mantengan el diseño del archivo idéntico, puede reorganizar las cosas como desee. Imagine que usa bibliotecas web, que tienen un directorio css / y js /, puede fusionarlos en un solo directorio lib /, que contiene css / y js / combinados, o incluso dispersarlos por todo el árbol de origen: usted elige.

Y como nota final, lo haría más de comentaristas de bienvenida que agitar una mano diciendo "que está haciendo esta mal" y / o "también debe hacer que ".

(*) Esto no pretende ser un enlace de spam, sino solo para responder la parte de la pregunta "por favor proporcione ejemplos". Siéntase libre, queridos mods, para borrar este enlace si esto va en contra de las reglas.

hertzsprung
fuente
2
Gracias por una gran respuesta! Es exactamente el tipo de información que estoy buscando. Todavía no lo aceptaré para ver si otras personas tienen algo que decir.
Alexey
8
Para aquellos que vendrán aquí más tarde, FireFox tiene un documento similar al LICENSE-3RD-PARTY.txtarchivo descrito en esta respuesta. (Haga clic Licensing Informationen el Aboutcuadro). También hay un documento similar en Google Chrome.
Alexey
1
Aquí hay un documento similar que enumera el software de terceros utilizado por IntelliJ IDEA: confluence.jetbrains.com/display/IDEADEV/…
Alexey