Oracle semble autoriser tous leurs codes open source liés à Java sous le GPL avec une exception classpath. D'après ce que je comprends, cela semble permettre de combiner ces bibliothèques avec votre propre code dans des produits qui ne doivent pas être couverts par la GPL.
Tout d'abord, je ne suis pas avocat. Mais j'ai étudié de nombreuses licences et je comprends les problèmes les concernant.
Deuxièmement, je sais que c'est une vieille question, mais je pense que c'est toujours un point de confusion et de préoccupation. Si ce n'est pas un sujet de préoccupation, cela devrait l'être. Le choix d'une licence est un gros problème que vous ne pouvez pas changer trivialement en cours de route, surtout si plusieurs contributeurs sont impliqués.
(L) GPL a été écrit avec C/C++ à l'esprit, malheureusement. Il parle de "code source", "code objet", "liaison dynamique", "liaison statique", "compilateurs" et "interpréteur de code objet". Donc, traduire cela pour d'autres langages qui ne suivent pas les mêmes techniques de compilation (comme le bytecode de Java, la compilation juste à temps de Python ou la nature interprétée de Javascript) nécessite quelques suppositions et hypothèses. Lorsque vous parlez de la loi - c'est-à-dire de penser à d'éventuelles affaires judiciaires où deux parties se disputent - ne pas avoir de distinction claire est une MAUVAISE CHOSE.
Un morceau de code sous licence GPL standard est assez simple dans son intention. Toute personne qui utilise ce code devrait diffuser son code à tous les utilisateurs lors de sa distribution ou de sa vente. C'est le virus GPL que Richard Stallman a voulu créer et a fait clairement et proprement.
La LGPL était à l'origine une tentative pour autoriser une "bibliothèque" qui ne serait pas virale. Mais ils voulaient toujours que l'utilisateur final puisse remplacer la bibliothèque par lui-même, d'où la distinction entre la liaison "statique" et "dynamique" - l'utilisateur pourrait passer à une autre bibliothèque liée dynamiquement, de sorte qu'il n'aurait pas besoin de être autorisé comme GPL. Et un lien statique exigeait que l'utilisateur soit GPL. La licence parle en fait de "fichiers d'en-tête", qui sont clairs en C/C++ mais évidemment pas clairs lorsque vous êtes dans les mondes Java, Python, Javascript, etc. Donc, la L ("bibliothèque") des trucs LGPL est au mieux boueuse.
Cela va au cœur du problème. Tout ce qui n'est pas clair est MAUVAIS dans le monde des lois. Si je cherche à construire quelque chose à l'aide de composants GPL ou LGPL, je veux être certain de ma position juridique à l'avenir si j'atterris devant un tribunal. Mais à ce jour, je ne suis pas certain car il n'y a vraiment pas eu de bonnes affaires judiciaires établissant un précédent juridique, seulement des arguments intellectuels sur des forums comme celui-ci.
C'est là que l'exception Classpath est inestimable. Il indique clairement que le code sous la licence est (L) GPL, mais tout en utilisant ce code peut suivre la licence qu'ils souhaitent. Pas de si, de et, ou de mais. Si vous modifiez le code principal (par exemple, en corrigeant des bogues), vous devez toujours publier ces modifications dans le cadre de la GPL. Mais l'utilisation ne vous infecte PAS.
D'un point de vue commercial, je comprends pourquoi certains ne veulent pas toucher le code GPL avec un poteau de 10 '. Le statut juridique n'est pas clair et l'entreprise pourrait être bloquée une décennie plus tard lorsque le précédent juridique sera enfin établi. Ou ils pourraient être coincés devant les tribunaux pendant des années à lutter pour établir le précédent juridique. Quoi qu'il en soit, ils ne veulent tout simplement pas risquer le coût de cette bataille. L'ajout de la clause d'exception Classpath élimine les questions juridiques et évite toute affaire judiciaire (sérieuse) potentielle.
Donc, pour moi, l'exception Classpath est très différente de LGPL. C'est un moyen juridiquement propre de tracer une ligne claire permettant l'utilisation non GPL du code source ou des bibliothèques GPL ou LGPL.
La GPL avec exception classpath se comporte comme LGPL pour la plupart des utilisations.
Cela signifie que vous devez être en mesure d'expédier la source de la bibliothèque sur demande. Cela ne signifie pas que vous devez être en mesure d'expédier votre propre source. Cela arrive signifie que vous n'avez pas à fournir un moyen de remplacer la bibliothèque si vous vous liez statiquement à celle-ci, mais vous ne pouvez pas utiliser de clé publique pour empêcher le remplacement.