Hallo Leute
Ich habe ein Paket geschrieben das ich nun gerne auf pypi hochladen möchte. In diesem Paket verwende ist das ast Modul, allerdings mit ein paar Anpassungen am Quellcode. Wie mache ich das mit den Lizenzen richtig, so das ich es veröffentlichen kann? Auf was muss ich achten?
Ändern von lizenziertem Code
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Fire Spike: Ist es denn notwendig tatsächlich ein verändertes `ast`-Modul zu verwenden? Kann man das nicht dynamischer Lösen, entweder über eine Fassade oder zur Not per „monkey patching“?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
- DeaD_EyE
- User
- Beiträge: 1244
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
https://docs.python.org/3/license.html# ... ing-python
Starting with Python 3.8.6, examples, recipes, and other code in the documentation are dual licensed under the PSF License Agreement and the Zero-Clause BSD license.
Ich tendiere zur BSD0-Lizenz.
Starting with Python 3.8.6, examples, recipes, and other code in the documentation are dual licensed under the PSF License Agreement and the Zero-Clause BSD license.
Ich tendiere zur BSD0-Lizenz.
DeppL:Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
Der Vorteil dieser Lizenz ist, dass folgender Satz fehlt:Es wird hiermit die Erlaubnis erteilt, diese Software für beliebige Zwecke zu verwenden, zu kopieren, zu modifizieren und/oder zu vertreiben.
mit oder ohne Gebühr wird hiermit gewährt.
DIE SOFTWARE WIRD IM VORLIEGENDEN ZUSTAND ZUR VERFÜGUNG GESTELLT, UND DER AUTOR LEHNT JEDE GARANTIE IN BEZUG AUF DIESE SOFTWARE AB
IN BEZUG AUF DIESE SOFTWARE, EINSCHLIESSLICH ALLER STILLSCHWEIGENDEN GARANTIEN DER MARKTGÄNGIGKEIT
UND EIGNUNG. DER AUTOR IST IN KEINEM FALL HAFTBAR FÜR BESONDERE, DIREKTE,
INDIREKTE SCHÄDEN ODER FOLGESCHÄDEN ODER SCHÄDEN JEGLICHER ART, DIE AUS
NUTZUNGSAUSFALL, DATENVERLUST ODER ENTGANGENEM GEWINN, GLEICHGÜLTIG OB AUS VERTRAG, FAHRLÄSSIGKEIT ODER
FAHRLÄSSIGKEIT ODER ANDEREN UNERLAUBTEN HANDLUNGEN, DIE SICH AUS ODER IN VERBINDUNG MIT DER NUTZUNG ODER
LEISTUNG DIESER SOFTWARE ENTSTEHEN.
Übersetzt mit www.DeepL.com/Translator (kostenlose Version)
Heißt, man muss nicht in jeder Datei diesen Text einfügen, sondern kann das an einer zentralen Stelle machen und bei PyPi muss man das eh mit angeben, welche Lizenz verwendet wird.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
-
- User
- Beiträge: 329
- Registriert: Montag 13. Mai 2019, 16:05
- Wohnort: Erde
@__blackjack__
Nein, da ich an manchen Orten nur strings ersetze.
@DeaD_EyE
Ich verstehe nicht ganz was du mir damit sagen willst.
Nein, da ich an manchen Orten nur strings ersetze.
@DeaD_EyE
Ich verstehe nicht ganz was du mir damit sagen willst.
-
- User
- Beiträge: 329
- Registriert: Montag 13. Mai 2019, 16:05
- Wohnort: Erde
Wenn ich das richtig verstehe muss ich die Lizenz einfach in die Lizenzdatei schreiben und dann ist das ganze Projekt betroffen. Inklusive dem ast Modul. Die Psf müsste ich an mich selbst anpassen. Stimmt das?
Alles richtig würdest du machen, wenn du versuchst deine Änderungen am AST bei Python zu Contributen.Fire Spike hat geschrieben: Donnerstag 31. März 2022, 12:09 Hallo Leute
Ich habe ein Paket geschrieben das ich nun gerne auf pypi hochladen möchte. In diesem Paket verwende ist das ast Modul, allerdings mit ein paar Anpassungen am Quellcode. Wie mache ich das mit den Lizenzen richtig, so das ich es veröffentlichen kann? Auf was muss ich achten?
Cold Forks sind immer scheiße, die bedeuten nur einen erhöhten Arbeitsaufwand bei dir, da du alle Fixes im Orginalmodule bei dir nachtragen musst!
Das habe ich beruflich ein paar mal machen dürfen, lohnt nicht und wird zunehmend Komplexer über die Zeit. Nichts machen ist auch keine Lösung, da sich die Leute drauf verlassen, dass dein Modul keine Security Schwächen hat und pikiert reagieren, wenn ein CVE für AST bei dir genau so funktioniert.
Am besten ist es also deine Änderungen am AST direkt ins Python zu bekommen, vielleicht nutzen die ja auch anderen und dein Lizenzproblem löst sich nebenbei in Luft aus. Das mit den Strings ersetzen klingt für mich auch nicht so komplex, vielleicht wirst du aber dein Vorhaben erklären müssen und dafür eine saubere API implementieren, aber im Gegenzug erhältst du eine Menge Feedback und fast immer eine bessere Implementierung.
-
- User
- Beiträge: 329
- Registriert: Montag 13. Mai 2019, 16:05
- Wohnort: Erde
Danke für deinen Vorschlag. Meine Anpassungen zielen eben darauf ab die Ausgabe von ast.unparse so zu ändern, dass der Code in minimierter Form herauskommt.
Ich denke nicht dass das in die Offizielle Version hineinpasst. Deshalb war meine Idee das ast Modul zu kopieren, anzupassen und dann in meinem Paket mitzuliefern.
Das eigene ast würde ich dann auch einfach für jede grosse Python Version kopieren und wieder neu anpassen, und dann im Paket die entsprechende Version laden. Monkey-Patches würden ja an der Stelle auch scheitern, wenn es grosse Änderungen gäbe. Da ich mir dann nicht sicher war mit den Lizenzen habe ich hier nachgefragt. Wenn euch noch eine andere Option einfällt, schreibt sie gerne. Ansonsten denke ich die Eigenkopie ist die einzige Lösung und würde gerne den korrekten Weg wissen um es zu veröffentlichen. Die Lizenz für mein Projekt spielt für mich nicht so eine grosser Rolle.
Ich denke nicht dass das in die Offizielle Version hineinpasst. Deshalb war meine Idee das ast Modul zu kopieren, anzupassen und dann in meinem Paket mitzuliefern.
Das eigene ast würde ich dann auch einfach für jede grosse Python Version kopieren und wieder neu anpassen, und dann im Paket die entsprechende Version laden. Monkey-Patches würden ja an der Stelle auch scheitern, wenn es grosse Änderungen gäbe. Da ich mir dann nicht sicher war mit den Lizenzen habe ich hier nachgefragt. Wenn euch noch eine andere Option einfällt, schreibt sie gerne. Ansonsten denke ich die Eigenkopie ist die einzige Lösung und würde gerne den korrekten Weg wissen um es zu veröffentlichen. Die Lizenz für mein Projekt spielt für mich nicht so eine grosser Rolle.
Ich kenne das alles nicht en Detail aber es scheint eine ganze Reihe von Projekten mit ähnlichem Ansatz zu geben: https://astunparse.readthedocs.io/en/latest/
Und da ist nix dabei, das deine Anforderungen umsetzt?
Und da ist nix dabei, das deine Anforderungen umsetzt?
-
- User
- Beiträge: 329
- Registriert: Montag 13. Mai 2019, 16:05
- Wohnort: Erde
Ja, das sind zwar unparser, aber sie scheinen inaktiv zu sein. Die existierenden minifier sind auch alle veraltet oder schlecht. Das war ja auch meine Motivation einen neuen besseren minifier und obfuscator zu erstellen, was ich auch schon grösstenteils erreicht habe.
Benutzt `ast.unparse` nicht einfach nur eine Kindklasse von `ast.NodeVisitor`, von der man erben könnte (oder wo man einen eigenen Visitor schreiben könnte), um das gewünschte Verhalten zu erhalten? Ich sehe nicht ganz, wo man da das `ast`-Modul für forken müsste.
- DeaD_EyE
- User
- Beiträge: 1244
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Wenn du die BSD0 Lizenz verwendest, kann Firma XY den Code nehmen, verwenden, verkaufen und die Lizenz sogar entfernen.Ich verstehe nicht ganz was du mir damit sagen willst.
Du kannst Firma XY nicht deswegen verklagen. Da es wegen der BSD-Lizenz auch Gerichtsverfahren gegeben hat, gilt diese Lizenz als Praxis-Erprobt.
Beispiel: Mac OS nutzt ca. 70 % vom FreeBSD Kernel Code. Auf der PS3 müsste auch FreeBSD zum Einsatz kommen.
Wenn du Unternehmen von Anfang an ausschließen willst, nimmst du am besten die GPLv3.
Dann ist garantiert, dass dieser Code in wenigen Unternehmen zum Einsatz kommt.
Es gibt in vielen Unternehmen die Richtlinie, alles an GPL-Software loszuwerden.
Das ist der schlechten Erfahrung mit Busybox geschuldet.
Das Einzige, was bleibt, ist der Linux-Kernel unter der GPLv2.
Falls dich das interessiert, dann google mal nach Busybox und Klagen.
Deswegen ist LLVM und ein kompletter Ersatz für GNU entstanden, um die GPL-Lizenz loszuwerden.
Apple hat sogar einen neuen Samba-Client entwickelt, weil der vorhandene GPL verwendet.
Jedenfalls stehen wir vor dem großen Problem, dass man Software mit bestimmten Lizenzen nicht einfach kombinieren darf.
Das hat dann die Folge, dass Software, die eigentlich funktioniert und erprobt ist, neu entwickelt wird, damit man eine andere Lizenz nehmen kann.
Da die BSD0 Lizenz komplett frei ist, könnte man den Code z.B. nachträglich unter der GPLv3 lizenzieren.
Wenn man dann am GPLv3 Code etwas ändert und das zurück nach BSD0 lizenzieren will, kann man das machen, wenn man den Code selbst geschrieben hat.
Wenn es jemand anderes gewesen ist, muss man denjenigen um Erlaubnis fragen. Das ist das Problem mit Lizenzen, die sehr restriktiv sind. Die GPL ist restriktiv.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
-
- User
- Beiträge: 329
- Registriert: Montag 13. Mai 2019, 16:05
- Wohnort: Erde
Da hast du recht: Man könnte erben.narpfel hat geschrieben: Freitag 1. April 2022, 19:07 Benutzt `ast.unparse` nicht einfach nur eine Kindklasse von `ast.NodeVisitor`, von der man erben könnte (oder wo man einen eigenen Visitor schreiben könnte), um das gewünschte Verhalten zu erhalten? Ich sehe nicht ganz, wo man da das `ast`-Modul für forken müsste.
Problem: 20 Funktionen müsste ich über/neu schreiben...
Das ist ein riesen Aufwand. Deshalb würde ich eine andere Lösung vorziehen.
Ich wäre euch also sehr dankbar, wenn mir jemand einen konkreten Vorschlag machen kann, wie es möglichst einfach zu machen ist.
Danke im Voraus
-
- User
- Beiträge: 329
- Registriert: Montag 13. Mai 2019, 16:05
- Wohnort: Erde
Du hast recht. Mein Fehler.
Hier also ein OneDrive Link
Das Original habt ihr ja alle falls ihr es braucht.
Hier also ein OneDrive Link
Das Original habt ihr ja alle falls ihr es braucht.
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Also erst einmal braucht man ja anscheinend nur die `_Unparser`-Klasse und die `unparse()`-Funktion. Den Rest kann man sich aus dem `ast`-Modul importieren. Und die `_Unparser`-Klasse hat ja Änderungen die man automatisieren könnte. Also beispielsweise den Quelltext im `ast`-Modul lokalisieren, die Klasse parsen, und dann beispielsweise nach so sachen wie ``.write(": ")`` oder ``.write(", ") usw. suchen und da dann das Zeichenkettenliteral durch eines ohne das/die Leerzeichen ersetzen. Und dann kompilieren und ausführen um das Klassenobjekt zu erstellen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari