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
(Convert to MediaWiki syntax)
 
(5 intermediate revisions by one other user not shown)
Line 1: Line 1:
<h2>Status</h2><p>
+
Status: draft
  
<strong>Draft</strong></p>
+
==Issue==
  
<h2>Issue</h2>
+
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.
  
<p>There are some licensing scenarios which are not expressable in SPDX.
+
==Use cases==
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.</p>
+
 
+
<h3>Use cases</h3><p>
+
  
 
The set of use cases we need to be able to describe in SPDX is:
 
The set of use cases we need to be able to describe in SPDX is:
  
1. a single license
+
# a single license
2. choice of one from multiple single licenses
+
# choice of one from multiple single licenses
3. multiple licenses (conjunctive)
+
# multiple licenses (conjunctive)
4. choice of one from multiple conjunctive license sets
+
# choice of one from multiple conjunctive license sets
5. choice of one license or any later versions of that license
+
+
</p><h2>Proposal</h2>
+
  
<p>Introduce a license set concept to cover all these use cases.
+
==Proposal==
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.</p><p>
+
  
The definition of `License` would not change. The `DeclaredLicense` and `DetectedLicense` properties would be
+
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.
updated to allow their value to be a `License`,
+
`ConjunctiveLicenseSet`, `DisjunctiveLicenseSet` or `LicenseOrLaterVersion`.
+
  
</p><h3>Examples</h3>
+
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`.
  
<h4>Single license</h4>
+
===Examples===
  
<pre><code><br />    &lt;Package&gt;<br />      &lt;DeclaredLicense&gt;<br />        &lt;rdf:Description rdf:about="license:GPL" /&gt;<br />      &lt;/DeclaredLicense&gt;<br />    &lt;/Package&gt;<br /></code></pre>
+
====Single license====
  
<h4>Disjunctive licenses</h4>
+
    <Package>
 +
      <DeclaredLicense>
 +
        <rdf:Description rdf:about="license:GPL" />
 +
      </DeclaredLicense>
 +
    </Package>
  
<pre><code><br />    &lt;Package&gt;<br />      &lt;DeclaredLicense&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;/DeclaredLicense&gt;<br />    &lt;/Package&gt;<br /></code></pre>
+
====Disjunctive licenses====
  
<h4>Complex disjunctive licenses</h4>  
+
    <Package>
 +
      <DeclaredLicense>
 +
        <ConjunctiveLicenseSet>
 +
          <licenses rdf:parseType="Collection">
 +
            <rdf:Description rdf:about="license:GPL" />
 +
            <rdf:Description rdf:about="license:BSD" />
 +
          </licenses>
 +
        </ConjunctiveLicenseSet>
 +
      </DeclaredLicense>
 +
    </Package>
  
<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>
+
====Complex disjunctive licenses====
  
<h4>License or later version</h4>
+
    <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>
  
<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>
+
== Changes ==
  
<h3>Changes</h3><h3>
+
These changes are available in the [https://github.com/pezra/spdx-spec/tree/compositeslicensing 'composite-licensing'] branch of https://github.com/pezra/spdx-spec.git. A full version of the spec with these changes is attached, as is a patch file to implement these changes.
  
<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>
+
[[Category:Technical]]

Latest revision as of 11:23, 7 March 2013

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. The `DeclaredLicense` and `DetectedLicense` properties would be updated to allow their value to be a `License`, `ConjunctiveLicenseSet`, or `DisjunctiveLicenseSet`.

Examples

Single license

   <Package>
     <DeclaredLicense>
       <rdf:Description rdf:about="license:GPL" />
     </DeclaredLicense>
   </Package>

Disjunctive licenses

   <Package>
     <DeclaredLicense>
       <ConjunctiveLicenseSet>
         <licenses rdf:parseType="Collection">
           <rdf:Description rdf:about="license:GPL" />
           <rdf:Description rdf:about="license:BSD" />
         </licenses>
       </ConjunctiveLicenseSet>
     </DeclaredLicense>
   </Package>

Complex disjunctive licenses

   <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>

Changes

These changes are available in the 'composite-licensing' branch of https://github.com/pezra/spdx-spec.git. A full version of the spec with these changes is attached, as is a patch file to implement these changes.