ライセンスについての質問です。


GPLやBSDなど様々なライセンスが存在しておりいます。
GPLなどは時々GPLウィルスといわれる現象もあったりしますが、具体的に以下のような状況はどう判断されるのでしょうか?

1.GPLで「A」という機能を持った似たようなものがあるが、それを知らずに自作。機能自体が同じなので内部的にも似たような構造になる

2.GPLで「A」という機能を持った似たようなものがあるが、それを知らずに自作。コピーはしてないが、同じ言語の同じ関数を同じように使い最適化してあるため意図せず同じような部分が出来てしまった

3.GPLで「A」という機能を持った似たようなものがあるが、一部に不満がありゼロから似たような「A+」を作成し、それに機能を追加して「A'」を作成。コピーはしてないが機能自体が同じなので内部的に似た部分や構造になる。

このような場合はGPL違反となってしまうのでしょうか?
もしGPL違反となる場合は具体的にどの部分が違反となるかご指摘やアドバイスいただけると助かります。

またGPL違反となった場合は公開することでGPL違反を回避することが出来ると考えてもよいのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/11/23 09:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント100pt

1→問題なし
2→問題なし
3→微妙。基本的に1から書きなおしたのであれば問題ないはずだが、一度見てしまったことで変数名が違うだけレベルの同じコードだと駄目じゃないかな。コピー&修正と憶えて写経は変わらないだろうし。証明が難しい。

>またGPL違反となった場合は公開することでGPL違反を回避することが出来ると考えてもよいのでしょうか?
はい、ソースコードを要求されたら渡してあげれば問題ないです。



GPLっていうのは大雑把いうと以下のような"ライセンス(約束)"です。

  • a. GPLなコードを修正したら修正したコードのライセンスもGPLにする必要がある
  • b. GPLではバイナリ提供相手に対してソースを公開する必要がある

また、俗にいう「GPL汚染」と「GPL違反」とは以下のようなことです。

  • 上記aのルールによって自分のコードのライセンスが強制的にGPLになってしまうことを「GPL汚染」と呼ぶことがある。またこの性質によりGPLコードが増殖する様をもって「GPLはまるでウィルスだ」という人も居ます*1
  • 上記aに従わず自分のコードのライセンスをGPL以外にすると「GPL違反」となる
  • 上記bに従って自分のコードの公開をしないと「GPL違反」となる

但し、勘違いされることが多いのですが「GPLなコード=必ずWEB等で公開する必要がある」わけではありません。あくまで「誰かにバイナリを渡したらがその人がソースコードを見られるようにしてやる必要がある」だけです。以下の例で理解できるかと思います。

  • 自分一人でプログラムを書いて自分一人で使う→バイナリを使うのは自分=ソースコード持ってる、ので何の問題もありません。
  • GPLコードを含むサーバアプリケーションを自分のサーバ上で動かしてWEBサービスなどを提供する→バイナリを他人に提供してるわけじゃない(自分のサーバ上で動いてるだけ)のでソース公開義務はなく問題なし
  • GPLコードを含むサーバプリケーションを他人のサーバ上で動かしてWEBサービスなどを提供する→WEBにアクセスしてくる不特定多数にバイナリ提供していないのでソース公開義務はなし、ただし「他人(知合いや、レンタルサーバ業者など)」に対してはバイナリを渡してることになるかもしれないのでその場合はその人が「ソースコードを下さい」って言ってきたらソースコードを渡す必要がある。*2
  • GPLなフリーソフトを開発してWEBで公開している→フリーソフトをダウンロードした人に対してソース公開義務がある

更にここでいう公開義務というのはバイナリ取得者への開示義務があるというだけで、別にWEBでソースを公開するという方法でなくてもよいです。例えば以下のような感じです。

  • WEB上にソースコードが欲しい人はxxx@example.comに問い合わせして下さいとか書いておいてメールが来たら個別にソースを渡す形でもOKです*3
  • パッケージソフトとしてGPLプログラムを販売して、パッケージのCD内にソースコードを入れておく形でもOKです
  • GPLコードを含む場合家庭用ルータなどのハードウェアを販売して、説明書などにソースコード入手手順の情報(メールや電話や郵便による問い合わせ先、もしくはソースを公開しているURL)を書いておけばOK

ただ、普通は不特定多数の相手は面倒なのでWEBでソースコードを公開しておくのが一般的なだけです。



あとは、

  • GPLなライブラリのバイナリをリンクするだけの場合はどうなる?→リンクするだけでもGPLにする必要がある
  • じゃ、静的リンクじゃなく.soとか.dllとかの共有ライブラリで動的リンクならどうなる?→GPLの場合は望みなし、自分もGPLになる
  • それだとあまりに不便なので、動的リンクはOKにしようというのがLGPL(Lesser GPL)です→LGPLなライブラリなら実行時に動的にリンクして使っても自分はGPLやLGPLにはならない。なので気をつけてみると分は普通GPLではなくLGPLで配布されてるのが多いことが分かると思います。
  • LGPLでもリンクという使い方ではなく、ソースコードを修正して自分のコードに取り込む場合は自分のライセンスはLGPLになります。
  • 暗号化処理で秘密のパスワードを埋めこんであったり、企業秘密で公開できないコードが交じる場合は、二律背反でどうすりゃいいんだよ?って場合などはGPLv3ってのが数年前に出来たらしい*4

*1:嫌なら使わなきゃ良いのにね、1から自分でコード書いて

*2:まぁ、普通は言ってこないと思うけど

*3:メディア代や手間賃などの手数料をとっても構いません、ただし手数料1億円とか事実上コードを開示する気のないような値付けは駄目です

*4:GPLv3はあんまり詳しくないので断言できないが、何か非開示条件を追加したりできるようになったりしてるんじゃないかな?よー知らんw

id:quocard

回答ありがとうございます。

ひじょうに分かりやすかったです。
ライセンス問題は形態によってやっかいな事が多いので普段思っていた疑問を質問させていただきました。

WEB系の仕事をすることも多いので疑問のまま突っ走るのは危ないと思っておりました。
ありがとうございました。

2011/11/17 09:25:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません