MIT・LGPLが混在する改変ライブラリを使用したプログラムのライセンスはどうなるのか?

(最終更新日2018/8/1 加筆・修正しました)


事例

現在、Pythonでプログラムを作成しています。

その際に、それぞれ以下のライセンスを持つ2つのライブラリを使用することにしました。

ライブラリA: MIT Lisence

ライブラリB: LGPL 2.1

しかし、配布されたライブラリをそのまま使用するには不便な点があり、

これをそれぞれ改変する事にしました。

さて、改変したライブラリを含めて全部をソースコードで公開しようと考えましたが、

以下の疑問に行き当たりました。

「メインプログラムのライセンスは何になるのか?何かに準拠しなければならないのか?」

・「それぞれのライブラリについても、ライセンスに変更はあるのか?」

これらを解決するため、調べた結果を記事にしたいと思います。


各ライセンスのおさらい

ライセンスは、「著作権・コピー・改変・頒布・商用利用・ソースコード公開などを規定するもの」です。

MITライセンスとLGPLライセンスは、オープン・ソースソフトウェアでは、よく利用されます。


MIT Lisense

原文を抜粋します。

(前略)

Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
(後略)

つまり、著作権表示、ライセンス文掲載、無保証の3つを行っていれば、

コピー・改変などが自由に行えるということです。

ライセンスの適用範囲については具体的記述がありません。


LGPL 2.1 Lisence

原文を抜粋します

(前略)

0.This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License").

1.You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.

2.You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) The modified work must itself be a software library.
b,c,d)(略)
(略)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
(後略)

MITライセンスより、長く細かい規定が並びます。

LGPLも著作権表示・ライセンス頒布・無保証の表示、コピーが行えます。

(ソースコードの開示が必須です)

そして、「work based on the library(ライブラリに基づく著作物)」として扱うことで、

特定の条件下で改変を行うことができます。

合理的にライブラリから独立している部分は、別々のものとして頒布する限りにおいて、

LGPLライセンスは適用されません。

しかしながら、「LGPLライセンスを含む著作物を一部として頒布する場合は、

全体もLGPLライセンスに準拠しなければならない」となっています。

この「一部」という言葉については、

これはプログラムの形態がソースコードか実行形式か、

どうライブラリと結合・リンクしているかによって、変わってきます。


焦点

以上、条項を確認すると、何が問題を複雑にしているかが見えてきます。

それは、「改変ライブラリ、メインプログラムをまとめて1度に公開しようとしている点」です。

疑問を整理し、解決するためには、

以下の点にそれぞれのライセンスの解釈を与え、明確化させなければなりません

1. ライブラリの改変

2. 異なるライセンスのライブラリの混在

3. ライブラリとメインプログラムのリンク

4. ライブラリとメインプログラムの同封

「LGPLライセンスを含む著作物を全体の一部として頒布する場合は、

全体もLGPLライセンスに準拠しなければならない」ということから、

すべてのプログラムをLGPLライセンスにしなければなりません。


しかし、MITライセンスのライブラリはMITライセンスに従うため競合します。

したがって、ライセンス同士の競合が解決できないため、

~~「MIT・LGPLの改変ライブラリを同封して配布することはできない」**という結論になります。


解釈


1.それぞれのライブラリの改変は全く問題ない

MIT/LGPLどちらのライセンスについても、改変は自由です。

その場合、改変ライブラリはそれぞれのライセンスに準拠します


2.異なるライセンスのライブラリの混在は問題ない

改変ライブラリ同士はお互いにライセンス適用範囲が矛盾・干渉することはありません。

問題点は、「ライブラリを同封・リンクしているメインプログラムがLGPLの適用を受けるかどうか」ということです。

(MITライセンスについては、「その適用範囲はライブラリだけである」と解釈できる。)


3.LGPLライブラリとのリンクするPythonプログラムはLGPL適用範囲外?

ライブラリとのリンクについては、LGPLに以下の条項があります。

5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.

When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)

Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.

Pythonの場合、以下において不明確な点を含んでいます。

・Pythonは実行可能ファイル・オブジェクトファイルを作成しないインタプリタである

LGPLの文面では、

「オブジェクトコード・実行可能形式ファイルを作成するプログラム言語を想定しているような」説明がなされています。

LGPLの説明サイトでよく取り上げられる、静的・動的リンクという概念は、

まず、プログラムのコンパイルが前提です。

インタプリタで、ソースファイルのみで実行がなされるPythonでは、

ライブラリとメインプログラムのリンクの概念はどうなるのでしょうか。

Pythonではソースファイル内のimport文、クラス・関数呼び出しにより、

メインプログラムとライブラリがリンクします。

すなわち、ヘッダファイルによるライブラリ利用となりますが、

数値パラメータ・データ構造・アクセス機構・小さなマクロ・小さなインライン関数の利用に当たる上、

それはオブジェクトファイルを作成する際の話となるので、

メインプログラムはLGPL適用の範囲外ということになります。

ただし、メインプログラムのソースコードがライセンスのプログラムを一切含まない、

"work that uses the Library"であることを大前提とします


4.同封しても問題ない

原文には以下の記述があります。


In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.


つまり、メインプログラムが「not based on the Library」であれば、LGPL適用範囲外であるということです。

前項でメインプログラムは"work that uses the Library"であると解釈されますので、

「not based on the Library」であり、

メインプログラムと改変ライブラリを同封しても、メインプログラムのライセンスにはLGPLが適用されません。

また、ライブラリ同士の混在が可能なLGPL側の根拠でもあります。


結論

メインプログラムとMIT・LGPLの改変ライブラリを同封したソースコードを公開した際、

それぞれのライセンスは以下のとおりです。

改変ライブラリA: MIT Lisence

改変ライブラリB: LGPL 2.1
メインプログラム:ライセンスを自由に決めてよい

ただし、メインプログラムのライセンスが仮にライブラリまで及ぶようなものであった場合、

それはそれぞれのライセンスと矛盾しない(ライセンス互換)であることが求められます。


~~解決策

「改変ライブラリ・メインプログラムはそれぞれ個別に公開する」

ということです。

すると、各プログラムは以下のライセンスになります。

改変ライブラリA: MIT Lisence

改変ライブラリB: LGPL 2.1
メインプログラム:ライセンスを自由に決めてよい

これに至る理由として、以下が挙げられます。

1.ライブラリそれぞれの改変は、それぞれのライセンスを引き継ぐ

2.MITのライセンス適用範囲は改変ライブラリ内だけであるという解釈が成り立つこと

(改変ライブラリをメインプログラムが呼び出している)

3.LGPL「合理的にライブラリから独立している部分は、別々のものとして頒布する限りにおいて、

LGPLライセンスは適用されない」

4.全体を頒布するとLGPL第2条a「改変された著作物はソフトウェアライブラリでなければならない」に反する


「プログラムがライブラリを呼び出すという」事のLGPLの扱い

また、それぞれ個別公開するという方法により、

「LGPLのライブラリはメインプログラムの一部」ではなく、

「LGPLの改変ライブラリをメインプログラムが呼び出している」事が明確になります。

Pythonはインタプリタ言語であり、ライブラリは通常import文によって呼び出しています。

これはLGPLに用いられる概念の一つである「動的リンク」に該当すると解釈できます。

この概念はこちらのサイトがわかりやすいと思います。

原文では以下の通りになります。

5.A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

「LGPL下のライブラリを全く含んでいないが、ライブラリとともにコンパイル・リンクすることによって動作するようデザインされたプログラム」を

「work that uses the Library(ライブラリを使用する著作物)」と呼称します。

その「ライブラリを使用する著作物は、LGPLの適用範囲ではない」としています。


参考


原文

The MIT License | Open Source Initiative

GNU劣等一般公衆ライセンス v2.1 - GNUプロジェクト - フリーソフトウェアファウンデーション


その他資料

LGPL【ライセンス】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

LGPLの概要 | easy labo

GPLやMITやCCなど主要ライセンスの内容と意味のまとめ | ITキヲスク

LGPLに対する動的リンクの誤解 - slow living in the sky

「GPL系ライセンス」とか「GPLと互換性のあるライセンス」とか「GPLv2またはそれ以降」って何だ!? | オープンソース・ライセンスの談話室


終わりに

専門ではないので誤訳・解釈違いがあるかもしれません。

お気軽にご指摘いただければと思います。