LGPLと商用利用にまつわる話

商用アプリケーションにLGPLライブラリを組み込むにあたって、いろいろ問題があるらしいということは知っていましたが、それが具体的に何なのかは良く分かっていませんでした。

Javalobbyに2004年にポストされた「LGPL and Java」という以下のトピックと、そこで繰り広げられているFSF支持派(以下肯定派)とLGPLうざい派(以下否定派)のバトルを読んで、少し状況が理解できました。

LGPL and Java - FSF clarifies

この論争で主に槍玉にあげられているのは、LGPLが定めている以下の点です(この原則自体、あまり正確には把握されていないんじゃないかな。特に3とか)。これらは、LGPLライブラリの商用利用の障害になる可能性があります。

  1. LGPLライブラリにリンクするアプリケーションは、そのリンクの形態がいかなるものであれLGPLライブラリの派生物になる。したがって、そのようなアプリケーションは、LGPLの条項に従う必要がある。
  2. LGPLライブラリを使用したアプリケーションは、そのリバースエンジニアリングを禁止することができない
  3. LGPLライブラリをアプリケーションの頒布物に含める場合は、ライブラリのソースコードを添付しなければいけない

まず1についてですが、LGPLの適用範囲である派生物(derivative work)の定義から逃れようと、「動的リンクなら派生物には当たらないだろう」とか「リフレクション経由でアクセスすれば大丈夫だろう」と解釈している人がいるけれど、FSFの声明から、それは明らかにアウトだということです。

これに関して否定側は、「俺のコードはLGPLライブラリから派生してるわけじゃない!Hashtableを使うプログラムはHashtableの派生物だっていうのか?」と不満げですが、肯定側は「あなたのアプリケーションは、ライブラリコードとアプリケーションコード、両方から派生したものです」という立場を崩しません。

次に2ですが、否定側は「何で俺のコードの固有部分までリバースエンジニアリング許可しないといけないんだ?」と怒っています。これに対して肯定側は、「ユーザがLGPLライブラリとあなたのアプリケーションの互換性を確認できるようにするためです」という、何とも原理主義的な回答をします。

最後に3ですが、「ラジオの載った車を売るとき、ラジオの設計図も添付しろって言うのか?」という否定側に対して、肯定側は「そうです。設計図を添付すれば、ユーザはラジオが壊れたとき修理できます」と、これまたアレな回答です。

僕の感想としては、1は仕方ないと思いますが、2と3は非常に気持ち悪いですね。企業の立場からすると、リバースエンジニアリングを禁止できないことは当然死活問題になるわけですが、禁止できない理由が「LGPLライブラリとの互換性の確認」なんて的外れなことを言われたら、やりきれない気持ちにもなります。LGPLの理念は素晴らしいにしても、もっと現実に沿ったものであって欲しいと思います。