システムパッケージデータ交換( SPDX、旧称ソフトウェアパッケージデータ交換) は、デジタルコンポーネントを含むシステムを部品表(BOM)として表現できるオープン標準です。 [ 2 ]当初はソフトウェアコンポーネントを記述するために設計された SPDX は、ソフトウェアシステム、AI モデル、ソフトウェアビルド、セキュリティデータ、その他のデータパッケージのコンポーネントを記述できます。SPDX では、コンポーネント、ライセンス、著作権、セキュリティ参照、およびシステムに関連するその他のメタデータを表現できます。[ 3 ]
SPDX の当初の目的はライセンスコンプライアンスの向上でしたが、[ 4 ]その後、サプライチェーンの透明性やセキュリティなどの追加のユースケースを促進するために拡張されました。[ 5 ] SPDX は、 Linux Foundationの後援の下、主要な業界専門家、組織、オープンソース愛好家が参加するコミュニティ主導の SPDX プロジェクトによって作成されています。
SPDX仕様は、セキュリティ、ライセンスコンプライアンス、およびその他のソフトウェアサプライチェーン成果物に関する国際的なオープン標準として、ISO/IEC 5962:2021として認められています。2025年8月現在 標準の最新バージョンは3.0.1です。[ 1 ]
SPDX 2.x 標準では、ソフトウェアに関する SPDX メタデータを含む SBOM ドキュメントが定義されています。ドキュメント自体は、JSON、YAML、RDF/XML、タグ値、スプレッドシートなど、複数の形式で表現できます。各 SPDX ドキュメントは、ソフトウェア パッケージ、特定のファイル、またはファイルからの抜粋など、1 つ以上の要素を記述します。各要素には一意の識別子が割り当てられ、要素のメタデータは他の要素を参照できます。[ 6 ]
SPDX 3.0では、情報を「エンベロープ」データとしてパッケージ化することなく、より詳細なレベルで情報を伝達できます。SPDX 3.0の重要な設計原則は、すべての要素が他の要素とは独立して表現および参照できることです。この独立性は、多様なコンテンツ交換および分析のユースケースをサポートするために必要であり、関心のある個々の要素の伝達を容易にします。また、関係構造も更新され、以前のバージョンの仕様と比較して、より表現力豊かで理解しやすくなっています。
SPDX 3.0データモデルは、リソース記述フレームワーク(RDF)に基づいています。データは、JSON-LD、Turtle(Terse RDF Triple Language)、N-Triples、RDF/XMLなど、RDF 1.1で定義されている形式を含む、さまざまな形式でシリアル化して保存および送信できます。
SPDX 3.0仕様では、ソフトウェア以外のユースケースの拡張をサポートするためにプロファイルが導入され、全体的な複雑さを増大させることなく実現されています。プロファイルを使用することで、ユーザーは必要なユースケースのデータを定義できるだけでなく、SPDXデータから直接収集できる情報量も増加させることができます。SPDX 3.0では、以下の8つのプロファイルが定義されています。
SPDX仕様の最初のバージョンは、ソフトウェアライセンスへの準拠を容易にすることを目的としていましたが[ 4 ] 、仕様の後のバージョンでは、既知のソフトウェアの脆弱性への参照を含めることができるなど、他のユースケースを目的とした機能が追加されました[ 14 ]。SPDXの最新バージョンは、NTIAの「ソフトウェア部品表の最小要素」を満たしています[ 18 ] 。
SPDX 2.2.1 は 2020 年 10 月に国際標準化機構(ISO)に提出され、2021 年 8 月にISO/IEC 5962:2021 情報技術 - SPDX® 仕様 V2.2.1として発行されました。 [ 11 ] [ 19 ]
各ライセンスは、「Mozilla Public License 2.0」のような完全な名前と、「MPL-2.0」のような短い識別子で識別されます。ライセンスは演算子とで組み合わせることができAND、ORグループ化は(、で行います)。
例えば、 は、(Apache License)または(MIT License(Apache-2.0 OR MIT) )のいずれかを選択できることを意味します。一方、 は、両方のライセンスが適用されることを意味します。Apache-2.0MIT(Apache-2.0 AND MIT)
また、「+」演算子があり、これをライセンスに適用すると、ライセンスの将来のバージョンも適用されることを意味します。たとえば、 は、 および が適用される可能性があるApache-1.1+ことを意味します(将来のバージョンも適用される可能性があります)。Apache-1.1Apache-2.0
SPDXは、ソフトウェアのライセンス条件を正確に記述します。ライセンスを種類別に分類しようとはせず、例えばBSDライセンスと類似した条件を持つライセンスを「BSDライク」と表現することはありません。[ 20 ]
2020年、欧州委員会はJoinupライセンスアシスタント[ 21 ]を公開しました。これにより、SPDX識別子と全文にアクセスして、50以上のライセンスを選択および比較することが可能になります。
GNU ライセンスファミリー (例: GNU General Public License バージョン 2 ) には、より新しいバージョンのライセンスを選択するオプションが組み込まれています。SPDX 表現がGPL-2.0「厳密に GPL バージョン 2.0」を意味するのか、「GPL バージョン 2.0 またはそれ以降のバージョン」を意味するのかが明確でない場合がありました。[ 22 ]そのため、SPDX ライセンス リストのバージョン 3.0 以降、GNU ライセンスファミリーは新しい名前になりました。[ 23 ] はGPL-2.0-only「厳密にバージョン 2.0」を意味し、はGPL-2.0-or-later「バージョン 2.0 またはそれ以降のバージョン」を意味します。
SPDXライセンス識別子は、使用されているライセンスを明確に宣言する短い文字列として、ソースコードファイルの先頭に追加できます。この構文は、2013年にDas U-BootSPDX-License-Identifierによって先駆的に導入され、バージョン2.1でSPDXの一部となりました。2017年には、FSFEがREUSEをリリースしました。これは、コメントを検証し、著作権情報を効率的に抽出するためのツールを提供します。[ 24 ]
SPDX ライセンス識別子は、 npm [ 25 ]、Python [ 26 ] 、 Rust cargo [ 27 ]などの多くのパッケージマネージャでも使用されています。Fedora Linuxでは、 RPMパッケージのメタデータで SPDX ライセンス式が使用され、以前の Callaway システムの使用に取って代わりました。[ 28 ] Debian では、少し異なるライセンス仕様が使用されています。[ 29 ]