ガイド · 04

デュアル(マルチ)ライセンス

一つのコードに2つ以上のライセンスを提供するデュアルライセンスの2つの類型、SPDX 式 OR・AND・WITH の意味、CLA が必要な理由と注意点を説明します。

最終確認: 2026-09-23

一つのコードに複数のライセンスを与える理由

著作権者は、同じコードを複数の条件で同時に許諾できます。受け取る人はその中から一つを選んで、その条件を守ればよいのです。こうする目的は大きく2つあります。

  1. 互換性を広げる — 異なるエコシステムのどれともうまく合うようにするため。
  2. ビジネスモデル — オープンソースとして公開しつつ、別途商用ライセンスを販売するため。

類型1: 寛容型2つを併用 — MIT OR Apache-2.0

Rust 言語とほとんどの Rust クレートが採用している方式です。利用者は MITApache-2.0 のうち都合のよいほうを選びます。

両方の利点を得られるので、ライブラリの作者に人気があります。リポジトリには LICENSE-MITLICENSE-APACHE の2つのファイルを置くのが慣例です。

類型2: コピーレフト+商用 — 「GPL か、お金を払うか」

コードを GPLAGPL で公開し、ソース公開義務を負いたくない企業には別契約で商用ライセンスを販売します。MySQL(GPL+Oracle の商用ライセンス)、Qt(LGPL-3.0/GPL+商用)が代表的な例です。

このモデルは、著作権者がすべてのコードの権利を持っていて初めて機能します。外部の貢献者が GPL でのみ貢献したコードは、著作権者が商用ライセンスで販売する権利を持たないからです。

CLA と DCO

SPDX 式での書き方

複数のライセンスの関係は SPDX ライセンス式で書きます。

意味
A OR B2つのうち1つを選んで従う(選択型デュアル)MIT OR Apache-2.0
A AND B両方に従う必要がある(異なる部分が混在する場合)MIT AND BSD-3-Clause
A WITH 例外ライセンスに例外条項を付けるGPL-2.0-only WITH Linux-syscall-note
括弧結合の順序を指定(MIT OR Apache-2.0) AND Unicode-3.0

ORAND を取り違えると意味が正反対になります。利用者が選べるなら OR、すべて守る必要があるなら AND です。

注意点

適用例

Rust スタイルのデュアルライセンスを適用するには、生成ツールで MIT と Apache-2.0 のファイルをそれぞれ入手して LICENSE-MITLICENSE-APACHE として保存し、メタデータに license = "MIT OR Apache-2.0" と書きます。各ファイルのヘッダーには SPDX-License-Identifier: MIT OR Apache-2.0 を書きます。

この記事は一般的な情報であり、法的助言ではありません。重要な決定は専門家にご相談ください。

参考資料