[5] 
[[SPDX]] は [[Linux]] [[ソフトウェアパッケージ]]を [[RDFデータモデル]]を使って記述する規格ですが、
[[ライセンス記述]]についても規定があります。


* 仕様書

[REFS[

- [2] 
[CITE@en-US[Specifications – SPDX]], [TIME[2024-05-03T04:46:56.000Z]] <https://spdx.dev/use/specifications/>
--[3] [CITE@en[SPDX Specification 2.1 (web version) | Software Package Data Exchange (SPDX)]]
( ([TIME[2016-12-20 16:40:30 +09:00]]))
<https://spdx.org/spdx-specification-21-web-version>
--- [1] 移転確認 [TIME[2024-05-03T04:46:45.000Z]]
-- [23] 
[CITE@en[Annex B: License Matching Guidelines and Templates - specification v2.3.0]], [TIME[2024-04-23T02:59:46.000Z]], [TIME[2024-05-03T08:21:39.153Z]] <https://spdx.github.io/spdx-spec/v2.3/license-matching-guidelines-and-templates/>
-- [4] [CITE@en[Description - SPDX v3 Specification]], [TIME[2024-04-23T02:59:46.000Z]], [TIME[2024-05-03T04:47:06.999Z]] <https://spdx.github.io/spdx-spec/v3.0/model/Licensing/Licensing/>
-- [35] 
[CITE@en[Using SPDX short identifiers in Source Files - SPDX v3 Specification]], [TIME[2024-04-23T02:59:46.000Z]], [TIME[2024-05-03T09:01:48.700Z]] <https://spdx.github.io/spdx-spec/v3.0/annexes/using-SPDX-short-identifiers-in-source-files/>
-- [36] 
[CITE@en[SPDX License Expressions - SPDX v3 Specification]], [TIME[2024-04-23T02:59:46.000Z]], [TIME[2024-05-03T09:05:53.493Z]] <https://spdx.github.io/spdx-spec/v3.0/annexes/SPDX-license-expressions/>


]REFS]

* SPDX License List

[11] 
[DFN[SPDX License List]]
は
[[SPDX]]
の[[ライセンス]]情報データベースです。
[SRC[>>9]]

[12] 
年に数回更新されています。基本的には[[オープンソース]]またはそれに類する[[ライセンス]]が対象ですが、
そうでないものも一部含まれるようです。 [SRC[>>9, >>7, >>14, >>15]]

[16] 
単体の[[ライセンス]]の他に、[[ライセンス]]に追加される例外条項もいくつか登録されています。
[SRC[>>14, >>22]]

[13] 登録されている[[ライセンス]]は[[Webサイト]]で一覧表示されている
[SRC[>>9]]
ほか、
元データは [[GitHub]] で管理されており [SRC[>>7]]、
扱いやすい [[JSON]] 形式でも提供されています [SRC[>>10]]。

[17] データファイル自体の[[ライセンス]]は困ったことにどこにも明記されていません。
ただし[[Webページ]]には運営元の
[[Linux Foundation]]
の利用規約ページへのリンクがあり、そのリンク先記事によると
[[Creative Commons Attribution 3.0 License]]
で利用できます
[SRC[>>9, >>19]]。
[TIME[2024-05-03T08:11:45.300Z]]

[21] 
一覧の各[[ライセンス]]、例外には[[ASCII文字]]で構成される短い識別子が割り当てられています。
(>>6)

[18] 
一覧には [[OSI]] 
の承認 ([SEE[ [[Open Source Initiative]] ]]) の有無が記載されています。
[SRC[>>9]]
[[OSI]] で承認された[[ライセンス]]は一覧に掲載されることになっているようです。
[SRC[>>14]]

[20] 
一覧には[[自由ソフトウェア財団]]による[[自由]]な[[ライセンス]]との判断の有無
([SEE[ [[自由ソフトウェア]] ]]) が記載されています。
[SRC[>>9]]

[REFS[

-
[9] [CITE[[[SPDX License List]] | Software Package Data Exchange (SPDX)]]
([TIME[2020-05-16 03:28:38 +09:00]])
<https://spdx.org/licenses/>
--
[22] 
[CITE[License Exceptions | Software Package Data Exchange (SPDX)]], [TIME[2024-02-08T17:37:48.000Z]], [TIME[2024-05-03T08:21:03.398Z]] <https://spdx.org/licenses/exceptions-index.html>
- [7] 
[CITE@en[GitHub - spdx/license-list-XML: This is the repository for the master files that comprise the SPDX License List]], [TIME[2024-05-03T07:50:22.000Z]] <https://github.com/spdx/license-list-XML>
-- [14] 
[CITE@en[license-list-XML/DOCS/license-inclusion-principles.md at main · spdx/license-list-XML · GitHub]], [TIME[2024-05-03T08:00:43.000Z]] <https://github.com/spdx/license-list-XML/blob/main/DOCS/license-inclusion-principles.md>
-- [15] 
[CITE@en[license-list-XML/CONTRIBUTING.md at main · spdx/license-list-XML · GitHub]], [TIME[2024-05-03T08:01:27.000Z]] <https://github.com/spdx/license-list-XML/blob/main/CONTRIBUTING.md>
-- [24] [CITE@en[license-list-XML/DOCS/license-fields.md at main · spdx/license-list-XML · GitHub]], [TIME[2024-05-03T08:25:57.000Z]] <https://github.com/spdx/license-list-XML/blob/main/DOCS/license-fields.md>
- [8] 
[CITE@en[GitHub - spdx/license-list-data: Various data formats for the SPDX License List including RDFa, HTML, Text, and JSON]], [TIME[2024-05-03T07:52:28.000Z]] <https://github.com/spdx/license-list-data>
--[10] 
[CITE@en[license-list-data/json at main · spdx/license-list-data · GitHub]], [TIME[2024-05-03T07:52:39.000Z]] <https://github.com/spdx/license-list-data/tree/main/json>
--
[27] 
[CITE@en[license-list-data/template at main · spdx/license-list-data · GitHub]], [TIME[2024-05-03T08:31:42.000Z]] <https://github.com/spdx/license-list-data/tree/main/template>
- [19] 
[CITE@en[Terms | [[Linux Foundation]]]], [TIME[2024-04-30T19:33:59.000Z]], [TIME[2024-05-03T08:12:43.913Z]] <https://www.linuxfoundation.org/legal/terms>




]REFS]


-*-*-

[57] 
[[SPDX]] という規格の出自の関係で[[オープンソース]]系の[[ライセンス]]は充実しています。


[58] 
しかし[[オープンソース]]でないものは一部例外を除いて登録されていません。

[59] 
また、[[プログラム]]以外の[[ライセンス]] ([[オープンデータ]]関係など)
は不十分な上に、汎用性のない個別の規約は基本的に対象外となっているようです。
(政府機関のデータ公開などでは一般化されていない当該機関専用の許諾になっていることが多い。)

[EG[


[60] 
[CODE[CC-BY-SA-2.1-JP]]
はあるのに、
[[CC BY 2.1 JP]]
は登録されていません。
[TIME[2024-09-06T04:19:35.900Z]]

]EG]

[EG[
[61] 
[[日本]]の[[政府標準利用規約]]は完結の[[ライセンス]]ではなく各省庁ごとの[[利用規約]]の雛形なので、
登録されていません。

]EG]



* SPDXライセンス識別子

[6] 
[[SPDX]] は各[[ライセンス]]および例外に識別子を与えています。 
[DFN[SPDX license identifier]],
[DFN[SPDX ID]] などと呼ばれて
[[SPDX]] 以外でも使われています。

[25] 
[[SPDX License List]] では short identifier (短い識別子) と呼ばれています。
短い識別子は、
[[ASCII英数字]],
[CH[.]],
[CH[-]]
で構成されます。
[SRC[>>24]]

[52] 
[[SPDXライセンス式]]で使われます。

[50] 
[[Open Source Initiative]] の[[ライセンス]]の一覧で使われています。

[51] 
[[Open Definition]] の[[ライセンス]]の一覧で使われています。
[[Open Definition]] はそれ以外の独自の [[ID]] 体系も使っています。
[SEE[ [[Open Definition]] ]]

[54] 
[[GitHub]] その他の[[ライセンス記述の検知]]で使われています。
[[GitHub]] は [[SPDX ID]] の他にライセンス族 (family) の識別子もいくつか使っています。
[SEE[ [[ライセンス記述の検出]] ]]

;; [55] [[CKANパッケージのライセンス記述]]で使われる [[ID]]
は [[SPDX ID]] と一致していることもありますが、そうでないことも多いです。

* SPDX ライセンス式

[37] 
[DFN[SPDX license expression]] ([DFN[SPDX license expression]])
は[[ライセンス]]を表す[[式言語]]です。

[38] 
[[ライセンス]]や例外は、 [[SPDX License List]] の短い識別子で表せます。
[SRC[>>36, >>29]]

[39] 
また、未登録の[[利用者]]定義の[[ライセンス]]や例外を [CODE[DocumentRef-]] 
から始まる名前で記述する方法もあります。 [SRC[>>36]]

;; [40] しかし [[SPDX]] 以外での利用が多いと思われますが、
そこでは[[利用者]]定義の[[ライセンス]]を定義したファイルを明示する方法がなく、
実質的に使えないと思われます。

[41] 
[[ライセンス]]の末尾に [CH[+]] をつけることで、その版'''[[以上]]'''を表せます。
[SRC[>>36, >>29]]

[42] ただし [[GNU]] 系[[ライセンス]]は「以上」入りの[[ライセンス]]の定義が
[[SPDX License List]]
に登録されているので、そちらを使うことになっています。
[SRC[>>29, >>43]]

;; [56] [[CC]] のようなライセンスでバリエーションがあるとき、「以上」が何を指すのかよくわからないことがあります...

[46] 
[CODE[AND]], [CODE[OR]] の[[演算子]]が用意されています。
[SRC[>>36, >>29]]

[47] 
[CODE[WITH]] によって[[ライセンス]]に例外を付加できます。
[SRC[>>36, >>29]]

[48] 
[CH[(]], [CH[)]] で括ってまとめることができます。
[SRC[>>36, >>29]]


[44] 
[CODE[AND]] 等の[[演算子]]は、[[大文字]]版と[[小文字]]版が用意されていますが、
[[大文字・小文字不区別]]とされます。
[SRC[>>36]]
つまりどちらでもいいものの、混合は駄目ということです。

[45] 
[[ライセンス]]や例外の名前は、[[大文字・小文字不区別]]であるものの、
[[SPDX License List]] 掲載の名前通りが望ましいとされます。
[SRC[>>36]]


[49] 
[[dual license]] のような現実に必要とされる[[ライセンス]]付与形態を正確に記述できる反面、
[[ライセンス]]情報を読取る処理が複雑になってしまうのは大きな欠点です。


[53] 
[CODE[SPDX-License-Identifier:]] で使われます。

[REFS[
- [43] 
[CITE@en[Don't Say “Licensed under GNU GPL 2”! - GNU Project - Free Software Foundation]], [TIME[2024-05-03T09:11:06.000Z]] <https://www.gnu.org/licenses/identify-licenses-clearly.html>
]REFS]



* [CODE[SPDX-License-Identifier:]]

[30] 
[DFN[SPDX short form identifier]]
と称して[[ソースコード]]等に[[コメント]]として[[ライセンス]]情報を[[記述][ライセンス記述]]することを
[[SPDX]] では推奨しています。
[SRC[>>29]]


[28] 
具体的には
[DFN[[CODE[SPDX-License-Identifier:]]]]
の後に
[[SPDXライセンス識別子]]または[[SPDXライセンス式]]を書きます。
[SRC[>>29, >>35]]

[31] 
[[プログラミング言語]]の[[コメント]]としての記号を前後にいれることができます。

[EG[
[32] 例えば

[PRE[
// SPDX-License-Identifier: Apache-2.0 AND (MIT OR GPL-2.0-only)
]PRE]

のように書けます。
[SRC[>>29]]

]EG]

[33] この記述は[[ライセンス]]の種類を記述するだけです。従来の[[著作権表記]]等はそのまま書く必要があるとされます。
[SRC[>>29]]

[34] 
この表記法は比較的新しい慣習で、[[オープンソース]]コミュニティーの一部では受け入れられていますが、
一方でこのような表記の必要を感じないとして拒む人々もいます。

[62] 
応用:
[[REUSE]]


[REFS[

- [29] 
[CITE@en-US[Handling License Info – [[SPDX]]]], [TIME[2024-05-03T08:37:14.000Z]] <https://spdx.dev/learn/handling-license-info/>

]REFS]

* ライセンス条項の一致判定

[SEE[ [[ライセンス検知]] ]]

[26] 
[[SPDX License List]] には各[[ライセンス]]の適用を記述する著作権表記等の文章の雛形が含まれています
[SRC[>>27]]。
例えば条項の文言のうち権利者名がここに入る、というような形で記載されています。
[[SPDX]]
仕様書では、この雛形を使用して実際の著作権表記等の文章との[DFN[一致][SPDXライセンス一致]]を判定する方法が定められています
[SRC[>>23]]。
例えばこのような表記揺れは無視する、などの規則が列挙されています。



* メモ