ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2009-04-23

分散ソリューションを可能にするAGPLのススメ

Webサイトのようにプログラムの頒布を伴わない用途においては、GPLソフトウェアを利用してもそのWebサイトのために開発したプログラムをGPLライセンスで公開する義務はない。そのため、多くのWebサイトはGPLソフトウェアを利用していてもソースコードレベルの互換性は殆ど無く、ソースコードの相互利用もなく、Webプログラマは車輪の再発明をしなければならず、多大な負荷を強いられているのではないだろうか。他人の目に触れていないソースコードは、恐らく欠点(バグやセキュリティホールなど)も多いことだろう。これではGPLライセンスの意味、つまりより多くのプログラムをGPLライセンスで流通させて、プログラマが自由に他人のソースコードを参照・利用できる(それによって車輪の再発明を防ぎ、ソフトウェアの発展を促す)という目的が台無しになってしまう。これは、フリーソフトウェアを支持する人達にとって好ましくない事態である。GPLソフトウェアの利用実績が増えてるのは良い事じゃないのか?と思ってしまうかも知れないが、大事なのは如何に多く利用されるかということではない。プログラマおよびプログラムを利用する全ての人々に自由をもたらすということがGPLの目的だからである。

このような事態に対処しようと考えられたライセンスがある。AGPLである。AGPLは、HTTPプロトコルなどを通じてアクセスするプログラムに別のコンピュータからアクセスする全ての人々に対してソースコードの公開を義務付けるというライセンスである。ソフトウェアをAGPLでリリースすれば、Webサイトを構築する目的でそのソフトウェアを利用した場合に、ソースコードを非公開のままにされてしまうという事態を防ぐことが出来る。これは、GPLの目的という観点からすると好ましいことに見えるが、Webサイトを運営する人達にとっては好ましくないと受け取られてしまうのではないだろうか。(少なくともWebプログラマにとっては自由をもたらすので、歓迎すべきなのだが。)

既存のWebサイトを運用するモデル、ユーザーのアクセス数を自らのサイトに一極集中させるという方法であると、AGPLの運用は成り立たないだろう。Googleしかり、Yahoo!しかり、Mixiしかり、楽天しかり、Amazonしかり。自分のサイトへのユーザーのアクセスを勝ち取ってナンボの世界である。AGPLでソースコードを公開してしまうと、他の企業にクローンサイトを構築されてしまう恐れがある。(とはいえ、多数のサーバーを運用するのは誰でも出来ることではないのだが。)そういったサイトは、わざわざ自分のサイトのアクセス数を落とすような真似はしないだろう。ならばAGPLは普及しないのではないか?と思うかも知れない。

確かにAGPLは既に大量のアクセス数を勝ち取っているサイトには有り難くないライセンスかも知れないが、そうでない小規模なサイトにとってはメリットがある。ソースコードをお互いに参照出来るということは、相互運用においてメリットがあるからだ。大規模サイトでは自分のサイトへユーザーを誘導するのが至上命題であり、他のサイトとの相互運用や連携はあまり重要ではない。しかし、大量のサーバーマシンを用意出来ない小規模なサイトであれば、相互運用によってコストを負担しあって仮想的に大規模なサイトを構築するというのは、お互いにメリットがあるので理に適っている。最近はWeb APIによるマッシュアップが盛んであるが、AGPLで公開されたプログラムを使えば、小規模サイト同士であっても連携をとることは可能なはずである。

例えばSNSサイトを構築するためのソフトウェアをAGPLでリリースしたとしよう。大規模なユーザー数を捌くためには、既存のSNSサイトでは大量のサーバーマシンを運用しなければならない。しかし、AGPLでリリースされたソフトウェアを利用して、多数のサイトが連携して一つの仮想的なSNSサイトを構築することが出来れば、大量のサーバーマシンを用意するというコスト的な負担を劇的に抑えることが出来る。それなれば、大量のサーバーマシンを運用するだけの資金を持っていないような場合でも、仮想的な大規模SNSサイトを多数のサイトが連携して運用することが可能になるわけである。SNSだけではなく、例えばオンラインショッピングサイトを構築するためのプログラムをAGPLで公開すれば、小さなショッピングサイトが集まって連携して、仮想的な大規模ショッピングサイトを構築することが出来るという応用も考えられる。

それぞれのサイトを運営しているWebプログラマが、AGPLで公開されたソフトウェアを改良し合い、共有し、お互いの利益に繋げていくわけである。サイト間でスムーズな連携をとるためには、ソースコードの開示が前提となる。いくらWeb APIをカッチリと作り込んだとしても、ソースコードを参照出来るのとそうでないのとでは、連携の取りやすさ(問題が生じた時に改修にかかる手間や時間など)に雲泥の差が生じる。2つ以上のプログラムを組み合わせて利用する際、ソースコードを参照出来れば不具合が生じた場合に自ら原因を特定して修復することができる。もちろんこれにはデバッグのスキルが必要になるが、ソースコードがないとデバッグすらままならないのである。

Webサイトの連携を妨げる要因はトラブルなどの問題だけではない。連携しているサイトの一つだけが機能の拡充を行ってしまうとどうなるだろうか。機能の拡充は必要なことであるが、それぞれが独自の機能を実装してしまっては互換性を保つことが出来なくなる。しかし、AGPLでお互いのソースコードを参照することが出来れば、拡張された機能をすぐに取り込むことができるのである。このような相互運用は、AGPLなくしては出来ない。

もし、あなたがWebプログラマだったら、自分の作ったプログラムを公開する場合には是非AGPLを採用して欲しい。それが、Webプログラマであるあなたにとって、最高の自由をもたらしてくれることになるからだ。

ただし、AGPLにはライセンスの互換性という問題もある。明日はその辺について説明しようと思う。

0 コメント:

コメントを投稿