プロジェクトで、大きなGPLヘッダーとmath.c
というファイルを見つけました。
//------------------------------------------------------------------------------
/// 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、かっこいいので、最小値を取得する必要があります... this file !?それで、プロジェクト全体を開く必要がありますか?または、数学を再発明する必要がありますか?
私はそれが正気でないとは思わないので、問題は:GPLヘッダーを削除できるのはいつですか?
私は変人にならなければなりませんか?:
unsigned int min( unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG ) { if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG ) { return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE; }
else {return hyrthrtRERG ; } }
真剣に、彼らは私に上記のようなコードを書いて欲しいのですか?
ここの多くのユーザーとは異なり、私は単に提案します:コピーしてください!
コードのフォーマットがコーディング標準に適合していることを確認してください。また、コメントを削除または書き直す必要があります。あなたがそれをコピーしたことを誰も知ることはないでしょう-コードの断片がこれほど単純なものであるなら、あなたはそれを一から書いたのかもしれません。コーディング標準がどういうわけか、関数がスニペットのように正確に見えるようにする必要がある場合は、そのようにしてください-最初から作成した場合と同じように見える限り、そうなります。
考えてみてください、これはこの正確な作品が初めて(!)書かれたことではありません-何かがこの些細なことである場合、自分で書きたくない場合はそれをコピーしない理由はほとんどありません。
この議論をすることは少し不必要に思えます-実際の仕事をするためには実用的である必要があります!
それはあなたの質問に直接答えませんが、これを試してください:
#define min(a,b) ((a) < (b) ? (a) : (b))
私はこれにより、この栄光のある複雑なマクロをパブリックドメインにリリースします。私はこの技術に関する論文を発表しなければならないかもしれませんが。
マクロ恐怖症の場合は、このインラインバージョンを試してください(実際には、SPARCでコーディングしている場合を除いて、enter/exitでmin
のような遍在的な関数をラップしないことで、CPUサイクルを大幅に節約できます。コード):
inline int min(int a, int b)
{
return a < b ? a : b;
}
ささいなスニペットのコードライセンスの問題は、実際には少し厄介です。弁護士に確認してください、しかし私は彼らが実際に認可されることができないか、そして/または実際に認可が強制されることができないと思いたくなります。 Wordの「Word」の著作権を侵害したり商標を付けたりするのと同じように、それを使用する人に頼ることができます。 (おっとっと)
免責事項:私は弁護士ではありません。あなた自身のリスクで私のアドバイスを使用してください。
このmin
の実装は、著作権で保護されていないです。
法的世界では、これは合併法理として知られています(アイデア式の除算とも呼ばれます)。関数の(著作権で保護されていない)ideaは、(著作権で保護されている可能性がある)式と「マージ」されているといいます。したがって、コードは著作権の対象ではありません-自由に使用できます。
安全のため、コピーしないでくださいverbatim。変数に別の名前を使用し、独自のフォーマットを適用し、コメントをWord for Wordにコピーしないでください。このコードの正確なリテラル表現は、著作権で保護されている場合があります。
これは誰かがあなたを訴えることを保証するものではありませんが、少なくともあなたは強力な防御を持っていることを覚えておいてください。
また、コードの一部が著作権で保護されていない場合でも、ソフトウェアの特許の対象となる可能性があることに注意してください(これはmin
関数には当てはまりません)。
BSDライセンス の下で次のコードをリリースしています。そのライセンスの方がはるかに寛容なので、私の実装を使用する場合は著作権の問題に遭遇しないでください。
unsigned int min(unsigned int a, unsigned int b)
{
return (a > b? b: a);
}
それはばかげた状況だと私は同意しますが、あなたに責任があるのはあなた自身だけです。プロプライエタリなコードを書いているなら、GPLライセンスのソースファイルを定期的に読むべきではありません。ファイルシステムからmath.cを削除し、ドキュメントを保持して、必要なAPIの部分を自由に再実装してください。コードを読まなくても、自分のコードが似ているかどうか心配する必要はありません。
無駄だと思いますか? GPLは、エコシステムに恩恵を与えることなく、無料のコードから利益を得ることを意図的に防ぎます。条件を満たせない、または満たさない、さらに別の数学ライブラリを実装したくない場合は、いつでも購入するか、同意できるライセンスが付属する無料の数学ライブラリを見つけることができます。
Microsoftのプログラマは、法的な問題から会社を保護するために、オープンソースコードを読み取ることはできません。純粋に倫理的な理由から、ライセンスを遵守するつもりのないプログラムでも同じことを行う必要があります。
これを使用する権利がありませんmath.c
ですが、min
の実装で市場を独占しようとしている人はいません。 GPLの目標は、プログラマーの「自由」(およびエンドユーザーの自由)を増やすことであり、制限することではありません。 GNUライセンス、FSF、およびフリーソフトウェア運動は、Richard Stallmanから始まりました。Stallmanは、Symbolics LISPの新しいバージョンがリリースされるたびに、最初から再実装することから始めました。FSFは、 GPLライブラリを再実装するために誰かを追いかける(そしてできなかった)。
回答:著者の明示的な許可がある場合のみ。
それは著作権で保護されたコードです。著者の許可なく複製することはできません。
独自のバージョンのmin
を作成するか、別のライセンスを使用するmin
のバリアントをコピーする必要があります。
著作権については、保護されているのはコードであり、notアルゴリズムであることを覚えておいてください。著作権法はテキストに由来します。 「math.c」がコメントにすぎず、実行可能コードがまったくなかったとしても、stillは著作権で保護されます。
これは、Googleが推測したものです。これは配列の常識のようです。
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 }
とにかく、このコードは使用しません。コメントがコードの機能と一致しないためです。コメントではinteger
について説明していますが、コードでは_unsigned int
_を使用しています。この関数の奥深くにどんなエラーが埋め込まれているのか誰が知っていますか?
真剣に、これは「車輪を再発明しないでください」がとんでもないことになり、あなたは塩の粒でそれを取ることを忘れました。独自のバージョンを最初から作成し、コードの命名規則やスタイルガイド(math_min_uint(x, y)
など)と一致させて、機能することを確認し(単体テストなど)、そのまま使用し、著作権の問題がないようにします。 。
経験が増えるにつれ、何度も何度も必要になるこれらの簡単なスニペットはツールボックスに含まれているだけなので、あまり考えずに書き直すか、単に自分のライブラリから取得します。
人々は、著作権法を精神的にも書面的にも、実際にコピーする行為が禁止されていることを忘れているようです-結果が疑わしく似ていても、同じ考えを自分で表現する行為ではありません。
GPLで保護されたコードを取得し、それを変更し、受け取ったライセンスに違反する方法で使用し、それが派生著作物ではないと主張した場合、法律に違反することになります。 2番目のバージョンを使用する場合でも、すべての変数の名前を変更し、フォーマットを変更しましたが、それでも元のバージョンから派生しています。
ただし、独自のバージョンのmin
を作成した場合、タスクが単純であるため、そのようなことを賢明に作成できる方法は非常に多くあるだけであり、少し偶然ですが、バージョンはGPLされたコードとまったく同じになるため、何もコピーしていません。
しかし、どちらの話が法廷で通過するかどうかは別問題です。大きな、またはより複雑なコードサンプルが別の場所に表示され、コメント、書式設定、およびスペルミスが発生した場合、独自に記述したことをだれにも納得させるのは難しく、元のコードを知っていることが示されればなおさらです。ソース(これをここに投稿したという事実を考えると、かなり簡単なはずです)。
「min」の例のようにコードが実際に取るに足らないものである場合、別のオープンソースライセンスの下で他の誰かが同じ機能をすでに実装している可能性が非常に高くなります。
ライセンスによっては、クローズドソースアプリケーションにコードを含めることが許可される場合があります。
30秒で自分で書いてください。まったく同じアルゴリズムを使用できます。コピー/貼り付けしないでください。
著作権はアイデアの表現だけを保護し、アイデア自体は保護しません。コピーしない限り、アイデアを直接使用できます。
FWIW、そのような些細なコードをコピーしても、とにかくトラブルに巻き込まれるとは思えません。損害はゼロであり、それはおそらくほとんどの法域でフェアユースに該当するでしょう。しかし、訴訟は私がそれを危険にさらしたくないと思うほどの痛みです。
GPLコードとしての大きな問題は、コードの配布またはソフトウェアの販売を計画していることです。
内部で使用しているだけの場合、GPLは自由に実行できます。
パッケージの配布を計画している場合-最も簡単なのは、使用したGPLソースと同じ条件でパッケージをGPLすることです。他の方法もありますが、複雑になります。
ソフトウェアの販売を計画している場合は、取得または取得したものと同じGPLライセンスに基づいて使用または修正したGPLコードのソースコードを配布する必要があります。
CではなくC++を使用している場合は、std::min
の標準ライブラリstd::max
または<algorithm>
を使用して、この問題を回避します。
http://www.cplusplus.com/reference/algorithm/min/
それはあなたに一般性を買って、それはどんな匹敵するタイプのためにでも働きます。また、d-bagがそれを発明したと主張し、ソフトウェア特許の対象となっている場合は、ISO委員会で不平を言うことになります。あなたではありません。
一般的なケースでは、誰がコードを公開したかに注意してください。法人、または正気な個人?それが正気な個人である場合(多くのオープンソースの場合のように)、彼らに素敵なメモを書いて許可を得ます。大丈夫だと言って彼らの応答を保存します。問題が解決しました。