Qual è la migliore pratica per organizzare "licenze" di licenze di libreria di terze parti?

53

Sto sviluppando un piccolo progetto open source. L'applicazione utilizza molte librerie di terze parti rilasciate con una gamma di licenze: Apache, MIT, BSD, LGPL e CDDL.

Ciascuna di queste licenze ha i suoi requisiti di "documenti". Ad esempio, la licenza Apache, v2.0 dice:

If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file.

La licenza MIT contiene una nota sul copyright e dice:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

La licenza BSD contiene anche una nota sul copyright e dice:

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

LGPL v.3 dice:

(You should) give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.

Le licenze LGPL e CDDL richiedono anche la fornitura del codice sorgente insieme a un modulo binario di una libreria, quindi le informazioni sul modo in cui è possibile ottenere il codice sorgente dovrebbero essere fornite da qualche parte.

Qual è la migliore pratica per organizzare tutti questi dati? Devo creare un file di testo e copiare il contenuto di tutti i file NOTICE , le licenze MIT e BSD ecc. In quel file? ... o dovrei creare una directory separata per ogni libreria e mettere tutti i dati relativi alla libreria in quella directory? ... o qualcos'altro?

Sarebbe anche interessante vedere esempi di questo "lavoro di ufficio" nei progetti pubblicati.

UPDATE:

Ho letto Devi includere un avviso di licenza con ogni file sorgente? , ma non lo fa indirizzo il mio problema. La mia domanda riguarda le librerie di terze parti utilizzate in un progetto e la domanda riguarda le intestazioni nel codice sorgente del progetto.

    
posta Alexey 02.04.2014 - 11:07
fonte

1 risposta

55

Innanzitutto, la dichiarazione di non responsabilità standard: IANAL ma uno sconosciuto casuale.

Recentemente ho confezionato una AGPL applicazione (*). Usa librerie di terze parti distribuite sotto licenze jQuery, MIT, BSD (e altre). Ecco come ho proceduto.

I miei intenti principali quando ho progettato questo erano: essere conforme e essere corretto . Mentre il primo dovrebbe essere sufficiente, il secondo assicura che chiunque cerchi di farmi causa per non averlo capito al 100% deve ammettere che ho fatto delle cose in buona fede.

1) File sorgente: tutti i miei file hanno l'intestazione AGPL. Tutti i file di terze parti vengono lasciati (per lo più) non modificati e pertanto includono la propria intestazione di licenza.

2) LICENSE.txt, nella radice del pacchetto, contiene il testo della licenza AGPL (come spiegato nella sezione "Come applicare questi termini ai nuovi programmi").

3) Un file di licenza secondario, che ho chiamato LICENSE-3RD-PARTY.txt, anch'esso situato nella radice del pacchetto, contiene copie letterali di TUTTE le licenze. Per ogni licenza, un'intestazione indica quale licenza è e in quale parte si applica. Includo anche il nome dei titolari del copyright qui: li riutilizzerò da qualche altra parte in seguito, quindi vale la pena.

-----------------------------------------------------------------------------
                        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, anche alla radice, spiega che il software è AGPL (vedi LICENSE.txt) e utilizza librerie di terze parti distribuite secondo i loro termini (vedi LICENSE-3RD-PARTY.txt)

5) Nella documentazione online, ho una pagina Licenza che ripete le informazioni dal readme: il mio software è AGPL e utilizza componenti di terze parti che sono BSD / MIT / [ ...]. Ho deciso di mantenere questa pagina più pulita e più leggibile, pertanto viene fornito solo il nome della licenza, con un link al testo completo e il nome dei titolari del copyright con un link al proprio sito 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) Anche nella documentazione online, ho una pagina Credits , in cui elenco i principali contributori diretti e indiretti. Ho citato ad esempio il gruppo PostgreSQL, anche se PostgreSQL non è incluso nel download, ma è necessario per eseguire il software. Questo sarebbe un buon posto per inserire tutti i riconoscimenti richiesti o desiderati dagli autori di strumenti / librerie / ecc. Di terze parti.

7) All'interno del software stesso, l'elenco di librerie insieme alla licenza e ai detentori del copyright viene ripetuto nella finestra di dialogo Informazioni .

Per rispondere alle tue domande specifiche riguardanti l'inclusione del codice sorgente e del layout del file:

  • generalmente si accetta solo il collegamento al codice sorgente completo di pacchetti di terze parti. Consultare ogni licenza specifica per essere sicuro, ma IMHO che fornisce il collegamento dovrebbe essere sufficiente. Ad esempio, se si utilizza una versione minificata di una libreria, è possibile fornire il collegamento al download standard e andare bene.

  • a meno che il componente di terze parti richieda esplicitamente che le distribuzioni mantengano il layout del file identico, puoi riorganizzare le cose come desideri. Immagina di usare le librerie web, avendo ciascuna una directory css / e una js /, puoi unirle insieme in una singola directory lib /, contenente un misto css / e js /, o anche disperdere tutto intorno al tuo albero dei sorgenti, a tua scelta.

E come nota finale, vorrei più che accogliere i commentatori che agitano una mano dicendo "stai facendo questo sbagliato" e / o "dovresti fare anche quello ".

(*) Questo non è inteso come collegamento tramite spam, ma solo per rispondere alla parte "ti preghiamo di fornire esempi" della domanda. Sentiti libero, caro mod, per cancellare questo link se questo è contro le regole.

    
risposta data 02.04.2014 - 14:03
fonte