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


60

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.

Ognuna di queste licenze ha i propri requisiti di "scartoffie". Ad esempio, la licenza Apache, v2.0 dice:

Se l'Opera include un file di testo "AVVISO" come parte della sua distribuzione, tutte le Opere derivate che distribuisci devono includere una copia leggibile degli avvisi di attribuzione contenuti in tale file AVVISO.

La licenza MIT contiene un avviso sul copyright e dice:

L'avviso di copyright di cui sopra e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.

La licenza BSD contiene anche un avviso sul copyright e dice:

Le ridistribuzioni in forma binaria devono riprodurre la suddetta nota sul copyright, questo elenco di condizioni e la seguente dichiarazione di non responsabilità nella documentazione e / o altri materiali forniti con la distribuzione.

LGPL v.3 dice:

(Dovresti) dare un preavviso di rilievo ad ogni copia dell'opera combinata che la Biblioteca è usata in essa e che la Biblioteca e il suo uso sono coperti da questa Licenza.

Le licenze LGPL e CDDL richiedono anche di fornire il codice sorgente insieme a una forma binaria 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 NOTICEfile, 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.

AGGIORNARE:

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

Risposte:


63

Innanzitutto, il disclaimer standard: IANAL ma uno sconosciuto casuale.

Ho confezione un AGPL applicazione (*) di recente. Utilizza librerie di terze parti distribuite con licenze jQuery, MIT, BSD (e alcune altre). Ecco come ho proceduto.

I miei intenti principali quando ho progettato questo erano: essere conformi ed essere onesti . Mentre il primo dovrebbe essere sufficiente, il secondo assicura che chiunque tenti di denunciarmi per non averlo fatto al 100%, deve ammettere che ho fatto le 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 della licenza.

2) LICENSE.txt, alla 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 alla radice del pacchetto, contiene copie testuali di TUTTE le licenze. Per ogni licenza, un'intestazione indica quale licenza è e a quale parte si applica. Includo anche il nome dei detentori del copyright qui - li riutilizzo da qualche altra parte in seguito quindi ne 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 usa librerie di terze parti che sono distribuite secondo i propri termini (vedi LICENSE-3RD-PARTY.txt)

5) Nella documentazione online, ho una pagina di 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 collegamento al testo completo e il nome dei detentori del copyright con un collegamento 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 di crediti , in cui elenco i principali collaboratori diretti e indiretti. Ad esempio, ho citato il gruppo PostgreSQL, sebbene PostgreSQL non sia 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 delle librerie insieme ai titolari di licenza e copyright, viene ripetuto nella finestra di dialogo Informazioni .

Per rispondere a domande specifiche relative all'inclusione del codice sorgente e al layout dei file:

  • è generalmente accettato il collegamento solo al codice sorgente completo di pacchetti di terze parti. Consultare ogni licenza specifica per essere sicuri, ma l'IMHO che fornisce il collegamento dovrebbe essere sufficiente. Ad esempio, se si utilizza una versione ridotta di una libreria, è possibile fornire il collegamento al download standard ed essere a posto.

  • a meno che il componente di terze parti richieda esplicitamente che le distribuzioni mantengano identico il layout del file, è possibile riorganizzare le cose come si desidera. Immagina di usare le librerie web, avendo ciascuna una directory css / e una js /, puoi unirle insieme in una singola directory lib /, contenente css / e js / uniti, o persino spargerle attorno al tuo albero dei sorgenti - la tua scelta.

E come nota finale, mi sarebbe più che benvenuto commentatori che agitano la mano dicendo "si sta facendo questo sbagliato" e / o "si dovrebbe anche fare quello ".

(*) Questo non intende essere un collegamento di spam, ma solo per rispondere alla parte "si prega di fornire esempi" della domanda. Sentiti libero, cari mod, di cancellare questo link se questo è contro le regole.


2
Grazie per un'ottima risposta! È esattamente il tipo di informazioni che sto cercando. Non lo accetterò ancora per vedere se altre persone hanno qualcosa da dire.
Alexey,

8
Per coloro che verranno qui in seguito, FireFox ha un documento simile al LICENSE-3RD-PARTY.txtfile descritto in questa risposta. (Fare clic Licensing Informationnella Aboutcasella.) Esiste un documento simile anche in Google Chrome.
Alexey,

1
Ecco un documento simile che elenca i software di terze parti utilizzati da IntelliJ IDEA: confluence.jetbrains.com/display/IDEADEV/…
Alexey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.