-
Notifications
You must be signed in to change notification settings - Fork 3k
SPDX and Non SPDX License Support #10479
Description
I am opening this issue that was closed while discussion was ongoing for an appropriate solution to #8918. Discussion has been ongoing for months over this in #8918 as well as #8291, #8557, #8773, #8795 so it has touched a nerve. I urge NPM to listen and collaborate for an appropriately considered solution that will work for everyone.
The latest solution recommended is as follows that has the following benefits:
- backwards compatible
- may be validated with SPDX
- is open and inclusive
- may be validated against other possible license databases/registries in future ie. XYZ('Apple Software License')
- may use "OR" on non SPDX licenses if "license" property cannot be a list
- may emit a warning if it detects SPDX licenses that ought to be enclosed in SPDX()
Valid SPDX licenses
"license": "SPDX(MIT)"
"license": "SPDX(ISC OR GPL-3.0)"
Non SPDX licenses
"license": "Oculus VR Inc. Software Development Kit License"
"license": "Artistic 2.0 OR StrongLoop Subscription Agreement"
"license": "WTFPL"
May Emit Warning
Backwards compatible but a SPDX License.
"license": "MIT"
My recommendation is to inform NPM users of the change of the license property and give module developers some time before driving everyone crazy with SPDX warnings as has been done when you imposed it. Perhaps blog about the change first to allow voluntary revisions until a certain date where warnings could be emitted. One way or the other, I urge you to engage users before disturbing software and build systems with noise.
I have not heard anyone come out against SPDX, only the way you have chosen to implement it that is not backwards compatible to about 5 years of data, excludes non SPDX licenses from package metadata, and creates a non standard SPDX description of "SEE LICENSE IN" that makes the language of the metadata awkward. ie.
"license": "SEE LICENSE IN LICENSE"
Metadata is a source of truth and these type of phrases are meaningless and only require more investigation into a repo or package.