GPLライセンスで「Hello World」コードを盗まないために何をする必要がありますか?


42

プロジェクトでmath.cは、大きなGPLヘッダーと...

//------------------------------------------------------------------------------
/// 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、クールなので、最小値を取得する必要があります... ... このファイル!?だから、私はそれのためにプロジェクト全体を開く必要がありますか?または、数学を再発明する必要がありますか?

私はそれが単なる狂気だとは思わないので、質問は次のとおりです。GPLヘッダーを削除できるのはいつですか。

は変人であり、それをしなければなりませんか?:

unsigned int min(             unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG            ) {  if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG            ) {  return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE;  }
else {return hyrthrtRERG            ;    } }

真剣に、彼らは私に上記のようなコードを書いて欲しいのですか?


22
さて、最近のGoogle対Oracleの場合the jury did find that one nine-line function that Google acknowledged copying was infringingArsTechnicaから)。
ゼノン

5
Aww on come、seriously、min?
ミルチアチレア

33
私はこの質問の存在そのものが悪いことを証明していると言うだろう-プログラマの仕事は少なく、プログラミング、より多くの法的な混乱や官僚になってきた
K.Steff

4
コピーします。のような些細な機能minは著作権で保護されていません。詳細については私の答えをご覧ください。
トニー・ポニー

6
@Loki、あなたは1マイル足りません。アルゴリズムは、著作権ではなく特許で保護されています。著作権は著者の死後70年で失効するため、60年代に著作権で保護された作品はまだ非常に新鮮です。最後に、問題はアルゴリズムではなく、このコードをコピーすることです。
アレクシス

回答:


53

ここにいる多くのユーザーとは異なり、単にコピーすることをお勧めします!

コードのフォーマットがコーディング標準に合っていることを確認し、おそらくコメントを削除または書き換える必要があります。誰もあなたがそれをコピーしたことを知ることはありません-コードの一部がこのように単純な場合、あなたは最初からそれを書いたかもしれません。コーディング標準が何らかの形でスニペットのように正確に見えるように関数を必要とする場合は、そうする必要があります-ゼロから作成した場合に見えるように見える限り。

考えてみてください。この正確な作品が初めて書かれたのは、これはほとんどありません(!)。これは些細なことですが、自分で書きたくない場合は、コピーしない理由はほとんどありません。

この議論をすることでさえ、私には少し不必要に思えます-実際の仕事を成し遂げるには、実用的である必要があります!


5
本当の質問は、些細なことと些細でないことの間の障壁であり、人々が私のコードを「LOOK IT'S MY GPL MIN REALIZATION!」と同じように指摘しないことを絶対に確実にする方法があります...私は本当にそれらの人々を恐れています> _ <
cnd

20
まあ、著作権には独創性のしきい値の概念があります。そして、そのような単純な方法は著作権で保護されるべきではありません。ただし、IANAL、および管轄区域は異なります。それでも、すべてのCS学部生がまったく同じ方法で少なくとも5回書いたものは、これに非常によく当てはまるかもしれません。
ジョーイ

4
@nilu: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?はい、それが事故だった場合。「もし彼がそれをコピーしただけなら、どのような違いが生じるでしょうか?」ビットには色があります。ansuz.sooke.bc.ca/entry/23これは、ほとんどのコンピューター科学者が理解できるものではありません-それは確かに複雑なトピックですが、法律によって認識されているものです。何かが合法かどうか疑問がある場合は、弁護士相談するのが最善でした
マークバイヤーズ

4
@alexis:私はあなたの主張を理解していますが、私は本当に同意しません-結果のコードが同一であれば、プログラマー以外は誰もそれがコピーされたか、ゼロから書かれたかを知ることができません。明らかに、minの実装にほとんど問題はなく、おそらく別の実装を見つけるよりも時間がかかりません。しかし、プログラマーが実際にそれをコピーし、関数を自分で書いていないことを他の誰も知らない場合、その後どのような損害が生じましたか?プログラマーが何らかの「罪悪感」を感じない限り、答えはありません。残りは単にセマンティクスです。
-nilu

5
@MarkByers:「証明できない」と言うとき、犯罪が行われたことを示す物理的証拠は存在しないことを意味します。犯された犯罪はプログラマの心に完全に限定されています。明らかに、これは、お菓子が盗まれた場合には当てはまりません。これは世界に物理的な影響を及ぼします(ロリポップ-= 1)。「犯罪」があなた自身の心に限定されている場合、それが道徳的か不道徳かを判断するのは誰ですか?
-nilu

18

それはあなたの質問に直接答えませんが、これを試してください:

#define min(a,b) ((a) < (b) ? (a) : (b))

この輝かしい複雑なマクロをパブリックドメインにリリースします。このテクニックに関する論文を発表する必要があるかもしれませんが。

マクロを嫌うなら、このインラインバージョンを試してください(実際、SPARCでコーディングしているのでない限り、関数をminenter / exitコードのように遍在しないようにラップすることで、CPUサイクルを大幅に節約できます)。

inline int min(int a, int b)
{
    return a < b ? a : b;
}

些細なスニペットのコードライセンスの問題は、本当に面倒です。弁護士に確認してください。しかし、私は彼らが実際に免許を与えられない、および/または実際に免許を強制することはできないと思いたくなります。「単語」という単語の著作権や商標を取得できず、それを使用する人々に頼ることができるのと同じです。(おっと)


1
ああ、彼らは確かにそのコードを著作権で保護することができますが、アルゴリズムの単純さを考えると、コメントをそのまま残すなどの愚かなことをしない限り、コピーしたことを法廷で証明するのは難しいでしょう。同じコードを使用しないでください。ルールは、独自の頭脳を使用して作成した場合にのみ行うことができ、元のコードをいかなる方法でもコピーしなかったことです。
ロボットを取得

2
@StevenBurnapもちろん、元のコードにも同じ問題があります。著作権を持っていることを証明できますか(つまり、以前の実装からコピーしなかったなど)。
リチャード

19
あなたがやろうとすると、minのマクロバージョンに問題が生じますmin(a++,b++)

4
「これをパブリックドメインにリリースする」ことは非常に米国中心です。それは多くの国で同じことを意味するものではなく、実際、一部の国では法的に不可能です。

9
おかげですが、2000年代のコンパイラでは、コンパイラはのような些細なことをインライン化できminます。
DeadMG

18

免責事項:私は弁護士ではありません。あなた自身の責任で私のアドバイスを使用してください。

この実装min著作権で保護されていません。これを記述する合理的な方法はごくわずかしかないためです。

法的世界では、これは合併ドクトリン(アイデアと表現の区分とも呼ばれる)として知られています。この関数の(著作権で保護されていない)アイデアは、(著作権で保護されている可能性がある)表現と「マージ」されたと言われています。したがって、コードは著作権の対象ではありません。自由に使用できます。

安全のために、そのままコピーしないでください。変数に異なる名前を使用し、独自の書式を適用し、コメントを単語ごとにコピーしないでください。このコードの正確なリテラル表現は、著作権で保護されている場合があります。

これは誰かがあなたを訴えることを保証するものではないことを心に留めておいてください、しかし少なくともあなたは強力な防御を持つでしょう。

また、コードの一部が著作権で保護されていない場合でも、ソフトウェアの特許で保護されている可能性があることに注意してください(これはあなたのmin機能には当てはまりません)。


2
それをオラクルに伝えてみてください!
GordonM

1
たぶん、9行の関数は簡単なことではありませんでした...コードを参照してください。
トニー・ポニー

1
Programmers.stackexchange.com/a/148362/28718は、それが正しいコードであると仮定すると、私にはかなり簡単なようです。
GordonM

12

私はBSDライセンスの下で次のコードをリリースしています。そのライセンスははるかに寛容なので、私の実装を使用する場合、著作権の問題に遭遇するべきではありません。

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}

そのGPLコードを封印して書き換えないことをどのようにして確認できますか?:Pは、(冗談)
CND

1
あなたではない。しかし、私のコードを使用した場合、誠意を持って使用したと主張できます。
GordonM

3
新しい時代が幕を開けたので、兄弟たちを喜ばせてください- minクローズドソースのソフトウェアで見つけることができます。また、@ Sholy、今では彼がそれをコピーしたかどうかはGordonMの問題です。
K.ステフ

5
また、「クリエイティブコモンズ」でリリースしています。ここに貼り付けられたコードについては、このページの下部をご覧ください。
マーティンヨーク


11

それはばかげた状況です、私は同意します、しかし、あなたには責任があります。プロプライエタリなコードを書いている場合、GPLライセンスのソースファイルを読んではいけません。ファイルシステムからmath.cを削除し、ドキュメントを保持し、必要なAPIの部分を自由に再実装してください。コードを読まなくても、独自のコードが似ているかどうか心配する必要はありません。

無駄だと言う?GPLは、エコシステムに恩返しをせずに、無料のコードから利益を得ることを意図的に防ぎます。条件を満たせない、または満たさない場合で、さらに別の数学ライブラリを実装したくない場合は、いつでも購入するか、受け入れることができるライセンスが付属する無料のライブラリを見つけることができます。

Microsoftのプログラマーは、会社を法的問題から保護するために、オープンソースコードを読み取ることは許可されていません。純粋に倫理的な理由から、ライセンスを厳守するつもりのないプログラムでも同じことをすべきです。

あなたはこれを使用する権利がありませんが、math.c誰もの実装で市場を追い詰めようとしていませんmin。GPLの目標は、プログラマーの「自由」(およびエンドユーザーの自由)を増やすことであり、それを制限することではありません。GNUライセンス、FSF、およびフリーソフトウェアムーブメントは、リチャードストールマンから始まり、ストールマンは、Symbolics Lispの新しいバージョンがリリースされるたびに、ゼロから再実装することから始めました。FSFは、GPLライブラリを再実装するために誰かを追いかけることはありません(できませんでした)。


しかし、それは本当に奇妙な例です。それは例であり、それを読んで従わなければならないことを意味します...しかし、私が理解する限り、ここでGPLライセンスを選択しないことは自由です。ストールマンが誰であるかを知っている私はそう;)
CND

2
申し訳ありませんが、あなたが何を言っているのかわかりません!どんな例?(また、ストールマンが誰であるかを私に尋ねていますか?それをグーグル。または単にウィキペディアを確認してください。)
アレクシス

3
「Microsoftのプログラマーはオープンソースコードを読むことを許可されていません」ああ、それは恐ろしいことです-それについて読むことができる場所はどこにありますか?Googleは支援していません。
アマラ

良い質問。Iron Python開発フォーラムでそれについて読みましたが、残念ながら今は見つけることができません。概要:Jim Hugunin(hugunin.net/microsoft_farewell.html)は、Pythonの実装を見ることが許可されていないと述べ、誰かが自分のコードを見ることが許可されているかどうかを冗談で尋ねました(MicrosoftはIron Pythonをオープンソースにしました) 。答えは次のとおりです。IronPythonに対して特別な例外を作成しました。
アレクシス

GPLの自由を高めることを目的とする人々は、プログラムのすべてのユーザーであり、(特に)プログラマーではありません。
ジェームズヤングマン

7

回答:著者の明示的な許可がある場合のみ。

それは著作権で保護されたコードです。著者の許可なしにコピーすることはできません。

独自のバージョンのをmin作成するかmin、別のライセンスを使用するバリアントをコピーする必要があります。

著作権で、アルゴリズムではなく、保護されているコードであることを忘れないでください。著作権法はテキストに基づいています。「math.c」はコメントに過ぎず、実行可能なコードがまったくなくて、著作権で保護されています。


1
自分のバージョンとはどういう意味ですか?MINの自分のバージョン、陽気に聞こえます!
CND

2
あなたが所有していないことを覚えておいてください、あなたはminたまたま実装する特定の文字のシーケンスを所有していますmin
ロボットを取得

2
個人的に使用する場合を除き、著者の許可なしに変更することはできません。ゼロから書き直す必要があります。それが全体のポイントです。空白のエディターに座って、それとほぼ同じものを書いた場合、コピーしなかったので問題ないことに注意してください。(メモリから入力していないと仮定します。)
ロボットを手に

2
いいえ、冗談ではありません。そして、はい、おそらくあなたはこのような場合にそれで逃げることができます。あなたがやったことを証明するのは著作権者の責任です。法律を擁護するのではなく、法律が何であるかをあなたに伝えていることに注意してください。
ロボットを取得

3
これらの些細なことを書き直さないと、他の人の作業を許可されていない方法で使用しているからです。必要ないほど簡単な場合は、使用しないでください。
アレクシス

6

これはおそらくGoogleがrしたものです。これは、アレイの常識のようです。

 908     /**
 909      * Checks that fromIndex and toIndex are in range, and throws an
 910      * appropriate exception if they aren't.
 911      *
 912      * @param arrayLen the length of the array
 913      * @param fromIndex the index of the first element of the range
 914      * @param toIndex the index after the last element of the range
 915      * @throws IllegalArgumentException if fromIndex > toIndex
 916      * @throws ArrayIndexOutOfBoundsException if fromIndex < 0
 917      *         or toIndex > arrayLen
 918      */
 919     private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
 920         if (fromIndex > toIndex)
 921             throw new IllegalArgumentException("fromIndex(" + fromIndex +
 922                        ") > toIndex(" + toIndex+")");
 923         if (fromIndex < 0)
 924             throw new ArrayIndexOutOfBoundsException(fromIndex);
 925         if (toIndex > arrayLen)
 926             throw new ArrayIndexOutOfBoundsException(toIndex);
 927     }

これがすべてである場合、判決は控訴で却下されます。しかし、Wiredによると、裁判官はGoogleが他の8つのファイルをコピーしたことも発見した。Wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony the Pony

5
はい。ただし、「常識」は著作権の基準ではありません。それは、彼らがコピーして編集したのか、それともゼロから自分自身を書いたのかです。何かが「常識」であるかどうかは、著作権ではなく特許のテストです。言い換えれば、Oracleはそのテキストを著作権で保護できますが、そのアルゴリズムの特許を取得することはできません。
ロボット

これらの9行は、合併の教義の典型的な例です。配列の範囲チェックを実行する方法は他にいくつありますか?
トニー・ポニー

1
@TonythePony、ロット、関数がテキストメッセージを含む例外をスローする場合。
avakar

4
グーグルでこのテキストをコピーした人がサンでそれを書いた人であると言及した人はほとんどいません。プログラマーは、ストールマン(狂気のひげを生やした過激派)が正しいことを認識しなければなりません。すべての悪の根源であるお金は、人々がそもそもテクノロジーに参加する理由を忘れさせます。:-/
HostileFork

5

コメントはコードの動作と一致しないため、とにかくこのコードは使用しません。integerコードがを使用してunsigned intいる間、コメントは話します。この関数の奥深くにどんなエラーが埋められているのか誰が知っていますか?

真剣に、これは「車輪を再発明しない」がばかげている場所であり、あなたは塩の粒でそれを取ることを忘れていました。独自のバージョンをゼロから記述し、コードの命名規則とスタイルガイド(たとえばmath_min_uint(x, y))に合わせて、それが機能すること(ユニットテストなど)を確認し、著作権の問題なしに続けます。

経験が増えるにつれて、必要なこれらの些細なスニペットはツールボックスにあり、あまり考えずに書き直すか、単に自分のライブラリから取得します。


2

人々は、著作権法は、精神と文字の両方において、実際にコピーする行為が禁止されていることを忘れているように見えます。

GPLされたコードを受け取り、それを修正し、それを受け取ったライセンスに反する方法で使用し、それが派生著作物ではないと主張する場合、あなたは法律を破っています。2番目のバージョンを使用する場合でも、すべての変数の名前を変更し、フォーマットを変更しましたが、元の変数から派生しています。

ただし、自分のバージョンのを作成しmin、タスクの些細さのために、そのようなことを賢明に書くことができる方法は非常に多く、偶然の一致があるという事実は、最終的にはまったく同じになりますGPLされたコードに、あなたは何もコピーしていません。

しかし、どちらかの物語が法廷で成立するかどうかは別の問題です。より大きな、またはより複雑なコードサンプルがコメント、フォーマット、およびスペルミスを備えた別の場所に表示された場合、独自に作成したことを誰かに納得させるのは難しくなります。ソース(ここに投稿したという事実を考えると、これはかなり簡単なはずです)。


1

「min」の例のようにコードが本当に些細なものであれば、他の誰かが別のオープンソースライセンスで同じ機能を既に実装している可能性が非常に高くなります。

ライセンスによっては、クローズドソースアプリケーションにコードを含めることを許可する場合があります。


1

30秒で自分で書いてください。まったく同じアルゴリズムを使用できます。コピー/貼り付けはしないでください。

著作権は、アイデア自体ではなく、アイデアの表現のみを保護します。コピーしない限り、アイデアを直接使用できます。

FWIW、私はそのような些細なコードをコピーすると、とにかくトラブルに巻き込まれるとは思わない。損害はゼロになり、おそらくほとんどの司法管轄区ではフェアユースになります。しかし、訴訟は非常に苦痛なので、私はそれを危険にさらしたくないでしょう。


1

そのGPLコードとしてここでの大きな問題は、コードを削除するか、ソフトウェアを販売することです。

内部で使用しているだけの場合、GPLを使用すると、自由に自由に実行できます。

パッケージの配布を計画している場合、最も簡単なのは、使用したGPLソースと同じ条件でパッケージをGPLすることです。他の方法もありますが、複雑になります。

ソフトウェアの販売を計画している場合は、入手したGPLライセンスに基づいて使用または修正したGPLコードのソースコードを配布する必要があります。


0

CではなくC ++を使用している場合は、標準ライブラリを使用するstd::minstd::max<algorithm>次の場所でこの問題を回避してください。

http://www.cplusplus.com/reference/algorithm/min/

それはあなたに一般性を買ってくれます。また、d-bagがそれを発明し、ソフトウェア特許で保護されていると主張しようとする場合、ISO委員会にごまかします...あなたではありません。

一般的なケースでは、誰がコードを公開したかを書き留めてください。株式会社、または正気の個人?それが健全な個人である場合(多くのオープンソースの場合のように)、彼らに素敵なメモを書き、許可を得てください。大丈夫だという回答を保存します。問題が解決しました。


-2

一般的な場合:minおよびmax(著作権可能かどうかは異なります)とは対照的に、間違いなく著作権保護可能なより複雑なコード。

次に、ライブラリ、つまりGPLに準拠してコードのライセンスを取得します!ただし、LGPLライブラリ(および例外を含むGPL)を使用すると、コードを任意のライセンスで提供しながら実装を使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.