「クラスパス例外を伴うGPL」とは実際にはどういう意味ですか?


70

Oracleは、クラスパス例外を使用してGPLの下でJava関連のオープンソースコードをすべてライセンス供与しているようです。私が理解していることから、これにより、これらのライブラリを独自のコードと組み合わせて、GPLでカバーする必要のない製品にすることができるようです。

  1. これはどのように作動しますか?
  2. これらのクラスを使用できる方法と使用できない方法の例は何ですか?
  3. LGPLとは対照的に、この新しいライセンスが使用されたのはなぜですか。LGPLはほとんど同じことを可能にしているように見えますが、よりよく確立され、理解されていますか?
  4. LGPLとの違いは何ですか?

1
wikipedia:en.wikipedia.org/wiki/でこれを見つけましたが、これで事態は少し解消されますが、LGPLでこれを使用する理由がまだわかりません。良い質問!

1
ウィキペディアのページには、LGPLの規定である「ユーザーはライブラリを自分のバージョンと交換できる必要があります」などのことは言及されていません。GPL + Exceptionはそれを必要としないのでしょうか?
ティロ

1
読み進めてみると、「LGPLはリンク例外に対してより多くの要件を策定しています。使用するライブラリの部分の変更を許可し、そのような変更をデバッグするために(プログラムとライブラリの)リバースエンジニアリングを許可する必要があります」
ティロ

この場合、このライセンスの下で許可されていないことは何ですか?ライセンスコード(選択+クラスを選択)を自分のコードベースにコピーできます(もちろん変更されません)。自動ビルドツールを使用して、結果のバイナリを変更できますか?難読化ツール、最小化ツール、デッドコードストリッパー?
ティロ

独自のコードが「GPL with classpath exception」ライセンスの下でもリリースされている場合にのみ、これからコードをコピーして独自のコードで使用できます。コードがプロプライエタリである場合、またはMITなどの他のほとんどのオープンソースライセンスの場合、使用することはできません。
Abhi Beckertの

回答:


69

まず、私は弁護士ではありません。しかし、私は多くのライセンスを研究し、それらに関する問題を理解しています。

第二に、私はこれが古い質問であることを知っていますが、それでも混乱と懸念のポイントだと思います。気にしない場合は、そうすべきです。特に複数の貢献者が関与している場合、ライセンスを選択することは大したことです。

(L)GPLは、残念ながらC / C ++を念頭に置いて作成されました。「ソースコード」、「オブジェクトコード」、「動的リンク」、「静的リンク」、「コンパイラ」、および「オブジェクトコードインタープリター」について話します。したがって、これを同じコンパイル手法に従わない他の言語(Javaのバイトコード、Pythonのジャストインタイムコンパイル、Javascriptの解釈された性質など)に翻訳するには、いくつかの推測と仮定が必要です。法律について話している場合、つまり、2つの当事者が議論している最終的な裁判について考える場合、明確な区別がないことは悪いことです。

標準的なGPLライセンスのコードは、意図が非常に単純です。そのコードを使用する人は誰でも、配布または販売するときにすべてのユーザーにコードをリリースすることが期待されています。それは、リチャード・ストールマンが作成したかった、はっきりときれいにしたGPLウイルスです。

LGPLは元々、ウイルスではない「ライブラリ」を許可する試みでした。しかし、彼らはまだエンドユーザーが自分でライブラリを置き換えることができることを望んでいたため、「静的」リンクと「動的」リンクの区別-ユーザーは別の動的にリンクされたライブラリに交換できるので、必要はありませんGPLとしてライセンスされている。また、静的リンクではユーザーがGPLである必要がありました。このライセンスは実際には「ヘッダーファイル」について述べています。これはC / C ++では明確ですが、Java、Python、Javascriptなどの世界では明確ではありません。したがって、LGPLのもののL(「ライブラリ」)はせいぜい濁っています。

これが問題の核心になります。法律の世界では、不明確なことが悪いことです。GPLまたはLGPLコンポーネントのいずれかを使用して何かを構築しようとしている場合、法廷に着地した場合の将来の法的地位を確認したいと思います。しかし、今日の時点で、私は確かに判決を下していません。なぜなら、このようなフォーラムでの知的議論だけが、法的先例を確立する良い裁判例ではないからです。

クラスパス例外は非常に貴重です。ライセンス下のコードは(L)GPLであることが明確に記載されていますが、そのコードを使用するものは何でも好きなライセンスに従うことができます。ifs、ands、またはbutsはありません。コアコードを変更した場合(バグの修正など)、GPLの一部としてそれらの変更をリリースする必要があります。ただし、使用しても感染しません。

ビジネスの観点から、私はなぜ一部が10フィートの極でGPLコードに触れたくないのか理解しています。法的地位は不明確であり、法的先例がついに設定されると、ビジネスは10年先に突き刺される可能性があります。または、彼らは法的な先例を確立するために何年も闘っているかもしれません。とにかく、彼らはその戦いの費用を危険にさらしたくないだけです。Classpath Exception句を追加することにより、法的問題が排除され、(深刻な)潜在的な訴訟が回避されます。

したがって、私にとって、クラスパス例外はLGPLとは大きく異なります。GPLまたはLGPLのソースコードまたはライブラリの非GPL使用を可能にする明るい線を引くための法的にクリーンな方法です。


21
IANAL、しかし私はクラスパス例外の作成者の一人であり、これは正しい答えです。例外は、開発者がバイナリを静的にリンクするAOTコンパイル済み組み込みユースケースをサポートするために作成されました(この例ではgcjを使用)。libgccライセンスのようなものが必要だったため、それに基づいてクラスパス例外の最初のバージョンを作成しました。それはその後成熟しましたが、精神は同じです。
アンソニーグリーン

6

クラスパス例外のあるGPLは、ほとんどの用途でLGPLのように動作します。

つまり、ライブラリのソースをオンデマンドで出荷できる必要があるということです。独自のソースを出荷できる必要があるという意味ではありません。つまり、ライブラリを静的にリンクする場合、ライブラリを置き換える方法を提供する必要はありませんが、公開キーを使用して置き換えを防ぐことはできません。


-3

「GPL with classpath exception」スタイルのライセンスはLGPLよりも古いようです。

おそらく誰もがそれをまだ使用している唯一の理由は、コードを提供したすべての人の書面による許可なしにGPLコードをLGPLコードに移行できないからです。


7
LGPLの最初のバージョンは1991年にリリースされたため、Javaよりも前のバージョンです。en.wikipedia.org/wiki/LGPL
ティロ

Javaより前のバージョンですが、Java内のすべてのコードより前のバージョンですか?おそらく、Javaの最初のリリースには、古い「クラスパス付きGPL」プロジェクトのコードが含まれていたのでしょう。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.