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 9: Line 9:
 
used under the licenses A and B or A and C.</p>
 
used under the licenses A and B or A and C.</p>
  
<h3>Use cases</h3><p>
+
<h3>Use cases</h3>
  
The set of use cases we need to be able to describe in SPDX is:
+
<p>The set of use cases we need to be able to describe in SPDX is:</p>
  
1. a single license
+
<ol>
2. choice of one from multiple single licenses
+
<li><p>a single license</p></li>
3. multiple licenses (conjunctive)
+
<li><p>choice of one from multiple single licenses</p></li>
4. choice of one from multiple conjunctive license sets
+
<li><p>multiple licenses (conjunctive)</p></li>
5. choice of one license or any later versions of that license
+
<li><p>choice of one from multiple conjunctive license sets</p></li>
 +
</ol>
 
   
 
   
</p><h2>Proposal</h2>
+
<h2>Proposal</h2>
  
 
<p>Introduce a license set concept to cover all these use cases.
 
<p>Introduce a license set concept to cover all these use cases.
Line 26: Line 27:
 
type `License`, `ConjunctiveLicenseSet` or `DisjunctiveLicenseSet`.
 
type `License`, `ConjunctiveLicenseSet` or `DisjunctiveLicenseSet`.
 
This would allow composing licensing information in arbitrary
 
This would allow composing licensing information in arbitrary
conjunctive and disjunctive groupings.</p><p>
+
conjunctive and disjunctive groupings.</p>
  
The definition of `License` would not change. The `DeclaredLicense` and `DetectedLicense` properties would be
+
<p>The definition of `License` would not change. The `DeclaredLicense` and `DetectedLicense` properties would be
 
updated to allow their value to be a `License`,
 
updated to allow their value to be a `License`,
`ConjunctiveLicenseSet`, `DisjunctiveLicenseSet` or `LicenseOrLaterVersion`.
+
`ConjunctiveLicenseSet`, or `DisjunctiveLicenseSet`.</p>
  
</p><h3>Examples</h3>
+
<h3>Examples</h3>
  
 
<h4>Single license</h4>
 
<h4>Single license</h4>
Line 46: Line 47:
 
<pre><code><br />    &lt;Package&gt;<br />      &lt;DeclaredLicense&gt;<br />        &lt;DisjuntiveLicenseSet&gt;<br />          &lt;licenses rdf:parseType="Collection"&gt;<br />            &lt;ConjunctiveLicenseSet&gt;<br />              &lt;licenses rdf:parseType="Collection"&gt;<br />                &lt;rdf:Description rdf:about="license:GPL" /&gt;<br />                &lt;rdf:Description rdf:about="license:BSD" /&gt;<br />              &lt;/licenses&gt;<br />            &lt;/ConjunctiveLicenseSet&gt;<br />            &lt;ConjunctiveLicenseSet&gt;<br />              &lt;licenses rdf:parseType="Collection"&gt;<br />                &lt;rdf:Description rdf:about="license:GPL" /&gt;<br />                &lt;rdf:Description rdf:about="license:Apache" /&gt;<br />              &lt;/licenses&gt;<br />            &lt;/ConjunctiveLicenseSet&gt;<br />          &lt;/licenses&gt;<br />        &lt;/DisjuntiveLicenseSet&gt;<br />      &lt;/DeclaredLicense&gt;<br />    &lt;/Package&gt;<br /><br /></code></pre>
 
<pre><code><br />    &lt;Package&gt;<br />      &lt;DeclaredLicense&gt;<br />        &lt;DisjuntiveLicenseSet&gt;<br />          &lt;licenses rdf:parseType="Collection"&gt;<br />            &lt;ConjunctiveLicenseSet&gt;<br />              &lt;licenses rdf:parseType="Collection"&gt;<br />                &lt;rdf:Description rdf:about="license:GPL" /&gt;<br />                &lt;rdf:Description rdf:about="license:BSD" /&gt;<br />              &lt;/licenses&gt;<br />            &lt;/ConjunctiveLicenseSet&gt;<br />            &lt;ConjunctiveLicenseSet&gt;<br />              &lt;licenses rdf:parseType="Collection"&gt;<br />                &lt;rdf:Description rdf:about="license:GPL" /&gt;<br />                &lt;rdf:Description rdf:about="license:Apache" /&gt;<br />              &lt;/licenses&gt;<br />            &lt;/ConjunctiveLicenseSet&gt;<br />          &lt;/licenses&gt;<br />        &lt;/DisjuntiveLicenseSet&gt;<br />      &lt;/DeclaredLicense&gt;<br />    &lt;/Package&gt;<br /><br /></code></pre>
  
<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>
 
  
 
<h3>Changes</h3><h3>
 
<h3>Changes</h3><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></h3>
+
<p>These changes are available in the <a href="https://github.com/pezra/spdx-spec/tree/compositeslicensing>'composite-licensing'</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></h3>

Revision as of 18:28, 16 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

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`, or `DisjunctiveLicenseSet`.

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>


Changes

These changes are available in the <a href="https://github.com/pezra/spdx-spec/tree/compositeslicensing>'composite-licensing'</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.