In dem Projekt fand ich eine Datei math.c
mit einem großen GPL-Header und ...
//------------------------------------------------------------------------------
/// Returns the minimum value between two integers.
/// \param a First integer to compare.
/// \param b Second integer to compare.
//------------------------------------------------------------------------------
unsigned int min(unsigned int a, unsigned int b)
{
if (a < b) {
return a;
}
else {
return b;
}
}
OK, cool, also muss ich min Wert bekommen und ... diese Datei !? Also muss ich das ganze Projekt deswegen öffnen? Oder muss ich die Mathematik neu erfinden?
Ich glaube nicht, dass es nur verrückt ist, also lautet die Frage: Wann können wir den GPL-Header einfach entfernen?
Muss ich ein Verrückter sein und es tun ?
unsigned int min( unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG ) { if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG ) { return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE; }
else {return hyrthrtRERG ; } }
Wollen sie wirklich, dass ich Code wie den oben genannten schreibe?
the jury did find that one nine-line function that Google acknowledged copying was infringing
(von ArsTechnica ).min
ist nicht urheberrechtlich geschützt. Siehe meine Antwort für Details.Antworten:
Im Gegensatz zu vielen Benutzern hier würde ich einfach vorschlagen: Kopieren Sie es!
Vergewissern Sie sich, dass die Formatierung des Codes Ihrem Kodierungsstandard entspricht und dass Sie den Kommentar möglicherweise entfernen oder neu schreiben sollten. Niemand wird jemals erfahren, dass Sie es kopiert haben - wenn ein Stück Code so einfach ist, hätten Sie es genauso gut von Grund auf neu schreiben können. Wenn Ihr Codierungsstandard es irgendwie erfordert, dass die Funktion genau so aussieht wie im Snippet, dann soll es so sein - solange es so aussieht, als ob Sie es von Grund auf neu geschrieben hätten.
Denken Sie darüber nach, dies ist kaum (!) Das erste Mal, dass dieses genaue Stück geschrieben wurde - wenn etwas so trivial ist, gibt es kaum einen Grund, es nicht zu kopieren, wenn Sie keine Lust haben, es selbst zu schreiben.
Selbst diese Diskussion scheint mir ein wenig überflüssig - wir müssen pragmatisch sein, wenn wir echte Arbeit leisten wollen!
quelle
Let us then say that the programmer wrote his own version of MIN and it ended up looking exactly like the one from math.c - would it then be okay?
Ja, wenn es ein Unfall war. "Welchen Unterschied würde es dann machen, wenn er es gerade kopiert hätte?" Bits haben Farbe . ansuz.sooke.bc.ca/entry/23 Das können die meisten Informatiker nicht verstehen - es ist in der Tat ein komplexes Thema, aber es ist etwas, das vom Gesetz anerkannt wird. Wenn Sie Zweifel haben, ob etwas legal ist oder nicht, sollten Sie mit einem Anwalt sprechen .Es beantwortet Ihre Frage nicht direkt, aber versuchen Sie Folgendes:
Ich gebe hiermit dieses herrliche, komplexe Makro für die Öffentlichkeit frei. Möglicherweise muss ich jedoch einen Artikel über diese Technik veröffentlichen.
Wenn Sie Makrophobiker sind, probieren Sie diese Inline-Version aus (wirklich, wenn Sie nicht auf einem SPARC programmieren, sparen Sie viele CPU-Zyklen, indem Sie eine Funktion nicht so allgegenwärtig umschließen wie
min
im Eingabe- / Beendigungscode):Das Problem der Codelizenzierung für triviale Snippets ist wirklich etwas lästig. Wenden Sie sich an einen Anwalt, aber ich bin versucht anzunehmen, dass sie nicht wirklich lizenziert werden können und / oder die Lizenzierung in der Praxis nicht durchgesetzt werden kann. Genauso wie Sie das Wort "Wort" weder urheberrechtlich schützen noch als Marke kennzeichnen können, stützen Sie sich auf Personen, die es verwenden. (Hoppla)
quelle
min(a++,b++)
.min
.Haftungsausschluss : Ich bin kein Anwalt. Verwenden Sie meinen Rat auf eigenes Risiko.
Diese Implementierung von
min
ist nicht urheberrechtlich geschützt , da es nur sehr wenige sinnvolle Schreibweisen gibt.In der Rechtswelt ist dies als Fusionslehre (auch als Ideenaustausch-Spaltung bekannt) bekannt. Die (nicht urheberrechtlich geschützte) Idee der Funktion soll mit dem (möglicherweise urheberrechtlich geschützten) Ausdruck "verschmolzen" sein . Daher unterliegt der Code nicht dem Urheberrecht - Sie können ihn frei verwenden.
Um auf der sicheren Seite zu sein, kopieren Sie es nicht wörtlich . Verwenden Sie unterschiedliche Namen für Variablen, wenden Sie Ihre eigene Formatierung an und kopieren Sie Kommentare nicht Wort für Wort. Die genaue wörtliche Darstellung dieses Codes ist möglicherweise urheberrechtlich geschützt.
Denken Sie daran, dass dies nicht garantiert, dass jemand Sie nicht verklagt, aber zumindest eine starke Verteidigung hat.
Bedenken Sie auch, dass ein Teil des Codes, der nicht urheberrechtlich geschützt ist, möglicherweise durch ein Softwarepatent geschützt ist (dies ist für Ihre
min
Funktion nicht der Fall ).quelle
Ich veröffentliche den folgenden Code unter der BSD-Lizenz . Da diese Lizenz viel mehr Erlaubnis gibt, sollten Sie nicht auf Urheberrechtsprobleme stoßen, wenn Sie meine Implementierung verwenden.
quelle
min
in Closed-Source-Software finden. @Sholy, jetzt ist es GordonMs Problem, ob er es kopiert hat oder nicht.Es ist eine absurde Situation, stimme ich zu, aber Sie haben nur sich selbst die Schuld. Wenn Sie proprietären Code schreiben, sollten Sie keine GPL-lizenzierten Quelldateien lesen. Entfernen Sie math.c aus Ihrem Dateisystem, bewahren Sie die Dokumentation auf, und implementieren Sie alle erforderlichen Teile der API erneut. Wenn Sie den Code nicht lesen, müssen Sie sich keine Sorgen machen, wenn Ihr eigener Code ähnlich ausfällt.
Verschwenderisch, sagst du? Die GPL verhindert absichtlich, dass Sie von kostenlosem Code profitieren, ohne dem Ökosystem etwas zurückzugeben. Wenn Sie die Bedingungen nicht erfüllen können oder nicht erfüllen und keine weitere Mathematikbibliothek implementieren möchten, können Sie immer eine kaufen oder eine kostenlose kaufen, die mit einer Lizenz geliefert wird, die Sie akzeptieren können.
Microsoft-Programmierer dürfen keinen Open-Source-Code lesen, um das Unternehmen vor rechtlichen Problemen zu schützen. Aus rein ethischen Gründen sollten Sie dasselbe mit jedem Programm tun, dessen Lizenz Sie nicht einhalten möchten.
Sie haben kein Recht, dies zu nutzen
math.c
, aber niemand versucht, den Markt für Implementierungen von zu erobernmin
. Das Ziel der GPL ist es, die "Freiheit" des Programmierers (und die Freiheit des Endbenutzers) zu erhöhen und nicht einzuschränken. Die GNU-Lizenz, die FSF und die Freie-Software-Bewegung begannen mit Richard Stallman, und Stallman begann damit, jede neue Version von Symbolics lisp von Grund auf neu zu implementieren. Die FSF würde (und könnte) niemanden für die Neuimplementierung einer GPL-Bibliothek suchen.quelle
Antwort: Nur mit ausdrücklicher Genehmigung des Autors.
Das ist urheberrechtlich geschützter Code. Sie können es nicht ohne Erlaubnis des Autors kopieren.
Sie müssen eine eigene Version von schreiben
min
oder eine Variante kopierenmin
, für die eine andere Lizenz verwendet wird.Denken Sie daran, dass beim Urheberrecht der Code geschützt ist, nicht der Algorithmus. Das Urheberrecht ergibt sich aus dem Text. Selbst wenn "math.c" nichts als Kommentare und überhaupt keinen ausführbaren Code hätte, wäre es dennoch urheberrechtlich geschützt.
quelle
min
bestimmte Zeichenfolge, die gerade implementiert wirdmin
.Dies ist, was Google angeblich abgezockt hat. Dies scheint ein gesunder Menschenverstand für ein Array zu sein.
quelle
Ich werde diesen Code sowieso nicht verwenden, da der Kommentar nicht mit dem Code übereinstimmt. Der Kommentar spricht über
integer
, während der Code verwendetunsigned int
. Wer weiß, welche Fehler in den Tiefen dieser Funktion verborgen sind?Im Ernst, hier wird "erfinde das Rad nicht neu" lächerlich und du hast vergessen, es mit einem Körnchen Salz einzunehmen. Schreiben Sie einfach Ihre eigene Version von Grund auf neu, stimmen Sie sie mit der Namenskonvention und dem Style-Guide Ihres Codes überein (z. B.
math_min_uint(x, y)
), stellen Sie sicher, dass sie funktioniert (Komponententest oder was auch immer), und fahren Sie mit dem Leben und ohne Copyright-Probleme fort.Mit zunehmender Erfahrung befinden sich diese trivialen Schnipsel, die Sie immer wieder benötigen, nur in Ihrer Toolbox und Sie werden sie neu schreiben, ohne zu viel darüber nachzudenken, oder sie einfach aus Ihrer eigenen Bibliothek beziehen.
quelle
Die Leute scheinen zu vergessen, dass das Urheberrecht sowohl im Geiste als auch im Buchstaben bedeutet, dass das Kopieren verboten ist - nicht das Ausdrücken des gleichen Gedankens selbst, auch wenn das Ergebnis verdächtig ähnlich ausfällt.
Wenn Sie den GPL-Code nehmen, ändern, in einer Weise verwenden, die gegen die Lizenz verstößt, unter der Sie ihn erhalten haben, und behaupten, es handele sich nicht um eine abgeleitete Arbeit, verstoßen Sie gegen das Gesetz. Auch wenn Sie Ihre zweite Version verwenden - Sie haben die Namen aller Variablen geändert und die Formatierung geändert, sie wurde jedoch immer noch vom Original abgeleitet.
Wenn Sie jedoch Ihre eigene Version schreiben
min
und aufgrund der Trivialität der Aufgabe, der Tatsache, dass es nur so viele Möglichkeiten gibt, wie Sie so etwas sinnvoll schreiben können, und ein bisschen Zufall, ist Ihre Version letztendlich genau identisch in den GPL-Code, dann haben Sie nichts kopiert.Ob eine der beiden Geschichten vor Gericht verhandelt wird oder nicht, ist jedoch eine andere Frage. Wenn ein größeres oder komplexeres Codebeispiel mit Kommentaren, Formatierungs- und Rechtschreibfehlern an anderer Stelle auftaucht, fällt es Ihnen schwer, jemanden davon zu überzeugen, dass Sie es unabhängig geschrieben haben source (was angesichts der Tatsache, dass Sie es hier gepostet haben, ziemlich trivial sein sollte).
quelle
Wenn der Code als "min" -Beispiel wirklich trivial ist, besteht eine sehr hohe Wahrscheinlichkeit, dass jemand anderes dieselbe Funktionalität bereits unter einer anderen Open-Source-Lizenz implementiert hat.
Abhängig von der Lizenz kann es durchaus sein, dass Sie den Code in Ihre Closed-Source-Anwendung aufnehmen dürfen.
quelle
Schreiben Sie es einfach selbst in 30 Sekunden. Sie können genau denselben Algorithmus verwenden. Nur nicht kopieren / einfügen.
Das Urheberrecht schützt nur den Ausdruck einer Idee, nicht die Idee selbst. Sie können die Idee direkt verwenden, sofern Sie sie nicht kopieren.
FWIW, ich bezweifle, dass das Kopieren eines so trivialen Codes Sie sowieso in Schwierigkeiten bringen würde. Schäden wären gleich Null und würden wahrscheinlich in den meisten Ländern unter fairen Bedingungen verwendet. Aber Rechtsfälle sind so schmerzhaft, dass ich es nicht riskieren möchte.
quelle
Da es sich um einen GPL-Code handelt, ist die große Frage, ob Sie planen, Ihren Code zu verbreiten oder Ihre Software zu verkaufen.
Wenn Sie es nur intern verwenden, können Sie mit der GPL völlig frei tun, was Sie möchten.
Wenn Sie vorhaben, Ihr Paket zu vertreiben, ist es am einfachsten, Ihr Paket zu denselben Bedingungen wie die von Ihnen verwendeten GPL-Quellen zu veröffentlichen. Es gibt andere Möglichkeiten, aber es wird kompliziert.
Wenn Sie vorhaben, Ihre Software zu verkaufen, müssen Sie den Quellcode für jeden von Ihnen verwendeten und / oder geänderten GPL-Code unter derselben GPL-Lizenz verbreiten, unter der Sie ihn erhalten haben.
quelle
Wenn Sie C ++ und nicht C verwenden, umgehen Sie dieses Problem, indem Sie die Standardbibliothek verwenden
std::min
oderstd::max
in<algorithm>
:http://www.cplusplus.com/reference/algorithm/min/
Das verschafft Ihnen Allgemeingültigkeit und funktioniert für jeden vergleichbaren Typ. Außerdem: Wenn d-bag behauptet, sie hätten es erfunden und seien durch Softwarepatente geschützt, werden sie vor dem ISO-Komitee rumoren ... nicht Sie.
Notieren Sie sich im Allgemeinen, wer den Code veröffentlicht hat. Firma oder gesunde Person? Wenn es sich um eine vernünftige Person handelt (wie dies bei vielen Open Source-Anwendungen der Fall ist), schreiben Sie ihnen eine nette Nachricht und holen Sie die Erlaubnis ein. Speichern Sie die Antwort und sagen Sie, dass es in Ordnung ist. Problem gelöst.
quelle
Für den allgemeinen Fall: Komplexerer Code, der definitiv urheberrechtlich geschützt ist, im Gegensatz zu min und max (der urheberrechtlich geschützt sein kann oder nicht).
Dann lizensieren Sie Ihren Code in Übereinstimmung mit der Bibliothek, dh GPL! Beachten Sie jedoch, dass es LGPL-Bibliotheken (und GPL mit Ausnahmen) gibt, mit denen Sie deren Implementierungen verwenden können, während Sie Ihren Code mit einer beliebigen Lizenz versehen.
quelle