Rustで依存しているクレートのライセンスをまとめる
依存しているクレートのライセンス条項をまとめるためのcargo-bundle-licenses
を使ってみました。
背景
私はTauriという、Rustでバックエンドの処理が書けるデスクトップ/モバイルアプリケーションフレームワークを使っています。ライセンス表示をしようと思い、依存しているクレートのライセンス条項をまとめる方法を検討していました。
Rust側とWebフロント側での依存関係をまとめたいため、JSON形式で扱いたいなと思いながら探しており、そこで見つけたのがcargo-bundle-licenses
です。
cargo-bundle-licenses
出力形式としては、TOML、JSON、YAMLが選べます。
cargo bundle-licenses --format json --output deps.json
rand
クレートに依存しているプロジェクトで実行すると、成果物は以下のようになりました。
{
"root_name": "dep",
"third_party_libraries": [
{
"package_name": "bitflags",
"package_version": "2.9.0",
"repository": "https://github.com/bitflags/bitflags",
"license": "MIT OR Apache-2.0",
"licenses": [
{
"license": "MIT",
"text": "(ライセンス条項)"
},
{
"license": "Apache-2.0",
"text": "(ライセンス条項)"
}
]
},
{
"package_name": "cfg-if",
"package_version": "1.0.0",
"repository": "https://github.com/alexcrichton/cfg-if",
"license": "MIT/Apache-2.0",
"licenses": [
{
"license": "MIT",
"text": "(ライセンス条項)"
},
{
"license": "Apache-2.0",
"text": "(ライセンス条項)"
}
]
},
(省略)
rand
と、rand
が依存しているクレートのクレートのライセンス条項が含まれています。(ライセンス条項)
の部分には実際のライセンス条項が書かれています。
内部的にはcargo_metadata
でパッケージの場所を取得し、そこでLICENSE.txt
やLICENSE-MIT
などのファイルを探しているようです。
他のツールとの比較
-
cargo-license
とcargo-deny
のlist
機能
どちらもライセンスの一覧を表示する機能がありますが、ライセンス条項は含まれていません。 -
cargo-about
ライセンス条項の一覧をHTMLで出力します。
今回はJSONでライセンス条項をまとめたかったため、このツールが適していました。
まとめ
cargo-bundle-licenses
を使用すると、Rustプロジェクトの依存クレートのライセンス条項をまとめることができます。TOML、JSON、YAMLのフォーマットで出力できます。
Q. MIT ライセンスの特徴として正しくないものはどれでしょう?
派生物に同じライセンスを適用する義務はありません。MIT ライセンスでは、著作権表示とライセンス文を保持する必要があり、商用利用が認められ、ソフトウェアの使用に関する法的責任から著作権者を保護する免責条項が含まれています。
Q. AGPL(Affero General Public License)が通常のGPLと異なる主な点は何でしょう?
AGPLは通常のGPLを拡張したライセンスで、最も重要な違いは「ネットワークの抜け穴」を塞いでいる点です。つまり、ソフトウェアをネットワーク経由でサービスとして提供する場合でも、ユーザーにソースコードを提供する義務があります。商用利用は禁止されておらず、特許権の規定も存在し、派生物には同じライセンスを適用する必要があります。