俺#

新潟市でIT業を営むおっさんのブログ。

GPLなライブラリを商用アプリで使いたい!

ある機能を実現するライブラリがほしいのだが、商用ライブラリはベラボーに高くてとても買ってられないんですな。そうかといって自前で開発するにはちょいと大変そうな代物。買ったらベラボーに高いんだから、仮に作ったとしたらそれだけでも商売になってしまうし、作るのが大変なのは当たり前だけど。しかし、そんなものをオープンソースで開発されている方を発見!偉い!問題はライセンスがGPLだった事だ。

GPLのライブラリを「結合」したアプリを配布する場合には、アプリ自体にもGPLを適用しなくてはならない。これは、そのアプリのバイナリもソースもタダで制限なく配らなければならない事を意味するので、商用アプリを作りたい場合には都合が悪いどころか商売にならない。

http://www.gnu.org/licenses/gpl-faq.ja.html#MereAggregation

ここに記述されているように、問題はGPLなライブラリとアプリ本体の「親密度」にある。例えば同じCD-ROM上に非GPLなアプリとGPLなアプリが同居しているのは「単なる集積」と見なされ問題ないが、GPLなライブラリをリンクしたアプリは「結合」されているので非GPLにする事ができない。

アプリ開発者の間でよくある「ライブラリをDLLやsoとしてダイナミックリンクすればアプリ本体にGPLは適用されない」という解釈は、実は黒に近いグレーだ。ただ、現実的にはそいうった解釈をしないとGPLのプロダクトを商用ソフトウェアに使用することはできないので、そういう解釈をせざるを得ないという面もあるだろう。

それにしても、GPLなプロダクトを使ってサーバを構築し、高い金を取るサービスを展開することはできるのに、GPLなライブラリをリンクしたアプリをチマチマと売る事はできないってのは矛盾している。どちらもサービスを提供することが目的であって、それがスタンドアロンであるか分散システムであるかと、課金方法の違いだけなのだが。私は実行コードがユーザーの手元に渡るか否は議論の対象ではないと思っているので、どうもGPLは好きではない。

ところで、使おうと思っているライブラリはJava実装だったりする。アプリ本体はWinネイティブなので普通ならJNIで繋いでやるのだが、より接合を「疎」にする意味も含めてライブラリを呼び出すコマンドラインインターフェイスJavaで実装し、アプリからJavaVMを起動してパイプでやりとりさせてみた。動く事は動くようだ。やりとりするデータはファイル名と文字列のみである。

コマンドラインインターフェイスはWinのアプリとは関係なく単体で使用でき、もちろんライブラリとは密に結合されているので*1アプリを商品化したらソースを同梱してGPLで公開しようと思っている。というか公開しなければいけません(笑)。もちろんホントにこのままの形態で商品化するのかどうかは検討中。逃げ道を探してばかりでGPLの理念を尊重していないようで気分が悪い。まぁ、もし儲かったらライブラリの開発者にガバっと寄付してやればいいか〜、とも思うんだけどね(^^;

*1:実際にはJavaなのでjarファイル内にclassファイルが同居してるだけだし、互いを結合するのはJavaVMだからこれは単なる「蓄積」かもしれない...とか言い出したら本当に切りがないな(苦笑