SPDX v3.0 に向けた Lite Profile の紹介

# はじめに

ルネサスエレクトロニクス(株)の伊藤と申します。
[OpenChain Japan Advent Calender](https://qiita.com/advent-calendar/2023/openchainjapanwg)三日目ですが、SPDX v3.0で導入される予定の、製品開発サプライチェーンでのライセンス情報授受の仕組みに関わる、「Lite Profile」について紹介いたします。

# なにに使うもの？
**組織・企業間でライセンス情報を正しく伝えるために**

製品開発やサービスを行うために、ソフトウェアを開発する場合、ソフトウェアを部品(パッケージ・モジュール)単位で開発を分担することが一般的です。

個別のソフトウェア開発元・コミュニティ → 複数のソフトウェアを取りまとめてパッケージする企業・組織 → 仕様を決め、全体をまとめ、一まとまりの製品として開発する企業 → 製品要件などを決め、実際に顧客へと販売する企業、と企業・組織間のサプライチェーンに沿って、製品を構成するハードウェアに付随するソフトウェアを基盤に開発すること、市販されているソフトウェアをサービスの一部に組み入れること、目的に合わせたソフトウェアをその分野に強い企業・組織に個別に開発してもらう、などと、ソフトウェアは渡っていきます。

それら企業・組織間で授受されるソフトウェアには、必ずライセンスの条件など、付随する情報が伴います。

特にオープン ソース ソフトウェア(OSS)が含まれる場合、組織間の明示的な委託・受託契約で定義されるライセンス条件に加えて、OSSの配布に伴い提供すべき各種情報、その他のソフトウェア　パッケージに関わるライセンス条件などを示す情報を、ソフトウェアと一緒に引き渡し、遵守する必要があります。

OSSのライセンスを遵守するためには、これらサプライチェーン上に位置する全ての企業が正確なライセンス情報を提供することが必要になります。サプライチェーン上で1社でもライセンス情報の提供を正確に提供することができないと、その企業より下流にある企業全てがOSSライセンスを遵守できなくなります。OSSのサプライチェーンに関係する担当者全員が理解して正確に作業することによって、適切にOSSの各ライセンスの条件を遵守することが可能になります。

# すでに活用されているSPDXフォーマット「SPDX-Lite」

OSSのライセンス情報をやりとりするためのフォーマットとして、SPDX v2.2.2以降のAnnex Gに、SPDX Liteが定義されています。
このフォーマットは、SPDXのフォーマットから、サプライチェーン内でライセンス情報をやりとりするために必須な項目を取り出して、SPDXの最小構成として定義されたフォーマットです。
構成要素を絞り込んだことで、手作業でも作成できて、目視で内容を確認できて、SPDXが関わる各種自動化ツールでも読み書きできる、可用性の高いフォーマットを目指した内容になっています。
更に、Microsoft ExcelなどSpread Sheetアプリで読み書き可能なSPDX Lite準拠のテンプレートもあり、ソフトウェアエンジニアだけではなく、サプライチェーンでソフトウェアライセンス管理に関わる様々な人が容易にアクセスできる構成となっています。
日本国内をはじめ、すでに自動車産業などで、サプライチェーンに関わる各社の間でソフトウェアライセンス情報を授受するために使われているフォーマットです。
![SPDXv3_LiteProfile0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538718/8014e325-43c8-32ed-6d4e-2843a99d6d01.jpeg)

# SPDX v3.0でライセンス情報を記述する最小構成要素「Lite Profile」

２日目の小保田さんの記事にも記載されていたように、SPDX v2.3以前のフォーマットは、主にオープンソースライセンスコンプライアンス観点で仕様が作成されていましたが、v3.0からはセキュリティ面をより重視する改良がなされ、より高い信頼性と安全性を提供するという目的。また、AI/MLなど新たな領域に対するSBOM需要を満たす目的という2つの理由から新しいバージョンの議論がなされており、SPDX v3.0は非常に広範な内容を記述することが可能なフォーマットとなっています。
一方で、ソフトウェアサプライチェーンでの作業実務では、セキュリティ面の取り扱いを行うのとは他の作業として、ソフトウェアライセンス管理が、ソフトウェアエンジニア以外の人たちも関わりながら実施されます。
当然ながら、SPDX v3.0が本格的に活用されるようになることで、以下のような要望が生じることが考えられます。
1. ソフトウェアライセンス管理の作業を行う上で、最新のSPDXの高度で複雑な記述の中からソフトウェアライセンス情報に限定した情報を取り出したい
1. 過去に蓄積したSPDX-Liteなどの情報と、最新のSPDXの記述内容を、比較検討したい
1. ソフトウェアライセンス情報をやり取りすることに特化したSPDXファイルを作成したい
1. 特化したSPDXファイルであってもSBOMとして取り扱えるだけの必要な項目を備え、SPDXに関わるツール群での読み書きができることを条件としたい

そこで、 [OpenChain Japan Automation & SBOM subgroup](https://openchain-project.github.io/OpenChain-JWG/)合同で、SPDX v3.0に向けて上記の要望を満たす Lite profileを提案しています。

# Lite Profileの定義

Lite Profileは、SPDX v3.0の主要なプロファイル（Core, Software, SimpleLicenseなどのプロファイル)の内、ソフトウェアサプライチェーン内でのライセンス情報共有に必要な項目を選び出し、それらを必須情報として列記する形で定義されています。
ですので、データ構造は、SPDX v3.0の他のプロファイルと共通で、相互運用性が保証されています。
また、項目の選定に際して、SPDX v2.3のSPDX-Liteとなるべく共通の要素を選ぶことで、相互に比較することを容易にしています。

ただ、2日目の小保田さんの記事にあるように、旧来はTag-Valueの組み合わせとValueに何をどのように記載するか、という定義だけであったものが、v3.0からはクラスとプロパティなどで定義されるオブジェクトモデルを採用、また、それらクラスやプロパティの制限やカテゴリ分けを行うためのProfileという概念が採用されていますので、SPDX v2.3のSPDX-Liteで行っていたようなSpread Sheetによる直接の読み書きは難しくなっています。
エンジニア以外の方がSPDX v3.0で得られた情報を基にライセンスを管理する場合には、何らかの方法でv2.3への情報の抽出を行う、などのライセンス管理ツールによる補助が必要であることが見込まれますが、Lite profileをv3.0の標準仕様として組み込むことでツールを実装する上での基盤定義が整えられることを目指しています。

![SPDXv3_LiteProfile1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538718/970ed3be-0332-4b7f-332d-f6f396fce219.jpeg)


# おわりに

SBOMへの対応が急務となる一方で、既にSPDX v2.3のSPDX Liteでサプライチェーン上でのライセンス管理実務が実業務上で行われていることもあり、双方を組み合わせた、SBOMの条件を満たすSPDX v3.0をライセンス管理実務に組み入れることの必要性は、広くSPDXコミュニティにも共有されています。
今後も、Lite profileに続く議論がSPDXコミュニティとの間に持たれることも予想されます。この記事をお読みの方も、是非とも議論に加わって頂ければと思っております。