Puoi usare una licenza open source meno restrittiva di quella di cui dispone la tua dipendenza?

Aug 17 2020

Senza perdita di generalità, supponiamo di avere un progetto Java open source con Gradle come sistema di compilazione e di voler aggiungere la licenza MIT ad esso. Considera i casi:

Caso 1. Dal file build.gradle si dichiara una dipendenza su JUnit5 che è concesso in licenza con Eclipse Public License - v 2.0. Esegui alcuni test con esso in una cartella di test e tutto ciò insieme a una cartella src viene caricato su GitHub. Il tuo progetto può essere concesso in licenza con MIT? Inoltre, creerai un pacchetto con il tuo progetto, ma i test JUnit5 non saranno inclusi in esso.

Caso 2. Dal file build.gradle si declina una dipendenza dalle annotazioni java da JetBrains, che è concesso in licenza con Apache License 2.0. Il tuo progetto può essere concesso in licenza con MIT? Inoltre, creerai un pacchetto con il tuo progetto e desideri che i dipendenti visualizzino le annotazioni sul tuo codice, ma non sei preoccupato se possono utilizzare le annotazioni nel loro codice.

TL; DR: Capisco che se copi e incolli i file di un progetto puoi ridistribuirlo solo con licenze compatibili, ma lo stesso vale se dipendi solo da loro tramite i pacchetti Maven / Gradle e il pacchetto del progetto prodotto non li conterrà?

Risposte

1 BartvanIngenSchenau Aug 18 2020 at 17:18

Quando dichiari una dipendenza dal pacchetto X, ci sono due possibilità

  1. Il pacchetto X ha una forte licenza copyleft, come la GPL o AGPL: queste licenze hanno il requisito che l'applicazione binaria finale sia concessa in licenza rispettivamente sotto la licenza GPL o AGPL. Di conseguenza, mettono una restrizione sulle licenze che puoi scegliere per il tuo codice.

    Qualsiasi build distribuita che contiene il pacchetto X deve essere concessa in licenza con la stessa licenza del pacchetto X. Se non ci sono build senza pacchetto X, è meglio concedere in licenza anche il codice sorgente con la stessa licenza. Se hai anche build senza pacchetto X, puoi scegliere una licenza compatibile per il tuo codice sorgente.

  2. Il pacchetto X ha qualsiasi altra licenza: queste licenze non estendono il loro ambito oltre i file che sono esplicitamente concessi in licenza con quella licenza e quindi non pongono alcuna restrizione alle licenze che puoi scegliere per il tuo codice.

    In questo caso, puoi utilizzare una licenza open source meno restrittiva, una licenza open source più restrittiva o anche una licenza closed-source compatibile.

Entrambi i casi menzionati (JUnit5 e java-annotations) riguardano le licenze nella seconda categoria e quindi non influenzano le scelte di licenza che hai per il tuo codice.