THE SPDX WIKI IS NO LONGER ACTIVE. ALL CONTENT HAS BEEN MOVED TO https://github.com/spdx

Difference between revisions of "Technical Team/Proposals/2010-10-21/Composite licensing"

From SPDX Wiki
Jump to: navigation, search
Line 48: Line 48:
 
<h4>License or later version</h4>
 
<h4>License or later version</h4>
  
<pre><code><br />    &lt;Package&gt;<br />      &lt;DeclaredLicense&gt;<br />        &lt;LicenseOrLaterVersion&gt;<br /> &lt;BaseLicense rdf:about="license:GPLv2" /&gt;<br />        &lt;/LicenseOrLaterVersion&gt;<br />      &lt;/DeclaredLicense&gt;<br />    &lt;/Package&gt;<br /></code></pre>
+
<pre><code><br />    &lt;Package&gt;<br />      &lt;DeclaredLicense&gt;<br />        &lt;LicenseOrLaterVersion&gt;<br />         &lt;BaseLicense rdf:about="license:GPLv2" /&gt;<br />        &lt;/LicenseOrLaterVersion&gt;<br />      &lt;/DeclaredLicense&gt;<br />    &lt;/Package&gt;<br /></code></pre>
 +
 
 +
<h3>Changes<h3>
 +
 
 +
<p>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.</p>

Revision as of 22:41, 15 November 2010

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>

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.