More info...

2009-04-24

AGPLのライセンス互換性の問題について - 解決策はRoR

Webの世界にもGPLと同様の自由や相互運用性をもたらす小粋なAGPLであるが、運用に際しては注意点がある。それは、ライセンスの互換性である。結論から言うと、AGPLはGPLv2と互換性がない。GPLv2を利用したソフトウェアを改変またはリンクして、AGPLとしてリリースすることは出来ない。それが最大の問題である。GPLv3では一部互換で、GPLv3のソフトウェアを改変してAGPLとしてリリースすることは出来ないが、GPLv3のコードをリンクしたソフトウェアをAGPLv3としてリリースすることが可能である。

なーんだ、じゃあGPLv3のソフトウェアを使えばいいのね?と思うかも知れないが、そうは問屋が卸さない。そもそもの問題点として、GPLv2とGPLv3の互換性がないという問題がある。GPLv3には、ソフトウェア特許に対する保護の強化(つまり、GPLv3ソフトウェア開発元の人が、その利用者を特許違反で訴えてはいけないという条項)や、DRMを迂回する行為によって訴えられるリスクからの保護の強化(平たく言うと、GPLv3を利用して実装されたDRMは無効ということ。DRM迂回行為を禁止する法律としてはDMCAなどがある。)などが盛り込まれている。そのため、GPLv2とは少し性質が異なるのである。プログラマの自由のためにはGPLv2よりGPLv3の方が望ましいが、世の中にはGPLv2でリリースされたプログラムも多い。例えば我らがMySQLやLinuxなどはGPLv2である。

GPLv3ぜんぜん使えないじゃん!!と思うかも知れないが、GPLv3はGPLv2以外のオープンソースライセンスと互換性がある。なんとも皮肉な話であるが、GPL以外のソフトウェアならばGPLv3でソフトウェアをリリースすることが出来るのである。ただし、リンクするだけであれば、LGPLv2は互換性がある。このことは次のページにある図を見るとわかり易いだろう。(以下、図だけ抜粋。)
http://www.fsf.org/licensing/licenses/quick-guide-gplv3.html#new-compatible-licenses

この図をちょっとだけ解説すると、たとえば有力なオープンソースライセンスとしてApache 2.0ライセンスが存在するが、これはGPLv3と互換性がある。(しかしGPLv2とは互換性がない。)Expat License(MIT License)やBSDライセンスなどはLGPLv2.1と互換性があり、なおかつLGPLv2.1はGPLv3と互換性があるわけである。GPLv2からGPLv3への矢印は点線になっているが、これはGPLv2とGPLv3には互換性がないことを示している。また、利用している全てのソフトウェアがGPLv3と互換性があれば、GPLv3へアップグレードが可能であるというわけである。

上記の図に載っていないライセンスについては、FSFのライセンスリストのページを参照して欲しい。
http://www.gnu.org/licenses/license-list.html

このように、GPLにはバージョンがいくつか存在し、バージョンによってかなり性質が異なるため互換性もないので注意が必要である。おそらく殆どの人はGPLのバージョンには注意を払っていないのではないかと思うが、もしそうであれば今後はライセンスのバージョンにも注意して欲しい。そして、自分がGPLライセンスのソフトウェアをリリースする場合にはバージョンを明記すること。可能であればGPLv3でリリースしよう。ただし、GPLv3をつける場合には、リンクするライブラリや参照したコードなどのライセンスがGPLだった場合には、そのバージョンを確認することを忘れないように。GPL同士の互換性については、次のページにある表がわかり易い。(以下、スナップショットで表だけ引用)
http://www.gnu.org/licenses/gpl-faq.html#AllCompatibility


縦軸が元の、つまり参照元またはリンクするソフトウェアのライセンスで、横軸が自分が開発しているソフトウェアのライセンスである。縦軸の「I want to copy code under」(上半分)はソフトウェアを改変または参照する場合のことを指し、「I want to use a library under」(下半分)はソフトウェアをリンクする場合のことを指している。この表からも分かる通り、GPLv3はGPLv2と互換性がないのである。GPLv2のソースコードをコピーすることもできない。リンクするだけであれば、GPLv2以外のライセンスであればOKだが、GPLv2とはリンクすらできない。何たることだろうか。

従って、GPLv2でリリースされているMySQLはGPLv3のソフトウェアと組み合わせて利用することはできない。しかし一方で、BSDライセンスでリリースされているPostgreSQLならば利用可能だ。世の中がGPLv3に移行してもMySQLがずっとGPLv2のままなら、MySQLは置いて行かれるかも知れないなーなどと考えてしまうが、そうならないように願うばかりである。GPLv3は上記のようなソフトウェア特許やDMCA違反による起訴のリスクから保護してくれる有り難いライセンスなのであるので、世の中がGPLv3へ移行したほうが良いのは間違いない。世の中がGPLv3へ動いて、そちらの方が趨勢を占めるようになれば事情は変わるかも知れない。

さて、次にGPLv3とAGPLの互換性の話を紹介すると、GPLv3にはAGPLv3との相互運用性に関する記述がなされている。
  • GPLv3のソフトウェアの一部または全体を変更ないしは利用したソフトウェアをAGLPv3でリリースすることはできない。
  • ただし、GPLv3ソフトウェアに対して一切の変更を加えずにリンクするだけであればAGPLv3ソフトウェアをリリースすることが出来る。
AGPLにも1,2,3というバージョンが存在するが、互換性があるのはGPLv3とAGPLv3だけで、それでも依然として「一部または全体を変更ないしは利用」、つまりコピーは出来ないのである。AGPLはなかなかにハードルが高いと言えよう。

さらにこれまでの話を要約すると、AGPLv3でソフトウェアをリリースすることができるかどうかは、次の条件を満たす必要があるわけである。
  • リンクするソフトウェアやライブラリはGPLv3と互換性があるか?
  • それらのソフトウェアのコードを参照(コピー)しないで済むか?
これらの条件を全てクリアすれば、晴れてAGPLv3でソフトウェアをリリースすることができるのである。

実践的に、AGPLv3を採用することが出来るのは、ずばりRuby On Rails上での開発だろう。Ruby On RailsはMITライセンスであるので、GPLv3とは互換性がある。さらに、クライアント側ではjQueryが利用出来る。こちらはMITライセンスとGPLによるデュアルライセンスとなっているので、MITライセンスを選択すればよい。データベースは残念ながらMySQLを利用することができない。代わりに、PostgreSQLSQLiteを使うといいだろう。というわけで、
  • Ruby On Rails
  • PostgreSQL
  • jQuery
という環境上でソフトウェアを開発し、公開するのであればGPLv3またはAGPLv3を採用できるわけである。従って、今現在このような環境の上にソフトウェアを構築して、GPLで公開しようと思っている人は、ちょっと考え直してAGPLv3によるリリースを検討してみて欲しいわけである。それが、将来的にWebプログラマの幸せに繋がっていくはずだから。



余談:

GPLv3は素晴らしいがGPLv2とは互換性が無く、GPLv2は広く普及しているためなかなかGPLv3への移行が進まない。この状況は、まるでWindows XPとVistaの関係にそっくりじゃないか?と思ってしまう。例えオープンソースソフトウェアの世界であろうとも、そしてソフトウェアそのものでなくライセンスであろうとも、互換性のない変更は大きな柵を残してしまうのである。いくら新しいものが優れていようとも。

0 件のコメント:

コメントを投稿