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
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
Proposal
Introduce a license set concept to cover all these use cases. Specifically, a `ConjunctiveLicenseSet` and a `DisjunctiveLicenseSet`. 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. Both `ConjunctiveLicenseSet` and `DisjunctiveLicenseSet` would have a required property `licenses`.
The `DeclaredLicense` and `DetectedLicense` properties would be updated to allow their value to be a `License`, `ConjunctiveLicenseSet`, or `DisjunctiveLicenseSet`.
Examples
Single license
<code>
<Package>
<DeclaredLicense>
<rdf:Description rdf:about="license:GPL" />
</DeclaredLicense>
</Package>
</code>
Disjunctive licenses
<code>
<Package>
<DeclaredLicense>
<ConjunctiveLicenseSet>
<licenses rdf:parseType="Collection">
<rdf:Description rdf:about="license:GPL" />
<rdf:Description rdf:about="license:BSD" />
</licenses>
</ConjunctiveLicenseSet>
</DeclaredLicense>
</Package>
</code>
Complex disjunctive licenses
<code>
<Package>
<DeclaredLicense>
<DisjuntiveLicenseSet>
<licenses rdf:parseType="Collection">
<ConjunctiveLicenseSet>
<licenses rdf:parseType="Collection">
<rdf:Description rdf:about="license:GPL" />
<rdf:Description rdf:about="license:BSD" />
</licenses>
</ConjunctiveLicenseSet>
<ConjunctiveLicenseSet>
<licenses rdf:parseType="Collection">
<rdf:Description rdf:about="license:GPL" />
<rdf:Description rdf:about="license:Apache" />
</licenses>
</ConjunctiveLicenseSet>
</licenses>
</DisjuntiveLicenseSet>
</DeclaredLicense>
</Package>
</code>