「GPL系ライセンス」とか「GPLと互換性のあるライセンス」とか「GPLv2またはそれ以降」って何だ!?

以下、おれが間違っていたら、誰か指摘してくれるとウレシイ。

オープンソースのライセンスというとGPLが一番有名だけど、じつはオープンソースライセンスには、たくさんの種類がある。そのうちのいくつかをまとめて、たとえば「GPL系ライセンス」とか「GPLと互換性のあるライセンス」とか「GPLv2またはそれ以降」とか呼んだりして、とてもややこしい。GPL系ではないライセンスもあって、「修正BSDライセンス」とか「MITライセンス」とか「Apacheライセンス」とか、こちらも幅広く使われているので、もっとややこしい。

ひとくちに、オープンソースライセンスといっても、その種類によって、使い方に細かな違いがあるんだ。

さて、あるOSSがあって、「GPLv2またはそれ以降」で再配布または改変できるとなっている。だから、このOSSの派生物は「GPLv2またはそれ以降」でライセンスしなくちゃいけない。それを「”GPLと互換性のあるライセンス”でOK」といったら、大きな誤解をまねくと思うんだ。

ここでは、なぜ大きな誤解をまねくのか、ちゃんと説明してみたい。

GPL系ライセンス

GPL系ライセンスとは、次のものだとしよう。「GPL互換ライセンス」でも「GPL準拠ライセンス」でも「GPL対応ライセンス」でもいい。LGPL系は含まないことにしよう。

  • GPL2.0
  • GPL3.0
  • AGPL3.0

もちろん将来バージョンが増えるかもしれないけれど、現時点ではコレが現実的なリスト。

で、ややこしいのは、次の2つの点。

  • GPL2系とGPL3系は、ライセンス互換性がない
  • GPL系ライセンスを適用するときのバリエーション

GPL2系は、特許条項の表記のおかげでAapche2ライセンスやMPLとライセンス互換性がない(ライセンス互換性については後述)。それを改善するために、GPL3では特許条項を変更し、Aapche2ライセンスやMPLとライセンス互換性を確保した。そのおかげで、GPL2系とGPL3系で、ライセンス互換性がなくなった。

ライセンス互換性

オープンソースでライセンスの互換性(License compatibility)というのは、ものすごく簡単にいうと「異なるライセンスが適用された複数のソースコードを結合して、別のソフトウェアを作成として再配布が許可されているか」を説明する言葉だ。

互換性があるライセンス(たとえば、GPL2とMITライセンス)は、その条項が互いに矛盾していないので、結合して新しいソフトウェアとして配布することが許可されている。互換性がないライセンス(たとえば、GPL2とApache2)は、その条項が互いに矛盾しているので、結合して新しいソフトウェアを配布は許可されていない。Wikipediaでは「ライセンスの両立性」とも呼んでいる。

主なオープンソースライセンスとGPL系ライセンスとの間の互換性を整理すると、次のようになる。

  • GPL2とライセンス互換性があるもの
    • MITライセンス
    • 修正BSDライセンス
  • GPL3とライセンス互換性があるもの
    • MITライセンス
    • 修正BSDライセンス
    • MPL
    • Apache2ライセンス

これらは、すべて「GPL系ライセンスとライセンス互換性がある」。だけど、じつは先に説明したように、同じGPL系ライセンスであっても、GPL2系とGPL3系はライセンス互換性がない。そして、同じ「GPL系ライセンスとライセンス互換性がある」ライセンスであっても、派生物に適用できるライセンスは異なっている。

GPL系ライセンスの適用するときのバリエーション

もうひとつ「GPL系ライセンスでは、適用するときバリエーションが多い」について説明しよう。

たとえば、ライセンスの適用は次のように記述する(以下は「GPL2またはそれ以降」の場合)。

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

これは、GPL2の「How to Apply These Terms to Your New Programs」(以上の条項をあなたの新しいプログラムに適用する方法)のライセンス表示テンプレートからもってきた。ちなみに、この部分は、ライセンスの条件と制約ではない。

日本語参考訳は、こうなっている(強調は筆者)。

このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された GNU 一般公衆利用許諾契約書(バージョン2か、希望によってはそれ以降のバージョンのうちどれか)の定める条件の下で再頒布または改変することができます。

で、このライセンスバージョンの指定に、次のようなバリエーションが考えられる。

      GPL2のみ
      GPL2またはそれ以降
      GPL3のみ
      GPL3またはそれ以降
      AGPL3のみ
      AGPL3またはそれ以降

Linuxカーネルは「GPL2のみ」を採用している。WordPressは「GPL2またはそれ以降」を採用している。「それ以降」というのは、以降のライセンスバージョンを指している。GPL2の以降といえば、GPL3とAGPL3(将来、増えるかも知れない)。

で、このバリエーションごとに、派生物に適用できるライセンスは限られてくる。なぜなら、「ライセンスの互換性」があるのと、さらに「派生物に適用できるライセンスは条件の厳しいほうを選ばなければならない」ためだ。

派生物に適用できるライセンスは限られている

特定のライセンスが適用されたソースコードから派生物を作るとき、派生物のライセンスは、次のようになる。

まず、コピーレフトがないライセンス。

  • MITライセンス -> なんでもよい
  • 修正BSDライセンス -> なんでもよい
  • Apache2 -> なんでもよい

限定的なコピーレフトを持つライセンス。

  • MPL -> 元のソースコード自体の修正はMPL,追加モジュールはなんでもよい

GPL系ライセンスだと、こうなる。

  • GPL2のみ -> GPL2のみ
  • GPL3のみ -> GPL3のみ
  • AGPL3のみ -> AGPL3のみ
  • GPL2またはそれ以降 -> GPL2, GPL3, AGPL3
  • GPL3またはそれ以降 -> GPL3, AGPL3
  • AGPL3またはそれ以降 -> AGPL3

GPL2のライセンス表示テンプレートをそのまま使っていると、太字のところになって、これが冒頭で示したGPL系ライセンスと同じだ。

2つのソースコードを組み合わせたときのライセンスはもっと限られている

2つのソースコードを結合して新しい派生物を作るときのライセンスを考えてみる。ライセンスに互換性があり、新しいソフトウェアの作成が許可されていた場合、その新しいソフトウェアのライセンスには、何を選べばいいだろうか?

派生物に適用できるライセンスは条件の厳しいほうを選ばなければならない。たとえば、次のようになる。

  • 「GPL2またはそれ以降」+「MITライセンス」-> 「GPL2またはそれ以降」
  • 「GPL2またはそれ以降」+「修正BSDライセンス」-> 「GPL2またはそれ以降」

GPLとMIT/修正BSDライセンスを比較すると、両者の条件は矛盾していない(つまりライセンス互換性がある)。だが、条件はGPLのほうがきびしくなっている。そのために、結合された新しいソフトウェアは、ライセンス条件のきびしいGPLに合わせなければならない。

では、GPL系ライセンスの場合は?
主なものは、こんなふうになる。

  • 「GPL2またはそれ以降」+「GPL2のみ」-> 「GPL2のみ」
  • 「GPL2またはそれ以降」+「GPL3のみ」-> 「GPL3のみ」
  • 「GPL2またはそれ以降」+「GPL3またはそれ以降」-> 「GPL3またはそれ以降」
  • 「GPL2のみ」+「GPL3のみ」-> 結合できない

GPL2とGPL3は互換性がないので、結合できない組み合わせがあるんだ。完全な組み合わせの表は、Frequently Asked Questions about the GNU Licenses – GNU Project – Free Software Foundation (FSF)にある。

ここまでのまとめ

ここまでの説明を整理すると次のようになる。

  • 同じ「GPL系ライセンスとライセンス互換性がある」ライセンスであっても、派生物に適用できるライセンスは異なっている

だけど、「GPLv2またはそれ以降」というOSSのライセンスは、「GPL系ライセンス」と同じだから、まあ問題ない(ただ、GPL系ライセンスがLGPLを含まないことは、いちおう説明したほうがいい)。

どんな影響があるのか

そのOSSの派生物が、とっても気軽に作れる(たとえば、プログラマーでなくてWebデザイナーでも作れる)といった場合、その派生物を提供するときには、ライセンスが「GPL2またはそれ以降」になることは、きちんと説明したほうがいい。それを「GPLと互換性のあるライセンスにすればいい」というのは間違い。

なぜなら、GPLは伝搬性があるから。これは「ウィルス性」と批判されていたこともある。GPLが不用意に適用されると、自分たちが当初想定していなかった範囲まで、GPLの対象となってしまう可能性がある。場合によっては、お客様が困ることもあるかもしれないから。実際に、GPLが適用されたコードが製品に混入していたことが発覚して、そのコードを公開する羽目になった事例がいくつも存在する。

だから、「GPL2またはそれ以降」だというOSSの派生物を作るときは、「GPLと互換性のあるライセンスにすればいい」というのではなく、ストレートに「GPL2またはそれ以降を適用」と言うべきだ。個人的には、「GPL系ライセンス」を「GPL互換ライセンス」と呼ぶのは、とてもとても紛らわしいと思う。なぜなら「GPLと互換性のあるライセンス」と区別が付かないからだ。

「GPL互換ライセンス」という用語を使いたいなら、それの範囲を明確にすべきだ(LGPLは含まないとか)。

さらに、受け入れ方法と作成方法の説明文を区別する

OSSの開発コミュニティで、英語の説明をよく読むと、コミュニティが受け入れるコードのライセンスと作成するコードのライセンスが厳密に区別されている。読み手は、この二つを区別して理解すべきだ。

受け入れ方法では、適用されるライセンスが幅広くとられている。なぜなら、そのOSSコミュニティのポリシーに合わせて、リリースするものの最終的なライセンスを統一できればすむから。間口は、広いほうがいい。

作成方法の説明文では、ライセンスの説明はほとんどない。なぜなら、
派生物がどのようなライセンスを適用すべきかは、OSSコミュニティのポリシーではなく、ライセンス管理団体の解釈が優先されるからだ。たとえば、
GPL2の派生物がどのようなライセンスになるべきかは、OSSコミュニティではなく、FSFが解説している。

最後に、もういちど結論を言おう。「GPLv2またはそれ以降」でライセンスしなくちゃいけないOSSの利用条件を、「GPLと互換性のあるライセンス」でOKといったら、大きな誤解をまねく。「GPLv2またはそれ以降」でライセンスしなくちゃいけないなら、素直に「「GPLv2またはそれ以降」と言ったほうがいい。

特定のOSSでの例としては、こちらをご覧ください。

  • 2012-11-10:タイトルなど修正。LGPLを含まないように書き直し。
  • 2012-12-20:ご指摘をいただき、ライセンス互換性の表現を変更。あと、すこし構成もかえてみた。