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

カスタム検索

2010-06-03

受託開発とGPL

GPLに対する代表的な誤解・・・というかむしろ謎のひとつに、受託開発(SI)におけるライセンスの扱いがある。この点が明確になっていないため、受託開発において無意味にGPLを回避しようとしたり、GPLに対するFUDを流布することに対する原因になっていたりするように思う。フリーソフトウェアおよびオープンソースソフトウェアを愛する者として、そのような状況は断じて見過ごすことができない!!というわけで、今日はGPLを受託開発(SI)において用いる場合の注意事項を説明しよう。

GPLの使いどころ

受託開発においてGPL(とその仲間たち=LGPL、AGPL)が登場するのは、第三者、つまり発注側でも受託側でもない者が作成したGPLのソフトウェアを利用する場合である。例えばGPLが適用されたライブラリなどだ。周知の通り、GPLのソフトウェアをリンクしたソフトウェアを再配布する場合は、そのソフトウェア全体に対してGPLを適用しなければならない。この約束事によって、受託側には次のような漠然とした不安が生じることになる。
  • 1. 社員がライセンスがGPLであることを理由に開発中のソフトウェアを一般向けにバラまいてしまうのでは?!
  • 2. GPLを適用してお客さんにソフトウェアを納入したらソースコードを一般公開しなければいけないの??
  • 3. 私は発注者です。受託側はGPLに基づいてソフトウェアをバラまきやがるのが不安です。
だが、実際これらの懸念はNo!!である。心配ない。受託開発でGPLを利用したからといってこのようなことは起きない。だから安心してGPLを受託開発で使って欲しいというのが今日の主旨である。

GPLが適用されるのは頒布時

GPLが適用されるのは、ソフトウェアを頒布するときだということを思い出して欲しい。従って、GPLのライブラリを利用する場合、ライブラリそのものは既にGPLでライセンスされているため自由に再頒布することができる。しかしながら、開発中のソフトウェアについては頒布する前は100%開発者(注意:業務著作物の場合は会社が著作者)のものである。開発中のソフトウェアは門外不出であり、頒布するかどうかを決めるのはあくまでも会社だ。従って、一従業員が勝手にそのソフトウェアを頒布することは、機密保持契約違反などの対象になり得るのである。以下の図は、この様子を示したものである。


GPLのライブラリ(Aの部分)は元々GPLでライセンスされているものであり、それが一般に公開されているものなら再配布しても問題はないだろう。ただし、受託側の業者が開発したアプリケーション(Bの部分)はあくまでも受託業者の著作物であり、ライセンスはこの時点では決まっていない。第三者はライセンス=使用許諾があって初めてソフトウェアを利用することができるのであり、ライセンスが決まっていないということは、すなわち第三者はなんぴとたりともこのソフトウェアを利用することはできないということを意味するのである。もちろん再配布も厳禁だ。

いざ、このソフトウェアをライブラリ付きで頒布する際の様子を示したのが次の図である。発注者はGPLという名のライセンスの下で、ソフトウェアの使用許諾を受けることになるという寸法だ。


GPLはライセンス!

GPL=GNU General Public Licenseは、その名が示す通りライセンスの一種である。ライセンスとは、つまりライセンサーとライセンシー二者間の取り決めごとだ。ライセンシーはライセンスを破らない限り、対象のプログラムをどのように利用して良い。GPLではライセンスにおいてソフトウェアの再配布を自由に認めているのだ。再配布が認められているからといって、再配布する義務はない。つまり、発注者がGPLでライセンスされたソフトウェアを受け取った=納入されたからといって、それを再配布しなければならないということはないのである。配布するもしないも利用者の自由なのだ!このような場合、ライセンシーはソフトウェアを発注した「会社」であり、会社の方針として再配布しないのであれば従業員はその方針に従わなければならない。もし従業員が会社の意志に反する行為をした場合、処罰の対象になるだろう。

また、受託業者(ライセンサー)もGPLだからといってソフトウェアのソースコードを一般公開する必要はない。GPLが求めているのは、ライセンシーに対するソースコードの公開であり、それ以外のもの(つまりライセンシーとライセンサー以外のひとたち)は無関係である。ライセンサーは、ライセンシーから要求があった場合にソースコードを譲渡できる準備だけしておけば良いのだ。

ところで、話は少し脱線するが、もしかすると「GPLをやぶったらフリーソフトウェア財団が出てくるのでは?!」という風に考える人がいるかも知れない。しかしそれは大きな誤りである。ライセンス違反が発生した場合、違反者=ライセンシーを訴えるのはソフトウェアの提供者=ライセンサーなのである。フリーソフトウェア財団は、GPLというライセンスを策定した団体であり、なおかつ自らもGPLを適用したフリーソフトウェア(例えばGCCやGDBなどのツール群)を頒布している。フリーソフトウェア財団は、自らがライセンス供与したソフトウェアに対するライセンス違反が発覚した場合や、GPLが勝手に書き換えられてしまった場合(GPLというライセンスそのものの著作者はフリーソフトウェア財団だ)などに出張ってくるだろうが、他の団体や個人が作成したプログラムに対してライセンス違反があったときに提訴するようなことはしない。ただし、GPLソフトウェアのライセンサーが相談すれば、適切なアドバイスをしてくれることだろう。

料金について

GPLが適用されたソフトウェアについても、料金を徴収して構わない。つまり「このソフトウェアをあなたにGPLで提供する代わりに、その代金として○○円ください。」という契約が可能だということだ。一般に公開されているGPLソフトウェアであれば、誰でも再配布が可能であり、料金を徴収するのは難しいだろう。しかし、受託開発のようにワンオフのソフトウェアはこの世には他には存在しないので、たとえライセンスがGPLであったとしてもこのような契約で料金を徴収するということは可能であるはずだ。

著作権について

GPLが適用されたソフトウェアの著作権者は、あくまでもそのソフトウェアを書いた人(法人格ふくむ)である。ライセンシーはライセンサーの著作物をGPLによって利用できるだけであり、著作権は譲渡されることはない。「そうではない!俺は著作権が欲しいんだ!」という場合には、受託開発ではなく、プログラマーやSEに出向してもらい、自社開発を行うという形式をとれば良い。そうすると、前出の図における(B)の部分、つまり100%自分のCopyrightのソフトウェアが手に入るわけである。その場合、会社の方針としてソフトウェアを頒布しないかぎり、門外不出の状態を維持できる。

AGPLv3の場合

GPLファミリーの一員として、GNU Affero General Public License Version 3、略してAGPLv3というものがある。このライセンスは通常のGPLよりも強いコピーレフトの性質を持っており、サーバープログラムとして動作しているAGPLv3ソフトウェアに対してユーザーがネットワーク経由でアクセスした場合、そのユーザー側に対してソースコードをAGPLv3のもと開示しなければならないという性質をもったライセンスである。つまり、サービス提供者側は全てをさらけ出す必要があり、サービス利用者側はそのサービスの中でどのようなことが行われているかということを知る権利を行使できる、クラウド時代において必須のフリーソフトウェアライセンスであると言える。AGPLv3について分かり易くいうと、ネットワーク接続してきた相手をライセンシーと見なせば良いのである。(厳密には違うと思うが、とりあえずそのような解釈で運用していれば問題はない。)

従って、納入されたソフトウェアのライセンスがAGPLv3だった場合、そのソフトウェアを自社内だけで利用する=社員だけがアクセスする場合には何らAGPLv3の規約を気にする必要はない。そうではなく、一般向けのWebサイトでそのソフトウェアを公開する場合には、ライセンシーであるサイトの利用者に対してAGPLv3に基づいてソースコードを公開する必要がある。AGPLv3のソフトウェアを利用する場合には、この点だけ注意すれば大丈夫である。この様子を示したのが次の図である。


社内利用の場合(図右)は、サーバープログラムがAGPLv3だろうが何だろうが関係はない。業務で利用するシステムであれば、そのシステムへアクセスするのは個人ではなく従業員(=法人格の一部)としてであり、従業員は勝手にAGPLv3のソフトウェアを再配布することはできない。従って社内利用であればAGPLv3が適用されたソフトウェアであっても門外不出のままにしておくことは可能である。そうではなく、インターネットなどでシステムを一般ユーザー向けに公開する場合(図左)は、ユーザー向けにAGPLv3のもと、ソフトウェアのソースコードを開示しなければならない。(インターネット経由で社員がアクセスしたい場合には、認証してからでないとアクセスできないようにガードしておけばいいだろう。)

まとめ

GPLは再配布時にソフトウェア全体を同じライセンスにしなければならないという性質があり、その扱いに戸惑う人が多いように思う。特に受託開発においては、扱い方が不明瞭であるため、GPLが敬遠されがちではないだろうか。しかし、ライセンスの仕組みを正しく理解してポイントさえ抑えておけば、受託開発においてGPLを採用することはそれほど難しいことではないということがお分かり頂けるだろう。どのみち他のライセンスを利用する場合であっても、法的なトラブルを避けるためにはライセンス条項にはきっちりと目を通さなければいけない。数多くのソフトウェアで採用されているGPLは、一度読んで理解しておけば数多くのソフトウェアに対して使い回すことが出来るため、GPLソフトウェアの利用にはアドバンテージすらあると言えるだろう。さらに、GPLは「どのような利用も制限を受けない」という最大の自由が保障されたライセンスであり、ユーザーにとってはこの上ないメリットのあるライセンスなのである。本来は発注側がわざわざGPLを指定してもいいぐらいだ。正しくGPLを理解して、受託開発においてもぜひGPLを活用して頂きたい!

ところで、先日とある勉強会に呼ばれてAGPLv3についての説明を行った。その際利用したスライドをslideshareにて公開しているので、AGPLv3について詳しく知りたい方は、そちらも参照して頂ければ幸いである。
漢のオープンライセンス道場:Guide To AGPL

8 コメント:

Ikagawa さんのコメント...

受託開発の場合、コードの著作権は一般的に発注者側に譲渡されるのではないでしょうか。
この認識が正しい場合、発注者が譲り受けたコードを利用しようとしたときに、GPLによる制限がかかったりしませんか?

Mikiya Okuno さんのコメント...

Ikagawaさん、

発注者がCopyrightオーナーである場合、自分が持っている著作物は100%自分のものであり、他者へライセンスしない限り何の問題も発生しません。他者へライセンスする際、GPLが適用されたライブラリなどをリンクしている場合に、ソフトウェア全体をGPLにしなければいけないというのが、GPLのコピーレフトの仕組みです。

著作権ごと譲渡するのであれば、GPLは関係ないですね。この場合、著作権を受け取った側は、一番最初の図の(B)の部分について自分の自由で如何様にも処遇することが出来ますので、頒布しなければGPLを適用する必要は一切ありません。

M さんのコメント...

受託開発で単純システムならともかく
サードパーティーの有償のコードが含まれる可能性がある一般的なプログラムの受託開発でGPLを混ぜることは、
他社の著作物の開示をせまられ、物理的に不可能で配布差し止めになることがありえるので一般的ではない。
それに、社内システムに限定しても社内に配布しているので、退職者などに開示請求されるとたぶん裁判では負ける。
LGPLならともかく、わざわざリスクを取ってまでGPLを使うことはないし、一般的にはGPLを含めないことという契約をするのではないか?
もちろんGCCの用に2次的制作物はGPLではないと明示されているものを除く。
ソースコードレベルでGPLを含むものをGPLのまま契約するという契約はあまり聞いたことが無い。

Mikiya Okuno さんのコメント...

Mさん、

> 受託開発で単純システムならともかく
サードパーティーの有償のコードが含まれる可能性がある一般的なプログラムの受託開発でGPLを混ぜることは、

確かに規模が大きくなってGPLと非互換のライセンスが適用されたライブラリを使うようなケースでは、そもそもGPLのライブラリは使えませんね。そういう意味では、現実的にGPLのライブラリが使える案件は小規模のものに限られるかも知れません。

> それに、社内システムに限定しても社内に配布しているので、退職者などに開示請求されるとたぶん裁判では負ける。

これは最終的には裁判所の判断になってしまうとは思いますが、社内において利用が許諾されているのは「社員」としての人格に対してなので、退職者が開示請求するのは無理ではないかと思います。AGPLの例では、退職するともうサーバーへはアクセス出来ませんし。(退職後にアクセスしたら不正アクセス禁止法でしょっ引かれます。)

> LGPLならともかく、わざわざリスクを取ってまでGPLを使うことはないし、一般的にはGPLを含めないことという契約をするのではないか?

そう判断されるならGPLを含めないようにすればいいと思います。

また、上のコメントでも書きましたが、発注者側へ完全に著作権譲渡するような契約であれば、GPLの適用は発生しない(頒布がないから)ので、そのような契約にすればいいと思います。

GPLを適用するという契約は一般的ではありませんが、いち選択肢として考えて下さると幸いです。

あと、少し話は逸れますが、発注者側の視点でいうと受託業者側にソフトウェアを再利用して欲しくない場合があると思います。そういう場合は発注者側が受託側に対して「再利用しないでね」=「他の人にライセンス供与しないでね」という条件を課せばOKです。(契約とライセンスは別の話。)

aaadoko さんのコメント...

GPLと矛盾するライセンスを持ったプロダクトを混ぜることができないことに言及してない。
あとやっぱりGPLv3の場合で、開発システムの公開範囲が社内であったとしても、パートナー企業がアクセスする場合もあるだろうし、余計なソースコード公開義務を受託開発の契約に盛り込むのは面倒なのでは。

Mikiya Okuno さんのコメント...

aaadokoさん、

> GPLと矛盾するライセンスを持ったプロダクトを混ぜることができないことに言及してない。

おっしゃる通りですね。この点については別のエントリでもっと啓蒙しようと思います。

> あとやっぱりGPLv3の場合で、

AGPLv3の場合でしょうか?

パートナー企業については考えていませんでした。確かにそういうケースでは採用は難しいように思います。

今後もGPL関連のエントリを書きますので、また何かお気づきの点があればご指摘下さい。よろしくお願いします。

vipper36 さんのコメント...

>第三者はライセンス=使用許諾があって初めてソフトウェアを利用することができる
違います。日本には使用権というものはありません。さらに言えば日本にはライセンスというものもなく、あくまでもライセンス"契約"で縛ります。なので、契約に同意しないで使うことができる状態にされると法的効力を持ちません。

>再配布も厳禁
これもその通りです。
許可無く再配布した人を訴えることはできますが、受け取った第三者には及びません。
ただし受け取った第三者がソースコードを要求する先は、許可無く再配布した人になります。

>発注者はGPLという名のライセンスの下で、ソフトウェアの使用許諾を受けることになる
そうです。つまり受託側はGPLの義務を負います。受託側がソースコードを要求した場合に提供する必要が出てきます。ただし契約によってソースコード公開の拒否をできるかも知れませんが、良く知りません。

>フリーソフトウェア財団
>他の団体や個人が作成したプログラムに対してライセンス違反があったときに提訴するようなことはしない
FSFはしません。それはSoftware Freedom Law Center(SFLC)の領域です。

vipper36 さんのコメント...

これもその通りです。→これはその通りです。
受託側がソースコードを要求した場合に〜→発注側がソースコードを要求した場合に〜

コメントを投稿