JPackage + Spring

HappyJavaDev

Mitglied
Hallo Java Community :),

ich bin im Dschungel der Lizenzen gelandet. Wir möchten eine Software ausliefern (nicht open-source), die mit JPackage in einen nativen Installer konvertiert wurde. Dabei wird die Temurin JVM eingepackt, welche die GPL v2 with Classpath Exception als Lizenz verwendet. Die Applikation selber verwendet Spring Boot, welche die Apache License 2.0 verwendet.

Ich habe gelesen, dass diese Kombination potentiell problematisch ist, aber unter bestimmten Umständen gangbar ist. Gibt es eine Möglichkeit, eine Spring-Boot-App mit JPackage zusammen mit Temurin zu packetieren und auszuliefern? Was ist dabei lizenztechnisch zu beachten?

Ich bin für jede Hilfe dankbar! 🙏
 

KonradN

Super-Moderator
Mitarbeiter
Also bei juristischen Fragen gilt generell: fachkundigen Juristen fragen. Es gibt also Juristen, die sich speziell um solche Fragen kümmern und sich gut auskennen.

Ansonsten ist das kritische Moment der genannten Konstellation die GPL v2 with Classpath Exception und die findet sich z.B. hier:

GPL ist erst einmal kritisch, wenn man es verwendet, da es sehr schnell greift und dann die GPL für Deinen Code erzwingt. Daher ist diese Exception das ganz interessante:
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent modules,
and to copy and distribute the resulting executable under terms of your
choice, provided that you also meet, for each linked independent module,
the terms and conditions of the license of that module. An independent
module is a module which is not derived from or based on this library. If
you modify this library, you may extend this exception to your version of
the library, but you are not obligated to do so. If you do not wish to do
so, delete this exception statement from your version.

Und damit wird - aus meiner nicht juristischen Sicht - Dir das Recht gegeben, Deinen Code damit zu linken (Das wäre aus meiner Sicht der jpackage Aufruf, wobei das vereinfacht dargestellt ist. Je nach Parametern wird Dein Code weiterhin nur als jar mitgegeben. Damit hast Du nicht einmal ein direktes Linken).

Damit ist meine Einschätzung, dass es unkritisch ist, Temurin JDK / jpackage zu nutzen.

Der zweite Part ist dann noch Spring Boot mit Apache License 2.0

Das ist aber ebenso unkritisch. Du solltest aber beachten, was Du so alles weitergeben musst bei einer Redistribution. Also die Lizenzen gut ansehen. Bei Apache Commons 2.0 Wäre das vor allem der Punkt 4
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) 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, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

Also natürlich aufbereiten, dass Du entsprechende Hinweise platzierst und original Sourcen / Quellen der Abhängigkeiten bereit stellen musst. Ich hatte in der Vergangenheit schon Diskussionen gesehen, in wie weit eine Verlinkung ausreicht, also z.B. ein Hinweis auf spring.io oder auf maven repositories.

Also wäre meine Aussage in Kurzform: Ich sehe kein Problem mit den Lizenzen. Aber Du hast sehr wohl die Notwendigkeit, gewisse Formalien einzuhalten. Diese muss man lesen und dann schlicht umsetzen.

Wichtig:
  • Das ist keine juristische Beratung
  • Es bezieht sich nur auf die reine Nutzung der genannten Software. Anpassungen an der Software selbst unterliegt anderen Regeln (Also wenn Du das JDK oder Spring Boot patcht und dann die veränderte Version weiter gibst).
 

HappyJavaDev

Mitglied
Also bei juristischen Fragen gilt generell: fachkundigen Juristen fragen. Es gibt also Juristen, die sich speziell um solche Fragen kümmern und sich gut auskennen.

Hi Konrad, super danke dir! Ich habe mir die Lizenzen jetzt ein zweites und drittes mal im Detail durchgelesen, und komme zu ähnlichen (gleichen?) Schlussfolgerungen wie du. Aber dazu im Folgenden.

Ansonsten ist das kritische Moment der genannten Konstellation die GPL v2 with Classpath Exception und die findet sich z.B. hier:

GPL ist erst einmal kritisch, wenn man es verwendet, da es sehr schnell greift und dann die GPL für Deinen Code erzwingt. Daher ist diese Exception das ganz interessante:


Und damit wird - aus meiner nicht juristischen Sicht - Dir das Recht gegeben, Deinen Code damit zu linken (Das wäre aus meiner Sicht der jpackage Aufruf, wobei das vereinfacht dargestellt ist. Je nach Parametern wird Dein Code weiterhin nur als jar mitgegeben. Damit hast Du nicht einmal ein direktes Linken).

Ja, unser Code wird als JAR mitgeliefert. Genauer gesagt, JPackage erzeugt zwar einen native Installer und nach dem Installieren existiert ein native Wrapper um den Java-Code. Im Installationsverzeichnis liegt das JAR, das der native Wrapper dann verwendet. Bezüglich GPLv2+CE habe ich auch das hier gefunden. Damit ist die eingepackte virtuelle Maschine offenbar kein Problem.

Damit ist meine Einschätzung, dass es unkritisch ist, Temurin JDK / jpackage zu nutzen.

Der zweite Part ist dann noch Spring Boot mit Apache License 2.0

Das ist aber ebenso unkritisch. Du solltest aber beachten, was Du so alles weitergeben musst bei einer Redistribution. Also die Lizenzen gut ansehen. Bei Apache Commons 2.0 Wäre das vor allem der Punkt 4

Im Speziellen sollte unsere Applikation nach meinem Verständnis keine Derivative Work sein, siehe nachfolgendes Zitat, wobei mir nicht 100%ig klar ist, ob das im Sinne von Java, auch dann zutrifft, wenn wir Spring Boot über das POM einbinden (also ob das als "merely link or bind" gilt).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

Also natürlich aufbereiten, dass Du entsprechende Hinweise platzierst und original Sourcen / Quellen der Abhängigkeiten bereit stellen musst. Ich hatte in der Vergangenheit schon Diskussionen gesehen, in wie weit eine Verlinkung ausreicht, also z.B. ein Hinweis auf spring.io oder auf maven repositories.

Dazu habe ich noch eine Unklarheit: Wenn Spring Boot selber eine Library verwendet, die z.B. Apache License verwendet, muss ich dann für alle transitiv verwendeten Libraries ebenfalls einen Lizenztext ausliefern?

Also wäre meine Aussage in Kurzform: Ich sehe kein Problem mit den Lizenzen. Aber Du hast sehr wohl die Notwendigkeit, gewisse Formalien einzuhalten. Diese muss man lesen und dann schlicht umsetzen.

Wichtig:
  • Das ist keine juristische Beratung
  • Es bezieht sich nur auf die reine Nutzung der genannten Software. Anpassungen an der Software selbst unterliegt anderen Regeln (Also wenn Du das JDK oder Spring Boot patcht und dann die veränderte Version weiter gibst).
Ich danke dir vielmals für deine Meinung, du hast mir sehr geholfen! Ich verstehe, dass das keine juristische Beratung ist und sein kann. :)
 

KonradN

Super-Moderator
Mitarbeiter
Dazu habe ich noch eine Unklarheit: Wenn Spring Boot selber eine Library verwendet, die z.B. Apache License verwendet, muss ich dann für alle transitiv verwendeten Libraries ebenfalls einen Lizenztext ausliefern?
Ja, auch transitive Abhängigkeiten müssen (meiner Meinung nach) gelistet werden. In Maven nutze ich gerne dependency:tree um alle Abhängigkeiten aufgelistet zu bekommen. Wobei es da bestimmt auch noch bessere Wege geben könnte aber das ist das, was ich halt gerne nutze.
 

HappyJavaDev

Mitglied
Ja, auch transitive Abhängigkeiten müssen (meiner Meinung nach) gelistet werden. In Maven nutze ich gerne dependency:tree um alle Abhängigkeiten aufgelistet zu bekommen. Wobei es da bestimmt auch noch bessere Wege geben könnte aber das ist das, was ich halt gerne nutze.
Alles klar, super! Das mit dem Dependency-Tree funktioniert definitiv. Zusätzlich dazu kann ich mich daran erinnern, dass ich schon mal ein Tool gesehen habe, das automatisch die Lizenzen extrahiert, wobei mir der Name gerade entfällt. Ich forsche in der Richtung noch ein bisschen nach.
 

Ähnliche Java Themen


Oben