SPDX v3.0 概要と仕様の理解

# はじめに
[OpenChain Japan Advent Calender](https://qiita.com/advent-calendar/2023/openchainjapanwg) 2日目担当の小保田です。
OpenChain Japan working groupで SBOM subgroup のリーダーを務めさせていただいています。
OpenChain ProjectはThe Linux Foundation傘下のOrganizationなので、SBOMと言ってもどちらかというとSPDXの議論が多くなっていますが、合同開催しているAutomation subgroupと合わせて CycloneDX などの話題も扱っていきたいと思っていますので、ご興味のある方は是非ご参加ください。

# SBOM (Software Bill Of Materials) 
バイデン政権が発表した[サイバーセキュリティに関する大統領令14028](https://www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity)に端を発し、一気に注目が集まったSBOM。
SBOM (Software Bill Of Materials)とは、製品やサービスに含まれる全てのソフトウェアの部品表のことを表し、その内容には、ソフトウェア名称とそのバージョン、提供されるライセンス条件やソフトウェア間の依存関係など数多くの情報が記載されることが期待されています。
SBOMに含まれる情報は、複雑化したソフトウェアサプライチェーンを可視化することに役立ち、製品やサービスのセキュリティ、品質、ライセンスコンプライアンスの向上に役立つとして多くの注目を集めています。
SBOMの仕様としてはNTIAが[The Minimum Elements For a Software Bill of Materials](https://www.ntia.gov/sites/default/files/publications/sbom_minimum_elements_report_0.pdf) という文書の中で言及したこともあり、一般的にCycloneDX, SPDX, SWIDが標準だとされますが、市場ではCycloneDXとSPDXの2つのフォーマットが大きなコミュニティを形成しており、今後もその2つが主流となっていくように思います。

また、私が観測する限り、SBOMが全てを解決する銀の弾丸といったひとときの幻想は今はなりを潜めており、コミュニティや企業内でより実務に即し、実用化する為の議論や検討が行われつつあります。

# SPDX 3.0
そのような状況の中、今年(2023年)5月にSPDXの新バージョンであるv3.0のrcリリースが[SPDX Projectより発表](https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/)されました。
この発表に先立って行われた[Open Source Summit North America, SPDX tooling mini summit](https://events.linuxfoundation.org/archive/2023/open-source-summit-north-america/features/co-located-events/#spdx-3-tooling-mini-summit)の中で、何故 SPDXは新しいバージョンを出そうとしているのかについて講演・議論が行われました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114349/17ea51ed-e0c7-18ab-d0b8-1c7ab1c528ab.png)
Ref: [SPDX 3.0 Overview](https://youtu.be/S9zDRXtbFes)

簡単に纏めると、旧来は主にオープンソースライセンスコンプライアンス観点で仕様が作成されていましたが、v3.0からはセキュリティ面をより重視する改良がなされ、より高い信頼性と安全性を提供するという目的。また、AI/MLなど新たな領域に対するSBOM需要を満たす目的という2つの理由から新しいバージョンの議論がなされている、ということです。

更に、SPDX v3.0は過去の仕様に対して大きくその構造を変えようとしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114349/1834b4d5-61d4-7bc6-7058-db3bf268a459.png)
Ref: [SPDX 3.0 Overview](https://youtu.be/S9zDRXtbFes)

旧来はTag-Valueの組み合わせとValueに何をどのように記載するか、という定義だけであったものが、v3.0からはクラスとプロパティなどで定義されるオブジェクトモデルを採用、また、それらクラスやプロパティの制限やカテゴリ分けを行うためのProfileという概念が採用されることとなりました。

このような大きな変更の為、仕様の理解や実装を行うことがなかなか難しい状況となっています。

# SPDX3.0 仕様を理解するために

仕様が複雑になっているため、(ソフトウェアエンジニアにはまだわかる範囲であったため) OpenChain Japan Automation & SBOM subgroup 合同でどのように仕様を追っていくのか、また実際のSBOMには何を必須として記載しなければいけないのか、といったことを調査、資料化し勉強会を行ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114349/eb242874-be01-3d99-d338-2171d7e78e85.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114349/25f5fd85-7496-a630-0d02-90d21dc5b640.png)
Ref: [SBOM-sg-20230613.pptx](https://github.com/OpenChain-Project/OpenChain-JWG/blob/master/subgroups/sbom-sg/meetings/20230613/SBOM-sg-20230613.pptx)

この資料を見ていただくと、少なくともソフトウェアエンジニアの方にはSPDX v3.0の仕様をどのように追っていけばよいのか、ご理解いただけると思っています。
OpenChain Japan SBOM subgroupからは、この後紹介させていただく[SPDX Lite Profile](https://spdx.dev/learn/areas-of-interest/lite/)をPRしつつありますが、コントリビューション活動を行うためには仕様の理解が必須です。

# おわりに

今後、製品やサービスにはSBOMの作成や提供が必須となりつつある現在、私たち自身でより分かりやすく使いやすい仕様を提案できるというのはとてもエキサイティングなことではないでしょうか。