unchain-tech/UNCHAIN-projects

コントラクトのコードが UNLICENSED (≠ The Unlicense) なのはMITと矛盾するのではないか

Closed this issue · 3 comments

提案内容

https://github.com/unchain-dev/UNCHAIN-projects/blob/2c73353415c41290ef0b9afad94c2f1f1d6e7e6f/docs/1-ETH-dApp/ja/section-1/Lesson_2_Solidity%E3%81%A7%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%82%88%E3%81%86.md?plain=1#L39-L62

1-ETH-dApp」の Section 1 Lesson 2 にて、コントラクトのライセンスについて上記のように解説があります。

この SPDX-License-Identifier: UNLICENSED という記述は(そもそもSPDXとしてはinvalidのようですが)いわゆるプロプライエタリなコードを示すのに、npmやSolidityなど一部で使われているようです。(cf: https://opensource.stackexchange.com/a/12412

Unfortunately, the format SPDX-License-Identifier: UNLICENSED is an invalid SPDX license expression per the SPDX spec, because the identifier UNLICENSED is not part of the SPDX license list. While well-intentioned, Solidity has here caused potentially dangerous confusion.

一方で当プロジェクトはLICENSEファイルこそ無いものの、README.mdに「全てオープンソース(MIT ライセンス)で運用されています」とあり、ドキュメント中のサンプルソースコードについても同様に適用されていると期待できます。

もちろん、チュートリアルを実施している各ユーザーがそれぞれの判断において、元コード及びユーザー独自のコードをプロプライエタリとして(再)宣言することは可能でしょう(MITは厳格なcopyleftと違い、コードのプロプライエタリ化も容認しているはずと記憶しています)。しかし、サンプル中にUNLICENSEDがサンプルソースとセットで書いてあるのは、元コードがそもそもプロプライエタリ、流用不可であると誤認できてしまいます。あるいは誤認ではなく意図的な設定であれば、MITライセンスのプロジェクト中に流用不可なコードが混在していることになり、ライセンスに矛盾が生じています。

解決策としては、ドキュメント中では SPDX-License-Identifier: MIT で宣言し、必要であれば UNLICENSED の説明をするのが良いと思われます。(チュートリアル完了時など)

備考

なお、上記StackExchangeの回答にもありますが、SPDXにある UnlicenseThe Unlicense という、ソフトウェアでのパブリックドメインを表明するものです(プロプライエタリと真逆)。もしこちらを意図していたならばそのように改訂する手もありますが、 UNLICENSED / Unlicense で紛らわしいので個人的にはお勧めいたしかねます。

neila commented

ご指摘ありがとうございます :3 MITで合ってます、該当部分変更のPRお願いします 🙇

@neila かしこまりました。
他のチュートリアル・セクションも含めて、全部で15か所 SPDX-License-Identifier: UNLICENSED があるようなのですが、全て SPDX-License-Identifier: MIT に置き換えてしまってよろしいでしょうか?

neila commented

okです!