GPLの静的リンクルールと動的リンクルールは、インタープリター言語にどのように適用されますか?


19

私の理解では、GPLは非GPLコードからGPLコードへの静的リンクを禁止していますが、非GPLコードからGPLコードへの動的リンクは許可しています。では、コードはインタプリタ言語(Perlなど)で記述されているため、問題のコードがまったくリンクされていないのはどちらですか?

動的リンクと見なされた場合、ルールを活用するのは簡単すぎるように思えますが、一方で、静的と見なされた場合、非GPLコードからGPLコードを合法的に参照することも不可能と思われます!コンパイルされた言語は、少なくとも静的リンクと動的リンクを区別しますが、すべての「リンク」がスクリプトを実行しているだけの場合、明示的なライセンスなしでは意図が何であるかを伝えることは不可能です。

または、この問題に対する私の理解が間違っており、質問が議論の余地がありますか?動的リンクを含む「クラスパス例外」も聞いたことがあります。それはGPLの一部ではなく、代わりに追加できるものなので、動的リンクはライセンスにこの例外が含まれている場合にのみ許可されますか?



2
@delnan lgpl!= gpl
ヨハン

回答:


16

インタプリタ言語に関する特定の質問に関しては、GPL FAQは非常に明確です:

インタプリタにとって、解釈されるプログラムは単なるデータです。著作権法に基づくGPLのようなフリーソフトウェアライセンスでは、インタープリターを使用するデータを制限できません。任意のデータ(解釈されたプログラム)で任意の方法で実行でき、そのデータのライセンスを誰にでも付与する必要はありません。

動的リンクと静的リンクに関する一般的な質問については。まず、FSFとStallmanの見解では、リンクが静的か動的かは問題ではなく、GPLはどちらの方法でも感染します。FSF GPL FAQから:

プログラムがプラグインを動的にリンクし、それらが互いに関数呼び出しを行い、データ構造を共有する場合、それらは単一のプログラムを形成すると考えます。これは、メインプログラムとプラグインの両方の拡張として扱われる必要があります。これは、GPLでカバーされたプラグインとフリーでないメインプログラムの組み合わせがGPLに違反することを意味します。

そして

[プログラムの名前] を他のモジュールと静的または動的にリンクすると、 [プログラムの名前] 基づいて結合された作業が行われます。したがって、GNU General Public Licenseの契約条件はすべての組み合わせをカバーします

ただし、これは法的な観点からは疑問です。動的リンクに関して実際に法廷に行った唯一のケースでは、Galoob v。Nintendo-控訴裁判所は、派生著作物には「著作権で保護された著作物の一部を何らかの形で組み込む必要がある」と裁定しました。動的リンクの場合はそうではありません。

とにかく、動的リンクが実際に感染するかどうかにかかわらず、回避策があります。たとえば、NvidiaがLinux用のバイナリドライバーを提供するために使用します。(L)GPLラッパーを作成しますが、作成者として、特定のクローズドソースとリンクする特別な例外を追加できます。FSF GPL FAQをご覧ください


派生著作物の性質の1つは、元の著作権者の著作物をきれいに分離できないことです。Bob's Foo()が静的にリンクされてJoe'sを呼び出す場合Bar()、どの著作権所有者がBob CALL間の指示を行うべきですか?このような相互作用は、「派生的​​な作業」を構成するのに十分でしょう。ただし、Joeの作業が完全に1つのファイル内に残り、Bobの作業が完全に別のファイル内にある場合、同じディスク上の異なるディレクトリにあるこれらのファイルの単なる外観は、派生ではなく集約を構成します。
-supercat

2
@thepaul:派生著作物を構成するには、著作権で保護された作品の少なくとも一部を作品に含める必要があるとする法的優先権が既にあります。ストールマンの信念は、実際の実際の法律にはほとんど基盤がありません。
バルテック

1
@thepaul:一方では、90億ドルの会社で使用されている法的慣行があり、他の主張では、アルミ箔の帽子を着用するのが好きな人によるものです。あなたは、後者の方が信頼性が高いと主張し、あなたはそれを完全に信じる権利があります。
バルテック14年

1
あなたはGPL FAQの間違った部分を非常に明確に引用しています。あなたが引用した部分は、プログラミング言語インタープリターがGPLの下でリリースされた場合、それによって解釈されるように書かれたプログラムはGPL互換ライセンスの下にある必要があるということですか?!したがって、[GPL-licensed]インタープリターに。関連する部分は、最後の2つの段落です。[...]別の類似した非常に一般的なケースは、ライブラリー自体に解釈されるインタープリターを提供することです。たとえば、Perlには多くのPerlモジュールが付属しています[...]
Chris Wesseling

1
«インタープリターにとって、インタープリタープログラムは単なるデータです。著作権法に基づくGPLのようなフリーソフトウェアライセンスでは、通訳を使用するデータを制限できません。任意のデータ(解釈プログラム)で好きな方法で実行でき、そのデータのライセンスを誰にでも付与する必要はありません。インタプリタ言語のGPLプログラムでnon-libreプラグインを使用するトピックはカバーしていません。
tuxayo

4

注:これは法的質問です。Programmers.SEは法的フォーラムではなく、プログラミングフォーラムです。ここの人々はプログラミングについてかなり知っていますが、法律については何も知りません。法的な質問をしたい場合は、法的なフォーラムで質問する必要があります。そこでは、主題について実際に何かを知っている人がいます。


GPLは静的リンクまたは動的リンクについて何も述べていません。それも、リンクについては何も言っていないすべてのを。私が話をした弁護士や裁判官は皆、静的リンクと動的リンクの問題は完全に無関係だと言っています。

著作権は創造性に関するものです。静的リンクと動的リンクは、技術的な実装の詳細です。何かが静的または動的にリンクされているかどうかは創造的な行為ではありませんが、作品の著作権の状態を変更することはできません。

あなたの質問では、「解釈された言語」について話します。しかし、この用語は意味がありません。インタープリター言語のようなものはありません。言語は、数学的な規則と制限の抽象的なセットです。言語は解釈もコンパイルもされません。言語はただです。「解釈された言語」という用語は単に間違っているだけでなく、無意味です。英語が型付き言語である場合、それは型エラーになります。

解釈とコンパイルは、言語ではなく、インタープリターまたはコンパイラーの特徴です!すべての言語はインタープリターで実装でき、すべての言語はコンパイラーで実装できます。ほとんどの言語には両方があります。最新の言語実装のほとんどは、両方を単一の実行エンジンに組み合わせています。

たとえば、Rubinius Ruby実装には、RubyコードをRubiniusバイトコードにコンパイルする静的事前コンパイラ、Rubiniusバイトコードを解釈するインタープリタ、RubiniusバイトコードをLLVMにコンパイルする動的ジャストインタイムコンパイラが含まれます。 IR。LLVMインフラストラクチャがネイティブマシンコードに順番にコンパイルします。MacRuby Ruby実装にはインタープリターがまったく含まれていません。Rubyコードを直接LLVM IRにコンパイルし、さらにネイティブマシンコードにコンパイルします。

一方、CまたはC ++のインタープリターがあります。

これらはすべて技術的な詳細にすぎません。それは完全に著作権とは無関係です。

誰かが他の人の著作権を侵害するかどうかは、第三者がプログラムをインタープリターで実行するか、最初にコンパイルするかを選択するかどうかに依存するということは意味がありません。

問題は、ある作品が別の作品から派生したものかどうかです。動的にリンクしても導出できますが、静的にリンクしてもまったく導出できません。


解釈された「中間コード」言語はどうですか?GPLの背後にある原則の1つは、オリジナルと同じ言語ツールを使用できる合理的なマシンに誰でもプログラムを適応できるようにすることです。中間コードインタープリターのソースコードと、実行可能な中間フォームコードの束を誰かがリリースした場合、その中間コードBLOBに関連する情報をリリースするためのルールはどうなりますか?マシン固有のコンパイル済み実行可能ファイルとは異なり、中間コードBLOBは完全に移植可能です。
supercat

ごめんなさい; stackoverflow.comで質問するつもりでしたが、タグ「gpl」を使用したときに代わりにここで質問することを提案しました。この種の議論はここでも禁止されていますか?exec( "killall -9弁護士"); :D-
エコリス

そして、はい、実装の詳細が再利用の法的地位に影響を及ぼさないということは意味がありません。私はちょうどそのような区別があると思い、説明を求めていました!
エコリス

2
@ekolis:それ自体は禁止されていません。人がいるときには、それが(例えばプログラマのように、)法的問題については何も知らない人の法的な質問をするのは良いアイデアではないということだけだあなたの代わりに求めることができる(弁護士別名)法的問題について知っているが。私は弁護士に対して何もしません、まったく逆です。しかし、私はアルゴリズムに関するアドバイスを求めたり、プログラマーに法的アドバイスを求めたりすることはありません。
ヨルグWミットタグ

IANAL:それは技術的な詳細かもしれませんが、法的に重要な方法で配布されているものを変更するため、それでも大きな違いをもたらします。静的リンクを使用すると、GPLの規則に従ってGPLの外部に配布できない複合作品を構築できます。動的リンクを使用すると、たとえば、ライブラリをソフトウェアとともにZIPファイルにパッケージ化する場合にも、これを実行できます。しかし、動的リンクを使用すると、ライブラリなしで配布できます。それ自体では機能しなくても、100%の作業になります。もちろん、GPLの下でライブラリを提供することもできます。
flarn2006

0

これやIANALなどにどれほどの真実があるのか​​わかりません。しかし、私の解釈では、重要なのは、リンクするライブラリが「バイナリ」に含まれている何らかの形式であるかどうかです(動的プログラミング言語の場合、「バイナリ」は単に配布されたソースコードです。これはこのコンテキストでの「バイナリ」のFSFの定義から私が作成したもの)。

したがって、ライブラリをディストリビューションに含めずにコードから参照する場合、これを「動的リンク」と同等と見なします。一方、製品にライブラリをバンドルする場合、またはライブラリの一部を独自のコードにコピーアンドペーストする場合、 「静的リンク」シナリオが適用されます。これは、少なくともGPLの精神に基づいています。GPLされたソフトウェアを制限なく自由に使用(実行、検査、参照)できますが、GPL から派生したらすぐに(その一部をリンクまたはコピーして配布可能な製品を所有している場合)、バイラルになり、ソフトウェアもGPLである必要があります。

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