Automatisierte Lizenzprüfung von installierten Packages

Open-Source-Software ist aus der modernen Entwicklung nicht mehr wegzudenken. Alle unsere Frameworks und CMS basieren auf einer sogenannten Open-Source-Lizenz.
Doch wer externe Pakete einbindet, muss genau darauf achten, welche Lizenzen damit einhergehen. Einige Lizenzen sind untereinander nicht kompatibel oder stellen bestimmte Bedingungen, die eingehalten werden müssen. Basiert beispielsweise die eigene Applikation auf Paketen, die unter der GPL (General Public License) lizenziert sind, unterliegt sie ebenfalls den Bedingungen der GPL (und muss entsprechend mit einer kompatiblen Lizenz veröffentlicht werden.
Wir sind keine Anwält:innen
Lizenzrecht ist ein komplexes Thema. Dieser Blogpost gibt einen technischen Überblick, ersetzt aber keine rechtliche Beratung. Bei Unsicherheiten oder Fragen zur Lizenzkompatibilität empfehlen wir, qualifizierte Rechtsberatung hinzuzuziehen.
Funktionsweise
Als Basis dient das Paket metasyntactical/composer-plugin-license-check. Dieses ermöglicht die Konfiguration von erlaubten Lizenzen.
"extra": {
"metasyntactical/composer-plugin-license-check": {
"allow-list": [
"Apache-2.0",
"BSD-2-Clause",
"BSD-3-Clause",
"GPL-2.0+",
"GPL-2.0-or-later",
"GPL-3.0-or-later",
"GPL-2.0",
"GPL-3.0",
"LGPL-3.0-or-later",
"MIT"
],
"allowed-packages": {
"some-special/plugin": "*"
}
}
},
Integration in die CI-Pipeline
Erst die Automatisierung der Prüfungen ermöglicht es, den vollen Mehrwert auszuschöpfen. Die CI-Pipeline via GitLab wird bereits für automatisierte Checks des Codes und für Deployments genutzt.
Mit wenigen Zeilen lässt sich diese so erweitern, dass auch zukünftig die Lizenzen geprüft werden.
"scripts": {
"pre-autoload-dump": [
"@check-license"
],
"check": [
"@cs",
"@phpstan",
"@check-license"
],
"check-license": [
"@composer check-licenses | grep ' no' | grep -v 'no (explicitly allowed)' && { echo \"Error: Found invalid licenses!\"; exit 1; } || echo \"Found only valid licenses!\"; exit 0"
]
}
Erklärung
Der Befehl composer check-license analysiert den zuvor beschriebenen Command und identifiziert potenzielle Pakete mit nicht erlaubten Lizenzen.
Als Teil der pre-autoload-dump-Routine wird der Check automatisch durchgeführt, wenn composer install oder composer update aufgerufen wird - sowohl bei lokalen Installationen als auch in automatisierten Deployment-Pipelines.
Zusätzlich ist die Prüfung in check-Routine enthalten, die auch alle anderen Code Prüfungen enthält.
Lizenzen anderer Paketen
Dieser Blogbeitrag behandelt ausschließlich die Lizenzprüfung von PHP-Paketen mit Composer. Für JavaScript-/NPM-Projekte stehen alternative Tools wie license-checker-rseidelsohn zur Verfügung.