THE SPDX WIKI IS NO LONGER ACTIVE. ALL CONTENT HAS BEEN MOVED TO https://github.com/spdx
Technical Team/Proposals/2010-10-21/Composite licensing
Contents
- 1 Status
- 2 Issue
- 3 Proposal
- 3.1 Examples
- 3.2 Changes<h3> These changes are available in the <a href="https://github.com/pezra/spdx-spec/tree/license-sets">'license-sets'</a> branch of <a href="https://github.com/pezra/spdx-spec.git">https://github.com/pezra/spdx-spec.git</a>. A full version of the spec with these changes is attached, as is a patch file to implement these changes.
Status
Draft
Issue
There are some licensing scenarios which are not expressable in SPDX. For example, there is currently no way to express that a file can be used under the licenses A and B or A and C.
Use cases
The set of use cases we need to be able to describe in SPDX is:
1. a single license 2. choice of one from multiple single licenses 3. multiple licenses (conjunctive) 4. choice of one from multiple conjunctive license sets 5. choice of one license or any later versions of that license
Proposal
Introduce a license set concept to cover all these use cases. Specifically, a `ConjunctiveLicenseSet`, a `DisjunctiveLicenseSet` and a `LicenseOrLaterVersion`. Members of these types of sets would be of type `License`, `ConjunctiveLicenseSet` or `DisjunctiveLicenseSet`. This would allow composing licensing information in arbitrary conjunctive and disjunctive groupings.
The definition of `License` would not change. The `DeclaredLicense` and `DetectedLicense` properties would be updated to allow their value to be a `License`, `ConjunctiveLicenseSet`, `DisjunctiveLicenseSet` or `LicenseOrLaterVersion`.
Examples
Single license
<code><br /> <Package><br /> <DeclaredLicense><br /> <rdf:Description rdf:about="license:GPL" /><br /> </DeclaredLicense><br /> </Package><br /></code>
Disjunctive licenses
<code><br /> <Package><br /> <DeclaredLicense><br /> <ConjunctiveLicenseSet><br /> <licenses rdf:parseType="Collection"><br /> <rdf:Description rdf:about="license:GPL" /><br /> <rdf:Description rdf:about="license:BSD" /><br /> </licenses><br /> </ConjunctiveLicenseSet><br /> </DeclaredLicense><br /> </Package><br /></code>
Complex disjunctive licenses
<code><br /> <Package><br /> <DeclaredLicense><br /> <DisjuntiveLicenseSet><br /> <licenses rdf:parseType="Collection"><br /> <ConjunctiveLicenseSet><br /> <licenses rdf:parseType="Collection"><br /> <rdf:Description rdf:about="license:GPL" /><br /> <rdf:Description rdf:about="license:BSD" /><br /> </licenses><br /> </ConjunctiveLicenseSet><br /> <ConjunctiveLicenseSet><br /> <licenses rdf:parseType="Collection"><br /> <rdf:Description rdf:about="license:GPL" /><br /> <rdf:Description rdf:about="license:Apache" /><br /> </licenses><br /> </ConjunctiveLicenseSet><br /> </licenses><br /> </DisjuntiveLicenseSet><br /> </DeclaredLicense><br /> </Package><br /><br /></code>
License or later version
<code><br /> <Package><br /> <DeclaredLicense><br /> <LicenseOrLaterVersion><br /> <BaseLicense rdf:about="license:GPLv2" /><br /> </LicenseOrLaterVersion><br /> </DeclaredLicense><br /> </Package><br /></code>