Es wird nicht dadurch zum abgeleiteten Werk dass Du den Header includierst, sondern dadurch, dass Du die dadurch zur Verfügung stehenden Funktionen, etc. nutzt.
Ansonsten könntest Du ja vor Veröffentlichung schadlos den Include entfernen.
|
Anmeldungsdatum: Beiträge: 2870 |
Es wird nicht dadurch zum abgeleiteten Werk dass Du den Header includierst, sondern dadurch, dass Du die dadurch zur Verfügung stehenden Funktionen, etc. nutzt. Ansonsten könntest Du ja vor Veröffentlichung schadlos den Include entfernen. |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Dee schrieb:
Da wir Deine Korrespondenz mit der FSFE nicht kennen wird es dann leicht spekulativ.
Das ist ja wohl nicht so, und kann so auch nicht sein. Hatten wir das nicht schon:
Das ist allerdings eine Besonderheit im deutschen UrhG und nicht auf Österreich, Portugal oder Brasilien anwendbar. |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Hier mal kurz die Korrespondenz in Auszügen (meine Fragen sind dabei komplett): Dee schrieb:
FSFE-Mitglied schrieb:
Dee schrieb:
FSFE-Mitglied schrieb:
Dee schrieb:
FSFE-Mitglied schrieb:
Dee schrieb:
FSFE-Mitglied schrieb:
Dee schrieb:
FSFE-Mitglied schrieb:
Das war die bisherige Diskussion. Zu den ersten beiden Antworten muss ich noch mal genauer nachfragen:
So wie es ausschaut, bin ich aber auf der Mailingliste da angekommen, wo hier im Thread Seite 1 angefangen hat. Sprich: KBasic-Programme (Definition sei ein Programm mit KBasic-Erweiterungen wie Application, Bytearray oder Collection) unterliegt unter Umständen der GPL, wenn die Erweiterung, die für die diese Sprachelemente zuständig ist, der GPL unterliegt (wovon wir aber ausgehen, weil die Erweiterung ja in KBasic drinsteckt). user unknown, siehst Du das nach der Ausführung des FSFE-Mitglieds immer noch anders? Bzw. siehst Du das mit §69 a, (2) anders, weil das für Dich nur Schnittstellen sind? Wenn Du damit Recht hast, hieße das ja, dass die GPL in Deutschland (in dem speziellen Fall) gar keine Wirkung hat. Gruß Dee |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Von K, A, P und I schwirrt mir sehr der Kopf. Deinen Prämissen folge ich schon nicht ganz. Bei C/C++ gibt es einen Linker, der fremden Code (in compilierter Form) einbindet. Wir haben, glaube ich, noch unterschiedliche Vorstellungen von "verbinden, linken". Eine Include-Anweisung #include <foo.h> wird vom Präprozessor durch den Inhalt der Datei foo.h ersetzt. Headerfiles sollen aber nur Deklarationen, nicht Code enthalten, so daß hier in Deutschland dieser Satz 2 des UrhG greift. Bei einem Interpreter wird dagegen nichts eingebunden. Allerdings ist nicht ausgeschlossen, daß man auch Basiccode compiliert und linkt - alles was mit einer turingvollständigen Sprache ausgedrückt werden kann, kann in eine andere turingvollständige Sprache überführt werden, z.B. in C-Code, und also kann man es auch - theoretisch oder in Zukunft - verlinken. Kann - hat aber noch nicht. Nun - ein konkretes Beispiel: KB habe eine Klasse KStack, die ich benutzen will. In Pseudocode sage ich also use KStack KStack ks = new KStack ks.push (foo) ks.push (bar) x = ks.pop Ich deklariere, daß ich diese KStackbibliothek nutzen will, und rufe dann den Konstruktor auf, und die Methoden, die von der Schnittstelle beschrieben sind (push,pop). push und pop sind als Namen wohl kaum geschützt. Und KStack ist irgendeine Schnittstelle - mit include-Pfad und library-Path legt man bei C/C++ von außerhalb fest, wo der Header und die lib gesucht werden. Es könnte also gut alternative Implementierungen geben. Für Stacks ist die Schnittstelle so natürlich weit verbreitet - für andere Klassen mag es größere Diversifizierungen geben, v.a. wenn es um ganze Frameworks geht - man denke an Qt, swing, usw. Aber die Schnittstellenklausel macht es m.E. unerheblich, wie speziell eine Bibliothek und die Schnittstellen sind. Ich kann mir die Schnittstelle anschauen, und ein Programm schreiben, das diese Bibliothek mit ihren Schnittstellen benutzen könnte, und dennoch ist das nur mein Werk, und nicht, auch nicht in kleinen Teilen, das Werk dessen, der die dazu passende Bibliothek geschrieben hat. Wenn ich mein Programm nicht mit dieser Bibliothek verbinde, dann darf ich alleine über die Lizenz bestimmen mit der ich es vertreibe. Wenn jemand das Programm wie ich es vertreibe nimmt, und selbst mit dieser Bibliothek verlinkt, so ist das dessen Sache - ich kann ihm ja von meiner Seite aus erlauben meinen Code so zu nutzen. Der Bibliothekhersteller kann es aber untersagen. Er kann sagen, seine Bibliothek darf nur genutzt werden für GPL-Programme, die nicht kommerziell sind, beispielsweise. Das paßt aber nicht ganz auf den KBasic-Fall, denn der versucht nicht denjenigen, der das Programm ausführt, sondern (auch) den Schreiber zu verpflichten. Und er sagt sein Programm stünde unter der GPL, welche derartige Einschränkungen ausdrücklich untersagt. Oder nochmal anders gesagt: Wenn ich nur selbstgeschriebenen Code weitergebe, dann kann das kein abgeleitetes Werk sein. Dann ist damit kein fremder Code verbunden. Außer, natürlich, ich schreibe KBasic-Code oder Code aus den Bibliotheken ab - das natürlich ausgeschlossen. |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Das wegen include hatte sich ja schon mit Rotbarts Posting erledigt, dachte ich. Daher bin ich da gar nicht mehr eingegangen.
Du vergisst inline-Methoden, die meist im Header-File stehen. Aber darum geht es ja gar nicht. Daher zurück zu KBasic. Ein komplexes Thema reicht ja. 😉
Na na, inzwischen solltest Du doch den FAQ-Eintrag der GPL kennen und auch, dass es Interpreter gibt, die manchmal etwas einbinden. Oder ist der FAQ-Eintrag in Deinen Augen falsch? (Ob man die Dinger dann noch Interpreter nennen darf, ist ne andere Sache.)
Bei Dir stände also auch dieser Quellcode (nutzt einspline) nicht unter GPL, weil es ja nur eine Schnittstelle ist? #include <bspline_structs.h>
int main ()
{
UGrid x_grid;
BCtype_s xBC;
float *data;
UBspline_1d_s * spline = create_UBspline_1d_s (x_grid, xBC, data);
return 0;
}Erst wenn ich das obige Ding kompiliere und verteile, bin ich Deiner Meinung an die GPL gebunden. Habe ich das richtig verstanden? Okay, da bist Du hier anderer Meinung als das eine Mitglied der FSFE, was mir ja bestätigt hat, dass bei der Benutzung KBasic-spezifischer Elemente, die danach beim Interpretieren ein Binding eingehen, die GPL greift. Und gleiches gilt bei C/C++-Code. Ich glaube, da können wir nicht viel dran ändern, dass es da zwei Meinungen gibt. Für andere ist das Einbinden von obigen "UBspline_1d_s" bereits eine Ableitung. (Für mich im übrigen auch.) Ich habe nun leider keine Ahnung, wer Recht hat. Beide Seiten haben sinnvolle Argumente. Deine beunruhigen mich etwas mehr, weil es die GPL in Deutschland faktisch außer Kraft setzt, wenn man nur noch Quellcode weitergeben würde. Gruß Dee |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Also diese FAQ erschließt sich nicht auf den ersten Blick, laß uns zumindest klären, was unklar ist. Absatz 1 ist klar:
Kein Diskussionsbedarf meinerseits. Dann kommt ein dicker Brocken:
Der erste Satz ist ja nicht ohne. Wenn der Interpreter erweitert wird (also ich bohre KBasic auf?) um Verbindungen zu anderen technischen Einrichtungen(?) herzustellen ... oppaoppahoppala - was - wer?
Also wir haben einen Interpreter K, und der wird erweitert zu K', um zu Library L Verbindungen einzugehen, um unser Programm P damit laufen zu lassen? Also L stünde unter der GPL, dann müssen wir unser Programm unter der GPL veröffentlichen? Da bin ich ja arg gefährdert - allerdings in umgekehrter Richtung. Ich habe ein Program, und um C++-Code (den ich aber auch selbst geschrieben habe) zu verwenden ruft mein Javaprogramm mittels JNI den C++-Code auf.
System.loadLibrary ("PledPlugin"); sucht unter Linux nach einer libPledPlugin.so und läd sie. Verwendet wird sie später durch einen Aufruf, der einen String als Parameter erwartet, und einen String zurückliefert und 'doNative' heißt. out = Native.doNative (in); JNI kümmert sich darum die Java- auf C++-Typen abzubilden usw. Nun mal angenommen jemand nimmt mein Programm, und will es unter Windows laufen lassen. Er entwickelt eine Bibliothek PledPlugin.dll mit einer entsprechenden doNative-Methode, und stellt diese unter die Microsoft-Dingdong-Lizenz, und kann mein Programm unter Windows laufen lassen. Mein Programm muß er dazu nicht ändern. Unter Windows sucht es von sich aus nach einer .dll-Datei, nicht der .so-Datei. Da mein Programm unter der GPL steht gibt es keinerlei Einschränkungen beim laufen lassen dieses Programms. Jetzt muß ich aber mein Programm auf die MS-Dingdong-Lizenz anpassen, die noch gar nicht existierte, als ich mein Programm schrieb? Das kann ja nun nicht sein. Ich weiß nicht, welchen Fall die FAQ-Schreiber vor Augen hatten, als sie das schrieben - von dem was sie schrieben kann ich nichts anderes ableiten. Abschnitt 3 erläutert, was dann mit Abschnitt 4 verstanden werden soll:
Das ist klar. commons.jar, JFreeChart.jar, iText.jar, tolle Bibliotheken unter der (L)GPL oder anderen OpenSource-Lizenzen. Kennt man. Nutzt man am laufenden Band.
Bei C/C++ kann man leicht den Pfad zu einer Bibliothek durch einen anderen ersetzen. Das ist auch nötig, wenn man von Linux zu Solaris, zu MacOs oder schlimmerem portiert. In Java ist das nicht nötig, weil man die Jars überall hin mitnehmen kann. Die Namenskonventionen sind auch nicht einfach #include <iostream.h> // sondern import java.util.* // oder import org.postgresql.Driver; also nicht einfach Dateiname.h, sondern domain.firma.paket.Klasse - es ist also Konvention global eindeutige Bezeichner zu verwenden, wenn auch nur Konvention und nicht Pflicht. Worauf ich hinaus will: Bei C/C++ ist der Mechanismus darauf ausgelegt eine Library durch eine andere Implementierung der Library auszutauschen - bei Java dagegen nicht - eher im Gegenteil. Wenn ich mit einem eigenen Framework für Geschäftsgrafiken daherkäme, dann würde ich es sicher nicht JFreeChart nennen, und falls doch wohl Ärger bekommen. Denkbar ist aber schon, daß die Firma Foo die Bibliothek de.Foo.DB ab morgen unter einer neuen Lizenz veröffentlicht, z.B. der GPL. Mein Programm, welches ich gestern gegen diese Bibliothek entwickelt habe muß ich doch heute nicht unter einer neuen Lizenz veröffentlichen, weil es eine andere Version der Bibliothek gibt, mit der mein Programm laufen kann, und das eine andere Lizenz hat? Stabile Schnittstellen über viele Versionen hinweg sind nicht selten (public interfaces are forever). Ich denke die Interpreten der GPL, die die FAQ geschrieben haben, sehen die Sache folgendermaßen (eine Diskussion der LKML klingt mir ähnlich im Ohr): Wenn es nur eine Bibliothek gibt, die die von mir benutzte Schnittstelle implementiert, dann sei mein Code von dieser abhängig, und damit ein abgeleitetes Werk, auch wenn sie nicht im klassischen Sinne verlinkt wird, sondern nur zur Laufzeit eine Verbindung hergestellt wird. Aus den genannten Gründen kann ich mich mit der Lesart nicht anfreunden. Da ich selbst meist zur GPL greife gerate ich aber ohnehin nicht in die Bredouille.
Weil es dann in der Macht des Anwenders liegt, eine Verbindung herzustellen, und er, solange er nix verbreitet, beliebige Programme kombinieren kann? Ich verstehe 'Verbindung' streng als technischen Vorgang. Wenn ich mein Programm mit einem anderen nicht verbinde, dann ist es nicht verbunden. Daß es zur Laufzeit verbunden wird könnte nur für Leute interessant sein, die das Programm im laufenden Zustand verkaufen oder sonstwie verbreiten. Meine Interpretation hat den Charme, daß man nicht wissen muß was andere Leute mit ihrem Code und ihren Lizenzen in Zukunft machen werden, sondern daß jeder für den eigenen Code zuständig ist, aber nicht fremden, und daß sich durch Aktionen anderer in der Zukunft nicht meine Rechtsposition ändert. Vielleicht habe ich aber auch deren Anliegen mißverstanden. #include <bspline_structs.h>
int main ()
{
UGrid x_grid;
BCtype_s xBC;
float *data;
UBspline_1d_s * spline = create_UBspline_1d_s (x_grid, xBC, data);
return 0;
}bspline_structs.h ist aus dem von Dir verlinkten Paket einspline, unter der GPL (nicht LGPL) und die seltsamen Strukturen UGrid, BCtype_s und UBspline_1d_s sind dort implementiert, nehme ich an. Spline und Grid sind ja normale Begriffe die selbst mir, der ich mit 2-oder-3-D wenig am Hut habe geläufig sind. create_UBspline_1d_s (x_grid, xBC, data) ist eine Methode, die ein UBspline_1d_s erzeugt. Das ist so in dem Header festgelegt. Du nutzt die Bibliothek (hofffentlich) in dem gedachten Sinne, auch wenn das noch sehr nach default-Verhalten aussieht, aber es soll ja kurz sein. Du hast die Bibliothek begriffen, und die Programmierer dieser haben keine der 10, 11 Zeilen geschrieben. Es ist keine Ableitung dessen, was die anderen geschrieben haben, und nicht verlinkt. Wähle eine Lizenz die Dir behagt. Aber wenn Du es verlinkst, so daß die Funktion, die create_UBspline_1d_s ausmacht, aufgerufen wird, ist es aus mit der Wahlfreiheit. Morgen kann aber jmd. die Funktion für einen neuen Prozessor neu implementieren, und Du Dein Programm damit betreiben. aus §69(a) UrhG:
Das verstehe ich so, daß man so eine UB_Spline mit einem Grid und etwas DATA initialisiert, das kann m.E. nicht geschützt werden. |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Prinzipiell ja, Du vergisst nur die zeitliche Komponenten (auch bei allen anderen Beispielen unten). Nur weil sich die Lizenz von K ändert oder das Verhalten von K zu K' erweitert wird, muss sich Dein Programm nicht ändern und kann nach wie vor mit der ursprünglichen Version von K arbeiten.
Kann es auch nicht, weil sich die FAQ auf die GPL bezieht und nicht auf alle Lizenzen, vor allem nicht auf MS-Lizenzen. Ich habe also keine genaue Ahnung, was Du mit dem Beispiel sagen wolltest. Das Wort GPL ist ja nur am Anfang gefallen und da stand Dein Programm schon unter GPL.
Wie oben beschrieben erstellst Du kein neues Programm und mit der Bibliothek von gestern ist das alles kein Problem, da sich absolut nichts ändert.
Was heißt "so lange er nix verbreitet"? Quellcode online stellen ist in meinen Augen verbreiten. Du meinst wahrscheinlich "so lange er keine Executables" verbreitet. Aber ja, genau darin sehe ich ein Problem. Ich würde die GPL auch auf Quellcode anwenden.
Und wenn es eine zweite alternative Bibliothek gibt, gilt das nicht mehr? Und wenn diese zweite Bibliothek auch unter der GPL steht, unterliegt Dein Code nicht mehr der GPL, weil ... weil ... ja, wieso denn? Fändest Du das nicht etwas seltsam?
Muss man ja nun auch nicht. Es geht nur um das Hier und Jetzt.
Es sollte ein reales Beispiel sein (ohne mich groß in die Bibliothek einzuarbeiten). Daher wird der Code sicher nicht funktionieren, weil "data" keinerlei Punkte hat. 😉 Aber das Prinzip, um das es mir ging, hast Du ja verstanden.
Das heißt, mein Quellcode, den ich verfasst habe, ist bei Dir nicht von der GPL gedeckt? Gruß Dee |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Meine Beispiele spielen mit der Zeit, um zu zeigen, daß keine Abhängigkeit besteht - zumindest in meiner Begrifflichkeit kann mein Programm nicht als von einer Bibliothek abhängig beschrieben werden, wenn diese Bibliothek in der Zukunft geändert werden kann, ohne mein Programm anzufassen, und mein Programm verhält sich anders. Oder wie einst ein großer Getränkehersteller sagte: Ein Kasten Limo, den ich in meinen Kofferraum packe, ist kein abgeleitetes Werk meines Autos. "Und umgekehrt" ruft der Autohersteller. Und daß sich die Situation umgekehrt stellt - mit der GPL und nicht einer CS-Lizenz? Ich will die Gefühlslage umpolen, denn es geht ja im Kern um die Frage, ob eine Lizenz einer Bibliothek oder eines Programms auf ein anderes Programm, eine andere Bibliothek derart wirken kann.
Mein Java-JNI-.so/.dll-Beispiel könnte auch unter einer CS-Lizenz stehen, und eine entsprechende .dll nutzen, und jemand transferiert sie auf Linux, und läßt sie mit einer Open-Source-.so-Lib laufen. Eine derartige Flexibilität ist für mich eigentlich Beweis genug, daß keine Verbindung vorliegt - temporär zur Laufzeit, ja - aber nur zur Laufzeit, und zur Laufzeit gibt es keine Einschränkung, da Punkt 2 der GPL greift*)
*) Allerdings spricht die GPL von einem Programm, nicht von einer Methode, einem Modul, für die ja eigentlich die LGPL gedacht sind. Mein Programm ändert jedenfalls nicht den .so-File, und ein CS-Programm darf also offenbar FOSS-Code ausführen. Mit Windows (angenommen man hätte eine Lizenz) darf man auch Firefox starten - dadurch wird Windows nicht zu FOSS. Und die Unabhängigkeit ist m.E. eine technische Tatsache die nicht davon abhängt, ob es in der Tat 2 oder mehr Bibliotheken gibt, die alternativ zur Laufzeit mein Programm erweitern, sondern es reicht wenn es 2 Bibliotheken geben könnte. Meine Gedankenspiele handeln davon, daß ich nur selbstgeschriebenen Code verbreite, und diesen nicht statisch, sondern dynamisch linke. Dynamisches Linken heißt nun mal, daß Programm und Library nur zur Laufzeit verbunden sind, und ansonsten eben nicht verbunden sind. Wenn ich aber z.B. von der Javawelt ausgehe, und eine GPL-Jar für die Bequemlichkeit des Kunden aus-, und zusammen mit meinem eigenen CS-Jar wieder einpacke, so daß er nur ein einziges Jar hat, das er direkt ausführen kann, dann habe ich meinen Code mit dem anderen verbunden (ein Bundle erzeugt). Das kann ich nicht. Ein Script ausliefern, daß das fremde GPL-Jar runterläd, und vor Ort auf dem Kundenrechner aus- und mit meinem Code einpackt, das könnte ich dagegen machen, denn was ich weitergebe ist nicht der fremde Code. Das was das Script macht könnte ich auch persönlich vor Ort machen. Und Dein Quellcode (spline), muß nicht unter die GPL gestellt werden, ja, so sehe ich das.
Im Beispiel verbreite ich ja meinen Code unter einer von mir gewählten Lizenz. Und die GPL gilt für einen fremden Code - z.B. libQt.so. Ich verbreitet ja nicht den Quellcode der offenen Library. Wenn im Quellcode mein Programm nicht verbunden ist mit dem GPL-Code dann kann ich doch frei wählen unter welcher Lizenz ich es verbreite. Eine populäre Form Quellcode zu verbreiten der nicht der GPL unterliegt, aber von einem FOSS-Programm ausgeführt wird ist - wer errät's?? - Javascript im Firefox. Ich will jetzt nicht die Mozilla-Lizenz in die Debatte einbeziehen, aber die Situation ist doch ähnlich. Der Webseitenschreiber hat eine CS-Programm geschrieben (C:=closed im Sinne von rechtlischer Einschränkung - der Quellcode ist schon sichtbar, aber man darf ihn nicht ohne ausdrückliche Erlaubnis ändern) und der Interpreter sitzt als FOSS im Browser. Vielleicht ist ja Konquerer GPL-Code, jedenfalls sind GPL-Browser denkbar, die Javascript interpretieren können. Da findet das gleiche statt: 2 unabhängige Werke, Javascriptcode und der Interpreter treffen aufeinander, aber keiner von beiden hat die Macht die Lizenz des anderen einen Millimeter zu verrücken. |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Okay, ich denke, dann sind wir am Ende der Diskussion angelangt. Beide Seiten haben Ihre Meinung ja darstellt. Ich weiß jetzt nur nicht, was ich in den Artikel schreiben soll. Deiner Meinung nach findet die GPL ja nur in extrem wenigen Fällen Anwendung und deckt sich keineswegs mit meinen Erfahrungen oder meiner Meinung. Als "richtig" kann ich diese daher im Artikel nicht darstellen. Ich werde wohl aller Voraussicht nach die Meinung der FSFE aufgreifen und hier auf den Thread verweisen. Gruß Dee |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Dee schrieb:
Was? Sie findet immer Anwendung, wenn man seinen Code unter der GPL weitergibt - für diesen Code natürlich nur. Aller Quellcode der mir weitergegeben wird unterliegt der GPL - nur wenn ich etwas kombiniere, ohne es zu verbinden unterliegt diese eigene Schöpfung nicht notwendig der GPL - das setzt aber einen Programmierer vorraus, der die Sache so sieht wie ich, aber im Gegensatz zu mir nicht aus Eigeninteresse seinen Code doch unter die GPL stellt. Dazu muß man sie mehrmals gelesen haben - das liegt den meisten Leuten schon fern. ☺ Relevant wird diese Differenz in der Beurteilung wohl nur selten. Was entgegnest Du denn auf mein Javascript-Beispiel? |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Und in meinen Augen ist das ist der Linux-Welt eher selten, dass man vorkompilierte Binaries weitergibt, weil die einkompilierten Bibliotheken meistens nicht auf dem Zielsystem zu finden sind. Es gibt eben zu viele verschiedenen Linux-Systeme, als das sich das lohnt. Daher wird meistens (zumindest auf Sourceforge & Co.) nur Quellcode weitergegeben, der Deiner Ansicht nach oft "zu Unrecht" der GPL unterworfen wurde. (Dass es bei Sourceforge auch genug Ausnahmen gibt, die Binaries anbieten, weiß ich.)
Aber das ist doch nur ein Interpreter und es gibt keine Java-Script-Bindungen, die der GPL unterliegen, und die eingebunden werden, oder? Daher gilt der Satz "When the interpreter just interprets a language, the answer is no." Ich sehe keinen Grund, warum die GPL hier greifen sollte. Mal viel Theorie: Würde es dagegen eine libjs.so unter GPL geben, die der Browser nutzt und zur Laufzeit an den JS-Code bindet, um das Ganze ausführen zu können (was natürlich etwas umständlich wäre), müsste der JS-Quellcode der GPL unterliegen. Aber ist ja eben nur theoretischer Natur. Und wenn es so einen Browser gäbe, gibt es ja Alternativen, sodass ein JS-Programmierer auf diese verweisen kann. Da Du gleich das Argument bringen wirst, dass Du das schon vorher gesagt hast wegen "mehr als ein Programm": Nein, denn es gibt diese Alternativen und nicht es könnte diese Alternativen irgendwann mal geben. Sprich: Wenn es diese libjs.so gäbe und es gibt noch keine Alternative, bist Du an die GPL gebunden mit Deinem JS-Code. Sollte irgendwann mal jemand eine Alternative erfinden (zu Deutsch einen der heutigen Browser), kannst Du Deinen Code neu unter einer anderen (oder auch gar keinen) Lizenz lizenzieren. Dein alter Code bleibt aber unter der GPL. Gruß Dee |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Dee schrieb:
"zu Unrecht" oder meinst du "ohne Not"? Ich gehe davon aus, daß die meisten Entwickler, die die GPL nutzen, das gerne tun - nicht gezwungenermaßen. Und v.A. nicht zu Unrecht. Und vorkompilierte Binaries: Was ich mit Synaptic/aptitude usw. lade, das ist doch i.d.R. kompiliert.
Okay - jetzt drohe ich wohl während des Reitens die Pferde zu wechseln, und selbst einen Gebrauch vom Wort binden, linken zu machen, den ich vorher zurückgewiesen habe. Vorsorglich werfe ich eine Zwiebel in die Debatte. Eine Zwiebelmetapher. Auf dem Rechner laufen Programme in unterschiedlichen Schichten, und die unterschiedlichen Schichten gehen unterschiedliche Arten von Bindungen ein. Javascript wird wohl üblicherweise nicht statisch gegen irgendwas gelinkt, sondern ist in HTML-Code eingebunden. Das wird vom Browser, der eine Javascriptengine hat, interpretiert, und dynamisch mit dem Code verbunden - sagen wir mit Qt-Code, der einen Button darstellt, oder mit Gtk-Code oder womit immer. Das ist eine dynamische Verbindung zur Laufzeit - es wird kein binary auf der Festplatte gespeichert und ausgeführt - auch nicht im /tmp-Verzeichnis. Ich könnte aber einen Programmier einstellen, der mir einen Browser schreibt, der genau das ausgeschlossene macht: Javascript compilieren und statisch linken.
Eine libjsd.so (Javascript-Debugger) habe ich schon gefunden. ☺
Hast Du mal geschaut wieviele Basic-Dialekte es gibt? Wie viele Versionen, für wie viele Plattformen und Betriebssysteme? Ich schätze es gibt über Hundert, und da sind verschiedene Versionen (3.0, 3.1, 3.1b, 4.0beta) nicht einkalkuliert. Jetzt versuch mal die alle zu beschaffen - nur um eine vollständige Liste aller Lizenzen zu beschaffen. Ich schätze das man 1/3 der Versionen kaum noch auftreiben kann - vielleicht in dem man für jede einzelne Version mehrere Tage aufwendet, um Liebhaber untergegangener Systeme ausfindig zu machen. Atari, Amiga, OS/2, BeOS, Zeta - Du sagst es. Diese Wikiseite http://de.wikipedia.org/wiki/Liste_der_BASIC-Dialekte gibt einen gewissen Eindruck über die Zahl der Basicimplementierungen, und erhebt noch keinen Anspruch auf Vollständigkeit. Aber ich denke nicht, daß ich nachweisen muß, daß es eine Implementierung der Sprache geben muß, die nicht der GPL unterliegt, weil die Schnittstelle - zumindest in Deutschland - nicht geschützt werden kann. Für eine Handvoll Sprachen könnte man auch sicher unterscheidbare Bezeichner für ähnliche Sachverhalte finden - Button, button, kButton, xButton, qtButton, JButton - aber die Möglichkeiten nehmen doch rapide ab, wenn man auch unterschiedliche Bezeichner für Dialekte fordert. Insbesondere ist es nicht vorherrschende Praxis je nach Lizenz für die gleiche Implementierung unterschiedliche Bezeichner zu wählen. Wähle ich eine kommerzielle mySql-Lizenz heißt es immer noch "CREATE TABLE foo (id int, name String);" Wie stellt man eine Funktion oder Methode dar, die den Sinus einer Zahl berechnet? s = sinus (x) s := sin (x) s = x.sin () apple.s <- i.Sinus () Wie oder wieso soll man das abstrakte Konzept schützen, daß man einen Sinuswert berechnet? Ließe sich das schützen, so wäre Microsoft (und nicht nur die) längst mit einer Sprache auf den Markt gekommen, die 2 - 6 alternative Konzepte schützt, und hätte alle Konkurrenten des Plagiierens verklagt - nur sind die meisten Softwarekonzepte natürlich viel älter als Microsoft. Büroklammer.gehUserNerven (%USER%) könnten sie vielleicht zu schützen versuchen. Aber Scherz beiseite. Gerade die Verfechter von Opensource fordern i.d.R. auch, daß die allgemeinen Konzepte nicht schützbar sind (Doppelklickpatent). Öffnet man die Tür für einen Bezeichnerschutz, dann kann mann das Programmieren auch gleich verbieten. Das geht nicht. Und außerdem ist eine Weitergabe eines selbstgeschriebenen Programms im Quellcode nur die Weitergabe eines abstrakten Konzepts, es ist ein Theorem, welches dadurch, daß man es laufen läßt lediglich geprüft wird (oder man prüft mit diesem Programm die VM, den Intrpreter - vielleicht hat der ja einen Fehler). Daß ich es weitergebe sagt aber noch nicht, daß es ausgeführt werden muß. Im Gegenteil ist faktisch so, daß man als Programmierer häufig Code generiert, bloß um eine Anschauung zu untermauern. Z.B. schreibt man apple.s ← i.Sinus () und weiß nicht, ob es überhaupt eine Maschine mit einem Programm gibt, welches diese Anweisung ausführen könnte. Ich könnte also einen Code schreiben, und erklären, daß er auch ausgeführt werden darf, es aber am Kunden liegt, eine VM oder einen Interpreter zu finden, der das Programm auch ausführt. Für das Massengeschäft ist das sicher keine so praktikable Vorgehensweise, aber darum geht es ja nicht, sondern darum, ob ich das überhaupt darf, und was daraus folgt. Da ich als Programmierer nicht wissen muß, welche Programme (Interpreter, Compiler, VM) es überhaupt gibt, die meinen Code ausführen könnten, und wer diese wie lizensiert hat, kann mein Programm auch nicht an diese Lizenzen gebunden sein. Der Programmierer von KBasic selbst benötigt z.B. überhaupt keine Lizenz um sein Programm auszuführen, und könnte auch, ohne jmd. Bescheid gesagt zu haben, mit jedermann eine geheime Sonderlizenz vereinbaren (und genau das bietet er ja auch an). Wie soll ich als Dritter durch einen Vertrag zw. zwei unabhängigen Parteien gebunden sein? Das widerspricht m.W. allen Ideen von Vertragsrecht. Ich könnte also mein Programm gar nicht an einen Kunden ausliefern, sondern zum Download auf meiner Webseite anbieten, von wo ihn jeder, der mag, herunterladen kann, und wer ein Programm hat, das mein Programm ausführen kann, der mag es unter dieser oder jener Lizenz nutzen. Mit dem Entwickler von KBasic gibt es mindestens einen Programmierer, nicht an seine eigene Lizenz gebunden ist. Strike! (Oder: q.e.d.) Ich glaube der Disput läßt sich zuspitzen auf die Frage, ob - um ein nicht zu triviales Beispiel zu wählen - ein Ausdruck wie button -> resize (Dimension (x, y)) // oder ein trivialeres Beispiel a = sin (alpha) schützbar sein soll/sein kann. Ich sage: Nein. |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Ohne Not.
Und die veröffentlicht der Entwickler? Eher weniger. Wäre ja auch ne lustige Frage: Du veröffentlichst Quellcode (der in Deinen Augen ja nicht zwingend der GPL unterliegt) und ich kompiliere den und verteile das Binary, wodurch "plötzlich" die GPL greift.
Könntest Du. Ändert aber nix an der aktuellen Lage, dass es genug Browser gibt, die JS auch ohne dieses statische Linken interpretieren.
Und wie viele davon können Bytearray, Collection und Application interpretieren?
Siehste, ich denk das schon, weil das mit der Schnittstelle in meinen Augen nicht wirkt. Aber wir sind beide keine Rechtsgelehrte. Wir raten und interpretieren hier nur.
Gar nicht und es geht auch nicht um alltägliche Funktionen, wie ich schon mehrfach erklärt habe - und Du sicher auch schon verstanden hast - sondern um sprachspezifische Elemente, die zur Umsetzung eine GPL-lizenzierte Erweiterung benötigen, die zur Laufzeit bei der Interpretation eingebunden wird.
Und in meinen Augen dennoch an die GPL gebunden. Wir hatten bereits geklärt, dass wir das unterschiedlich sehen. (Mein Vorteil: Ich kenne andere - z.B. FSFE-Mitglieder - die das genauso sehen. *g*)
Und ich sage: Kommt drauf an. Wenn "button" ein Element ist, welches nur in einer Erweiterung/Bibliothek steckt, die unter der GPL veröffentlicht wird und zur Ausführung des Programms notwendig ist bzw. zur Laufzeit eingebunden wird, dann ja. Und das könnte bei KBasic ja der Fall sein. (Wir diskutieren hier ja immer noch über die theoretische Natur der Dinge.) Gruß Dee |
||
|
Anmeldungsdatum: Beiträge: 20095 Wohnort: Schwabenländle |
Mein Vorteil schwindet, weil sich ein anderes FSFE-Mitglied auf Deine Seite geschlagen hat. Das sagt soviel wie: "Eigenständiger geschriebener Quellcode ist nicht der GPL unterworfen." Du hast also einen Mitstreiter gewonnen: "Die GPL ist nur wirksam, wenn ein abgeleitetes Werk entsteht." Nachdem ich jetzt auch noch http://www.ifross.org/ (linke Seite: GPL) gelesen habe, gibt es keine klare Antwort. Es hängt wohl immer davon ab. Zum Beispiel, ob man den Quellcode zur Ableitung dazu zählt oder nicht. Und da gibt es sehr verschwommene Grenzen. Und die Interpreter-Frage bzgl. Perl steht sicher nicht aus Spaß an der Freude in der GPL-FAQ - oder die haben bei der FSFE selbst keine Ahnung, ich weiß es nicht. Man kann die Frage aber wohl nicht im Allgemeinen beantworten und im Speziellen zu KBasic auch nicht, da niemand weiß, was es genau tut. (Okay, der Erfinder wird es wissen, aber der verrät es irgendwie nicht sehr deutlich.) Ich halte fest, dass eigentlich niemand ne Ahnung von der GPL hat bzw. wie sich diese in manchen Fällen wirklich auswirkt. Ich habe zwar viele Meinungen, aber keine klare Aussagen. Das ist doch auch mal ein interessanter Schluss, den man zur GPL festhalten kann. Gruß Dee |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 17665 Wohnort: Berlin |
Dee schrieb:
Nein, so funktioniert das nicht. Im Konfliktfall erlischt vielleicht meine Lizenz, nämlich wenn ich die GPL verwenden müßte, es aber nicht tue. Dann greift nicht automatisch die GPL, sondern dann greift gar nichts - die Lizenz ist void; ungültig.
Ja, weiß ich es? Das sage ich ja - man weiß es nicht, solange man nicht alle Dialekte und Implementierungen gesichtet hat. Und ob man alle gesichtet hat weiß man auch nicht. Meine Mutter hat eine Basicversion für ihre Nähmaschine implementiert, die hatte auch Bytearray. Ich schwör!
Auch Rechtsgelehrte kochen nur mit Wasser. Also bitte - wieso wirkt es Deiner Meinung nach nicht, die Stelle im Gesetz habe ich ja gezeigt, Du bestreitest ja nicht, daß es diese Klausel gibt, aber wieso wirkt sie (hier) nicht?
Pardon - aber das hast Du m.E. noch gar nicht erklärt. Und was macht eine alltägliche Funktion aus? Ich nutze Sinus nicht alle Tage, aber hatte auch mal eine Sinusphase. Andere arbeiten alltäglich mit Splines, mit Atomraketen und Fenstern, Buttons. Die fachlichen Fragen sind von der Programmiersprache unabhängig, und in Programmiersprachen gleicher Prägung (unterschiedliche OOP-Sprachen z.B.) wird daher die Lösung ähnlich aussehen. Es mag hier und da unterschiedliche Ansätze geben, aber in einer Graphic-2D-Lib wird man eine Klasse Rectangle, Circle, Polyeder erwarten, man wird draw, resize und move- Methoden erwarten, Punkte, die eine Rolle spielen, und so weiter. Was sind aber alltägliche Funktionen, woran bemißt man das? Ob es 10 Millionen Verwender gibt, oder 1 Million? 1000 Programmierer? 10? Woher soll der Programmierer wissen, was alltäglich ist und was nicht, und wieso sollen die, die eine Turbinensimulation in der Flugzeugindustrie schreiben ihren Code deshalb schützen dürfen, und jemand, der den 7451ten Editor programmiert nicht? Und auch hier haben wir eine zeitliche Komponente - irgendwer fängt an, und programmiert den ersten IRC-Client, und sein Werk ist geschützt, und 10 Jahre später ist das eine übliche Projektaufgabe im Hauptstudium, und es gibt tausende IRC-Clients, und was früher exclusiv war ist heute gewöhnlich, und eine derartige Bibliothek nicht mehr geschützt?
Das ist kein Vorteil, denn die Wahrheit ist nicht demokratisch.
Du hälst fest an der Überzeugung, daß wenn ich JButton schreibe, ich bestimmt einen bestimmten JButton meine - z.B. den javax.swing.JButton, aber die ganze Softwareindustrie betet seit Jahren das Lied vom portablen Code herunter, vom Programmieren gegen Interfaces, und für mich ist JButton nur ein Konzept, und wer möchte soll eine Klasse schreiben, die den Vertrag von JButton, wie man ihn von javax.swing kennt, erfüllt, und vielleicht nutze ich dann den. Der kann ja XButton genannt werden, dann mache ich ein Sed-Script, welches JButton in XButton umbenennt, und in Sekunden sind alle Vorkommnisse in 1000 Files ersetzt. Ich kann auch meinen Code gleich mit XButton schreiben, und ein umgekehrtes Script beifügen, welches aus XButton JButton macht - und dann? Ist der Vertrieb dann schon ein Lizenzverstoß, weil man aus meinem Code einen Code generieren kann, der gegen eine xy-Bibliothek linkbar wäre (dynamisch, nur zur Laufzeit)? Bei vielen Personen:
Welcher der Schritte ist laut GPL unzulässig? |