ライセンス間の矛盾について

「ライセンスが矛盾する」とは、一体どういうことなのだろう?

はじめに

「ライセンス間の矛盾(incompatibility)」という概念がある。日本語では まだあまり馴染みがないかもしれないが、オープンソース・ライセンシングを 考える上で非常に重要なことだと思うので簡単にご紹介したい。

訳語について

いきなり余談だが、この話は海外におけるオープンソースがらみの議論では、あるライセン スがあるライセンスとcompatibleでない、という形でよく出てくる。FSFの定義 を見てもlicense compatibilityとなっている。compatibilityの訳としては、 普通「互換性」という語をあてるのではないかと思うが、以前筆者がGNUのウェ ブページや文書を訳した際には、compatibleを日本語で「互換」にしてしまう と、ぱっと見では両者がまるで互いに取り換え可能なように思われてしまうのではない かと危惧した。例えば、GNU GPLと現行のBSDライセンスは後で述べるように矛 盾しないしcompatibleなのだが、だからと言ってBSDライセンスとGPLが別物で あることには変わりなく、BSDライセンスが適用されたプログラムをGPLライセ ンスが適用されているのと厳密な意味で同様に扱うことはできない。そこで、 筆者は一貫して「矛盾」という表現を使っている。

「ライセンス間の矛盾」とは

さて本論に戻って、ライセンス間の矛盾とは、あるプログラムAに適用されたライセンス Aと、プログラムAが「リンク」するプログラムBのライセンスBとでそれぞれ指 定された条件を、同時に満たすことができないという状態を指す。ここで言う 「リンク」は、ソースコードの再利用・引用から、あるプログラム向けのプラ グインやモジュールの組み込み、ライブラリの静的/動的リンクまで含めたかな り広い意味である。というより、「リンク」の範囲を厳密に決めようとすると 大変ややこしい話になるので、その点に関する詳細な議論はまた次の機会に譲りたい。 いずれにせよ、二つないし複数のプログラムを「リンク」すると全ては一つに なり、結合著作物となる。複製や頒布など、「リンク」したものを一緒に扱う 際には、「リンク」したプログラムのライセンスで指定された条件を全て満た すようにしなければならないわけだ。言い換えれば、最も制約の厳しいライセ ンスが全体のライセンスと等しくなる。このとき、ライセンス間でつじつまが 合わなくなった状態が、ライセンス間の矛盾なのである。

やや分かりにくいかもしれないので具体的に説明しよう。GNU GPLの第6項では 以下のように述べている(強調は筆者)。

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients’ exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

よってGPLでは、プログラムの複製や頒布に関してGPLで既に課せられた以上 の制限を課すことを禁止している、ということになる。一方、昔のBSDライセン スには以下のような条項があった(現行のBSDライセンスからは削除されて いる)。

3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the University of California, Berkeley and its contributors.

これは俗に「宣伝条項」と呼ばれてきたもので、頒布に当たって宣伝を行う 場合、規定の告知文(このソフトウェアにはUCBが開発したコードが含まれてい ます云々)を掲載することを義務付けている。これは、頒布における実質的な追 加的制限と見なされる。よって、例えばプログラムAにGPL、プログラムBに旧 BSDライセンスが適用されていた場合、両者を「リンク」したひとつのオブジェ クトコードを頒布することはできない。両方を同時に満たすことができないか らだ。ちなみに、両者のソースを入手し、手元で自分でビルド、リンクするの はその人の自由である。

実際によくあるのは、GPLが適用されたソフトウェアと、旧BSDライセンスと 似た宣伝条項入りのライセンスが適用されたOpenSSLライブラリとをリンクして頒布 することができない、というケースだ。例えば、テキストベースのウェブブラ ウザであるLynxは、OpenSSLをサポー トしているにもかかわらず、OpenSSLとリンクしたバイナリをDebian等のパッケー ジとして頒布できないのである。

ここで注目すべきなのは、GPL、OpenSSLのどちらもオープンソース/フリー ソフトウェアではあるという点だ。オープンソースであっても互いに矛盾する ライセンスというのは存在するのである。もちろん、プロプライエタリなライ センスの全てがGPLと矛盾するのは言うまでもない。プロプライエタリなライセ ンスとGPLが矛盾する、ということを逆手に取ったのがデュアル(あるいはトリ プル)・ライセンシングと呼ばれる慣行だが、これについてはまた稿を改めて論 じよう。

例外の設定について

前項の例で言えば、基本的にはGPLは適用しつつ、OpenSSLとのリンクは許可 したいという場合、何かうまい手はないだろうか。ここで、抜け道となるのが 例外(exception)付きのGPL適用という手法である。あるプログラムにGPLを適用 すると宣言する際に、以下のような文言を付け加えておくのだ。

As a special exception, the copyright holders of ABC give you permission to combine ABC program with free software programs or libraries that are released under the GNU LGPL and with code included in the standard release of DEF under the XYZ license (or modified versions of such code, with unchanged license). You may copy and distribute such a system following the terms of the GNU GPL for ABC and the licenses of the other code concerned, provided that you include the source code of that other code when and as the GNU GPL requires distribution of source code.

こう宣言しておくと、GPLが適用されたプログラムABCを、GPLとは矛盾する ライセンスXYZの下でリリースされたプログラムDEFと「リンク」することを明示的に認めたことになる。ただ、これは事実上ライセンス変更に等しいので、例外を設定するためには基本的にそのプログラムの著作権者全てから許諾を得なければならない。例外が設定されていない、単なるGPLの下でもうすでにリリースされてしまっているソフトウェアにとっては、これはなかなか高いハードルだ。例えばLynxのようなすでに長い歴史のあるソフトウェアの場合、今までの貢献者全員から許諾を得るのが極めて困難なので、現在もOpenSSL向け例外は設定されていない。その代わり、ライセンスの矛盾が発生しない代替ライブラリ、GNUTLSへの対応が図られた。

実際にGNUソフトウェアで例外を設けた例としては、プログラム拡張用の Scheme処理系Guileの旧バージョン1.6がある。Guileのライセンス宣言は以下のようなものだ。や や長くなるが、なかなか意が尽くされたものなのでそのまま引用する。

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this software; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

As a special exception, the Free Software Foundation gives permission for additional uses of the text contained in its release of GUILE.

The exception is that, if you link the GUILE library with other files to produce an executable, this does not by itself cause the resulting executable to be covered by the GNU General Public License. Your use of that executable is in no way restricted on account of linking the GUILE library code into it.

This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License.

This exception applies only to the code released by the Free Software Foundation under the name GUILE. If you copy code from other Free Software Foundation releases into a copy of GUILE, as the General Public License permits, the exception does not apply to the code that you add in this way. To avoid misleading anyone as to the status of such modified files, you must delete this exception notice from them.

If you write modifications of your own for GUILE, it is your choice whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice.

すなわち、Guileを他のソフトウェアに組み込んでもGPLの条項は伝播しません、という例外を設けると共に、だったらGPLが適用された他のソフトウェアからGuileに一旦コードを流入させた上で、プロプライエタリなソフトウェアと「リンク」してしまおう、というような悪用の芽を潰し、かつ利用者が必要がないと判断した場合には、例外の削除も認めている、というわけだ。皆さんも例外を設けたいときはこのGuile 1.6の書き方を参考にされると良いのではないかと思う。ただ、最新版のGuile 1.8では、どういうわけかGPL+例外ではなくLGPLが適用されるようになったのだが…。