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

From SPDX Wiki
< Technical Team‎ | Proposals
Revision as of 20:41, 21 October 2010 by Pezra (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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>