¿Cuál es la mejor práctica para organizar el "papeleo" de las licencias de bibliotecas de terceros?

53

Estoy desarrollando un pequeño proyecto de código abierto. La aplicación utiliza muchas bibliotecas de terceros lanzadas con una variedad 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 el Trabajo incluye un archivo de texto "AVISO" como parte de su distribución,   Entonces, cualquier trabajo derivado que usted distribuya debe incluir un documento legible.   copia de los avisos de atribución contenidos en dicho archivo de NOTICE.

La licencia MIT contiene un aviso de copyright y dice:

  

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

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

  

Las redistribuciones en formato binario deben reproducir el copyright anterior.   Aviso, esta lista de condiciones y el siguiente descargo de responsabilidad en el   Documentación y / u otros materiales proporcionados con la distribución.

LGPL v.3 dice:

  

(Debes) dar un aviso prominente con cada copia del Trabajo Combinado   que la Biblioteca se utiliza en ella y que la Biblioteca y su uso son   cubierto 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 archivos NOTICE , MIT y BSD, etc. en ese archivo? ... o debo crear un directorio separado para cada biblioteca y poner todos los datos relacionados con la biblioteca en ese directorio? … O algo más?

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

ACTUALIZAR :

He leído ¿Tiene que incluir un aviso de licencia en cada archivo fuente? , pero no es así. abordar 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.

    
pregunta Alexey 02.04.2014 - 11:07

1 respuesta

55

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

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

Mis principales intenciones cuando diseñé esto fueron: ser compatible y ser justo . Si bien el primero debería ser suficiente, el segundo garantiza que quienquiera que intente demandarme por no hacerlo correctamente, debe 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) LICENSE.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, que denominé LICENCIA-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í: los reutilizo en otro lugar después, así 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 (ver LICENCIA.txt) y utiliza bibliotecas de terceros que se distribuyen bajo sus propios términos (consulte LICENCIA-3RD-PARTY.txt)

5) En la documentación en línea, tengo una página Licencia que repite la información del archivo léame: mi software es AGPL y utiliza componentes de terceros que son BSD / MIT / [ ...]. Decidí mantener esta página más limpia y más 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 Créditos , donde enumero los contribuyentes principales 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 / etc de terceros.

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

Para responder a sus preguntas específicas sobre 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 los 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 utiliza 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. Imagina que utilizas bibliotecas web, al tener cada una un directorio css / y js /, puedes combinarlas en un único directorio lib /, que contenga css / y js / fusionadas, o incluso dispersarlas alrededor de tu árbol de fuentes: tu elección.

Y como nota final, agradecería más a los comentaristas que agitan una mano diciendo "estás haciendo esto mal" y / o "también debes hacer eso ".

(*) Esto no pretende ser un enlace de spam, sino solo para responder a 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.

    
respondido por el Tibo 02.04.2014 - 14:03

Lea otras preguntas en las etiquetas