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

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

はじめに

「ライセンス間の矛盾(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が適用されるようになったのだが…。

投稿者: mhatta

A rapidly-aging old-school geek in Japan.