Mein Kunde beauftragte mich mit der Codeüberprüfung einer Android-App, die von einem Drittanbieter für ihn entwickelt wurde. Im Rahmen meiner Überprüfung habe ich die Lizenzbedingungen der verwendeten Open-Source-Bibliotheken überprüft. Die meisten verwendeten
Mein Kunde möchte aus kommerziellen Gründen Lizenzen im Copyleft-Stil vermeiden und so habe ich die Bibliothek als unbrauchbar gekennzeichnet. Der Lieferant war verständlicherweise nicht begeistert von der damit verbundenen Überarbeitung und bat um eine Erklärung und idealerweise um eine Möglichkeit, die Bibliothek im Rahmen der Lizenz zu verwenden. Bei näherer Betrachtung bin ich zu der Überzeugung gelangt, dass es, wenn Sie die Bedenken meines Kunden teilen,
Die GNU LGPL
Als ich vor Jahren das erste Mal mit der LGPL in Berührung kam, wurde sie mir als "die GPL, ohne die Verpflichtung, Ihren Quellcode zu veröffentlichen" erklärt. Die tatsächlichen Lizenzbedingungen sind jedoch etwas restriktiver. Die LGPL ist ein Zusatz zur
Ich habe diesen Abschnitt folgendermaßen gelesen:
Sie können ein Kombiniertes Werk unter Bedingungen Ihrer Wahl übertragen, die [...] wenn Sie auch führen Sie jeden der folgenden Schritte aus: a) [vollständige Namensnennung] b) [fügen Sie eine Kopie der Lizenz bei] c) [wenn Sie Copyright-Hinweise anzeigen, müssen Sie die lizenzierte Bibliothek erwähnen] d) Führen Sie einen der folgenden Schritte aus: 0) [bieten dem Benutzer die Möglichkeit, Ihre Anwendung neu zu erstellen oder neu zu verknüpfen eine modifizierte Version der Bibliothek] 1) [Verwenden Sie die Laufzeitverknüpfung mit einer bereits auf dem System vorhandenen Kopie, und erlauben Sie der Benutzer, um diese Kopie zu ersetzen] e) [stellen Sie klare Anweisungen zur Verfügung, wie Sie Ihre Anwendung neu erstellen oder neu verknüpfen können, wenn des vorherigen Punktes]
Die LGPL unter Android
Eine Android-App kann zwei Arten von Bibliotheken verwenden: Java-Bibliotheken und native Bibliotheken. Beide stoßen auf das gleiche Problem mit der LGPL.
Das APK-Dateiformat für Android-Apps ist ein einzelnes, digital signiertes Paket. Es enthält direkt native Bibliotheken, während Java-Bibliotheken zusammen mit Ihrem eigenen Bytecode in die dex-Datei gepackt werden. Android hat keine Möglichkeit, gemeinsam genutzte Bibliotheken außerhalb Ihrer APK in das System zu installieren, was (d)(1) als Option ausschließt. Bleibt also (d)(0). Die Bibliothek austauschbar zu machen, ist nicht das Problem. Es ist vielleicht nicht die einfachste Sache, aber ich bin sicher, dass es einen Weg gibt, beide Arten von Bibliotheken zu ermöglichen.
Bleibt noch die digitale Signatur, und hier liegt der Knackpunkt. Jeder Benutzer, der die LGPL-lizenzierte Bibliothek in Ihrer App ersetzt, muss seine geänderte APK-Datei digital signieren. Sie können Ihren Code-Signaturschlüssel nicht veröffentlichen, so dass er mit einem anderen Schlüssel signieren muss. Dadurch wird die Kompatibilität der Signaturen unterbrochen, wodurch Updates und benutzerdefinierte Berechtigungen unterbrochen werden und gemeinsame Einstellungen und Erweiterungsdateien unzugänglich werden. Es kann daher argumentiert werden, dass eine solche APK-Datei nicht anstelle der Original-App verwendet werden kann und somit gegen die Lizenz verstößt.
Kurz gesagt
Die GNU Lesser General Public License stellt sicher, dass ein Benutzer die Freiheit hat, eine so lizenzierte Bibliothek, die von Ihrer Anwendung verwendet wird, zu verändern, selbst wenn Ihre Anwendung selbst Closed Source ist. Die Anforderungen an die Verpackung und Signatur von Android-Apps sind so hoch, dass es meiner Meinung nach unmöglich ist, die Lizenz einzuhalten, wenn Sie eine LGPL-lizenzierte Bibliothek in einer quelloffenen Android-App verwenden.
Verfasst von

Barend Garvelink
Unsere Ideen
Weitere Blogs
Contact



