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

Difference between revisions of "Technical Team/SPDX Specification Versions"

From SPDX Wiki
Jump to: navigation, search
(clean up accidentally imported formatting - make style consistent.)
 
(72 intermediate revisions by 6 users not shown)
Line 1: Line 1:
<p>For anyone wanting to add comments/questions/etc. directly in the document, so they get tracked without having to do a lot of version reference, please put your comments on a new line and use the following syntax:</p>
+
This is the location of the official version of the SPDX specification. During active development of next version, drafts may be found here as well.
<p><em>(</em>yyyymmdd initials<em> comments) &nbsp;</em></p>
+
 
<p><em>for</em>&nbsp;example:</p>
+
The [http://spdx.org/licenses/ license list] used by SPDX is available too, as are the [[Technical_Team/SPDX_RDF_Vocabularies_and_Terms/1.2/Vocabulary|Version 1.2 RDF references]].
<p>(20100407 KS <em>does this make sense?</em>)</p>
+
 
<p>&nbsp;</p>
+
[[Category:Technical]]
<p><strong>Version: DRAFT 20100407</strong></p>
+
<p>(20100310 JM <em>General - Can we add a date or version to the document? &nbsp;We should probably add a revision table when it goes live but in my view not necessary to have right now</em>) (20100407 KS done)</p>
+
<p>(20100310 JM <em>General – I would add a standard disclaimer (i.e. we tried to get this right but there may be mistakes) to the Package facts that travel with it. Perhaps in the Identification Information section. See my next comment on License since it may solve that.)</em></p>
+
<p>(20100310 JM <em>General – Is the Package Facts file licensed (the use of a Formal Copyright Holder in 3.2.7 seems to imply that)? If so, do we want to say it should be under the same license as the specification?&nbsp;&nbsp;I like the idea of a permissive license or possibly even public domain. However, we could allow people to license the file or not license it according to their project or tastes. My only concern with this is the inevitable are these licenses compatible mess if I try to take 10 or 20 of these files and roll them up into (or even take info from them) a nice neat re-distributable document. I would suggest at a minimum, if someone can license this content that we have a block to capture it</em>.)</p>
+
<p>(20100310 JM <em>General – In the final version should have an examples section that shows a completed Package Facts document or maybe examples per section or both? Perhaps we can use some of use cases that we are working on for this. </em>)</p>
+
<p>(20100310 JM <em> General – Do we want a way for people to extend the format of this file and if so in a controlled way? Do we want people to add new fields in any section they wish? What if someone takes a package then modifies it and re-distributes it? Would they add or remove form the package facts? Would it be worthwhile to capture that delta in its own section?  I noticed that we want the document to be signed so maybe we don’t envision it being modified in this way?</em>) (20100407 KS first entry in file is version field for specification itself - 2.2.1 is meant to handle this, &nbsp;is something else needed? )</p>
+
<p>(20100310 JM <em>General – Are all these fields required or are some optional?</em>)</p>
+
<p>(20100310 JM <em>General – How do we represent different Packages in a single distribution of something? I can see where some projects are very singular and would have just an application or a library. What happens, as an example, if that project offers an application, kernel patch, library, etc in one download? Would we use one package facts to cover them all, one per piece, etc?</em>)</p>
+
<p>&nbsp;</p>
+
<p><strong>Signed off:</strong></p>
+
<p>(Approved for use by active participants in this specification effort, as indicated by name and email id)</p>
+
<p>(20100310 JM <em> General – I would like to see the definition of Signed Off mean “approved for release” vs. “approved for use” since I think that’s what we mean and use could possibly be construed to mean something else. )</em></p>
+
<h2>1.  Rationale</h2>
+
<p style="padding-left: 30px;"><strong>1.1.  Charter</strong></p>
+
<p style="padding-left: 30px;">Create a set of data exchange standards to enable companies and organizations to share license and component information (metadata) for software packages and related content with the aim of facilitating license and other policy compliance.</p>
+
<p style="padding-left: 30px;"><strong>1.2.  Why is a common format for data exchange needed?</strong></p>
+
<p style="padding-left: 30px;">Companies and organizations (collectively “Organizations”) are widely using and reusing open source and other software packages.  Compliance with the associated licenses requires a set of due diligence activities that each Organization performs independently:  a manual and/or automated scan of software and identification of associated licenses followed by manual verification.  Software development teams across the globe use the same open source packages, but they have not yet set-up a way to collaborate on license discovery – many groups are performing the same work leading to duplicated effort and redundancy.  This working group seeks to create a data exchange format so that information about software packages and related content, may be collected and shared in a common format with the goal of saving time and improving data accuracy.</p>
+
<p style="padding-left: 30px;"><strong>1.3.  What does this specification cover?</strong></p>
+
<p style="padding-left: 60px;">1.3.1. Identification Information: Meta data to associate analysis results with a specific package.  This includes a unique identifier to permit correlation of a specific instance of this data with a specific package.</p>
+
<p style="padding-left: 60px;">1.3.2. Overview Information: Facts that are common properties for the entire package.</p>
+
<p style="padding-left: 60px;">1.3.3. File Specific Information: Facts that are specific to each file (copyrights, licenses) that are included in the package.</p>
+
<p style="padding-left: 60px;">1.3.4. Common Licenses: standardized way of referring to the common licenses likely to be encountered.</p>
+
<p style="padding-left: 60px;">1.3.5. ?</p>
+
<p style="padding-left: 30px;"><strong>4.  What is not covered?</strong></p>
+
<p style="padding-left: 60px;">1.4.1. Information that cannot be derived from a visual inspection of the package to be analyzed.</p>
+
<p style="padding-left: 60px;">1.4.2. How the data stored in this  file format is used.  After we agree on what should be specified; discussions on how it can be used, who will generate it, how it will be published, audited,  etc., will happen outside the scope of this document.</p>
+
<p style="padding-left: 60px;">1.4.3. ?</p>
+
<p style="padding-left: 30px;"><strong>5.  Format Requirements:</strong></p>
+
<p style="padding-left: 60px;">1.5.1. Needs to be in a syntax that humans can read and write.</p>
+
<p style="padding-left: 60px;">1.5.2. Needs to be a syntax that tools can read and write.</p>
+
<p style="padding-left: 60px;">1.5.3. Needs to be suitable to be checked for syntactic correctness independent of how it was generated (human or tool).</p>
+
<p style="padding-left: 60px;">1.5.4. ? Character set to be used to support international naming. (follow Debian precedent?)</p>
+
<p style="padding-left: 60px;">1.5.5. ? Actual specification of fields – below is illustrative rather than agreed on.</p>
+
<p style="padding-left: 60px;">1.5.6. ? Discussion: XML vs. simple text to represent fields.  Extent human understandable without tool still needs to be discussed.</p>
+
<h2>2.  Identification Information</h2>
+
<p style="padding-left: 30px;">1. One instance per package</p>
+
<p style="padding-left: 30px;">2. Fields:</p>
+
<p style="padding-left: 60px;">2.2.1.  Version Number for the instance of the SPDX specification.</p>
+
<p style="padding-left: 90px;">2.2.1.1. Purpose: version of SPDX specification to use to parse the rest of the file.  This will permit future changes to the specification, and retain backwards compatibility.</p>
+
<p style="padding-left: 90px;">2.2.1.2. Format: Version: N.N</p>
+
<p style="padding-left: 90px;">2.2.1.3. Example: 1.0</p>
+
<p style="padding-left: 60px;">2.2.2. Unique Identifier</p>
+
<p style="padding-left: 90px;">2.2.2.1. Purpose: Need an independently reproducible mechanism that is agreed will permit unique identification of a specific package with this data.  It must be able to determine if any file in the original package has been changed.  Options under consideration: SHA256, ?</p>
+
<p style="padding-left: 90px;">(20100310 JM&nbsp;<em>2.2.2.1 – Should we add MD5? That seems to be very common as a signature as well. If we allow multiple signature types would there be a preferred one? We should also have a URL to where the keys are posted so we can check against them. I would add a field here for that. That said, problems sometimes don’t appear right away and some considerable amount of time may have elapsed. In that case, whoever posted the checksums to validate against may have taken them down for whatever reason (i.e. it’s an older version, project folded, etc).&nbsp;&nbsp;Do we want the keys to still be around in this situation? If so, we need to comprehend that.</em>)</p>
+
<p style="padding-left: 90px;">2.2.2.2. Format: UniqueID: ?</p>
+
<p style="padding-left: 90px;">2.2.2.3. Example: ?</p>
+
<p style="padding-left: 60px;">2.2.3. Generation Method</p>
+
<p style="padding-left: 90px;">2.2.3.1. Purpose: identify how this information was generated.  If manual – who, if tool – identifier and version.</p>
+
<p style="padding-left: 90px;">2.2.3.2. Format: Manual: ”person name” | Tool: ”tool id - version”</p>
+
<p style="padding-left: 90px;">2.2.3.3. Examples: ?</p>
+
<p style="padding-left: 60px;">2.2.4. Creation Time Stamp</p>
+
<p style="padding-left: 90px;">2.2.4.1. Purpose: Identify when the analysis was done.</p>
+
<p style="padding-left: 90px;">2.2.4.2. Format: Created: YYYYMMDD-HH:MM:SS</p>
+
<p style="padding-left: 90px;">(20100310 JM <em>2.2.4 – Should we add a time zone or say it’s based on GMT? Alternatively we could adopt a date/time format from an RFC but I’m okay with this one.</em>)</p>
+
<p style="padding-left: 90px;">2.2.4.3. Example: Created: 20100129-18:30:22</p>
+
<p style="padding-left: 60px;">2.2.5. Independent Review/Audit</p>
+
<p style="padding-left: 90px;">2.2.5.1. Purpose: reviewers of tool result, or other reviewer of original – equivalent to “signed off” or “reviewed by”.</p>
+
<p style="padding-left: 90px;">(20100310 JM&nbsp;<em>2.2.5 – This one makes me a little nervous. If someone puts something there what does it mean? Have they verified all the information is factual? Independent Audit implies to me that someone other than the Package creator or even the project (?) has looked at this and said the information is &lt;?&gt;. )</em></p>
+
<p style="padding-left: 90px;">2.2.5.2. Format: Reviewed by: “person name”</p>
+
<p style="padding-left: 90px;">2.2.5.3. Example: ?</p>
+
<p style="padding-left: 60px;">2.2.6. ??</p>
+
<p style="padding-left: 60px;">(20100310 JM&nbsp;<em>2.0 – Would it be useful to have a marker or token at the top of the facts file that shows it uses the Package Facts format? This may make life easier for tools which are likely going to have to process different file formats. It would be the first thing that must appear in the file.)</em></p>
+
<h2>3.  Common Overview Information</h2>
+
<p style="padding-left: 30px;">1. One instance per package</p>
+
<p style="padding-left: 30px;">2. Fields:</p>
+
<p style="padding-left: 60px;">3.2.1.  Formal Name</p>
+
<p style="padding-left: 90px;">3.2.1.1. Purpose: Full name given by originator with version information.  ? Permit international extended characters in character string or restrict ?</p>
+
<p style="padding-left: 90px;">3.2.1.2. Format: ?</p>
+
<p style="padding-left: 90px;">3.2.1.3. Example: ?</p>
+
<p style="padding-left: 60px;">3.2.2. Specific Package Identifier</p>
+
<p style="padding-left: 90px;">3.2.2.1. Purpose: Machine name of package.</p>
+
<p style="padding-left: 90px;">3.2.2.2. Format: identifier.suffix</p>
+
<p style="padding-left: 90px;">3.2.2.3. Examples: foo.tar,  foo.rpm, ?</p>
+
<p style="padding-left: 60px;">3.2.3. Official Source Location</p>
+
<p style="padding-left: 90px;">3.2.3.1. Purpose: identify where the original version of this package resides (at time of analysis).</p>
+
<p style="padding-left: 90px;">3.2.3.2. Format: download URL</p>
+
<p style="padding-left: 90px;">3.2.3.3. Example: ?</p>
+
<p style="padding-left: 90px;">(20100310 JM <em>3.2.3 – We should allow usage of git, svn, etc values</em>)</p>
+
<p style="padding-left: 60px;">3.2.4. Declared License for Package</p>
+
<p style="padding-left: 90px;">3.2.4.1. Purpose: use a standard way of referring to license and its version.  See Section 5.0 for standardized license short forms.  If more than one in effect, list license package defaults to and indicate alternate license is present.</p>
+
<p style="padding-left: 90px;">3.2.4.2. Format: identifier | other</p>
+
<p style="padding-left: 90px;">3.2.4.3. Example: ? (something like GPL2.0)</p>
+
<p style="padding-left: 60px;">3.2.5. License(s) Present</p>
+
<p style="padding-left: 90px;">3.2.5.1. Purpose: list of all licenses found in files in package by scanning</p>
+
<p style="padding-left: 90px;">3.2.5.2. Format: identifier</p>
+
<p style="padding-left: 90px;">3.2.5.3. Example:  Y</p>
+
<p style="padding-left: 60px;">3.2.6. –removed-</p>
+
<p style="padding-left: 60px;">3.2.7. Formal Copyright Holder of Package</p>
+
<p style="padding-left: 90px;">3.2.7.1. Purpose: identify the author and licensor of package. ? Permit international extended characters in character string or restrict ?</p>
+
<p style="padding-left: 90px;">3.2.7.2. Format: ?</p>
+
<p style="padding-left: 90px;">3.2.7.3. Example: ?</p>
+
<p style="padding-left: 60px;">3.2.8. Formal Copyright Date of Package</p>
+
<p style="padding-left: 90px;">3.2.8.1. Purpose: Identify the date this package was created.  Individual files inside package may have different copyright dates.</p>
+
<p style="padding-left: 90px;">3.2.8.2. Format: YYYY</p>
+
<p style="padding-left: 90px;">3.2.8.3. Example: 2010</p>
+
<p style="padding-left: 60px;">3.2.9. ???</p>
+
<h2>4.  File Specific Information</h2>
+
<p style="padding-left: 30px;">(20100310 JM&nbsp;<em>4.0- Would files that do not have licensing information be present in this block? I would think so and the relevant fields would be blank. We may want to have an explicit statement versus leaving blank.&nbsp;&nbsp; Interested in others thoughts.</em>)</p>
+
<p style="padding-left: 30px;">(20100310 JM&nbsp;<em>4.0 – Do we need an exceptions field to capture exceptions that are written in to a license? Likely difficult to farm from existing code per my comment in 4.2.2 but seems useful. )</em></p>
+
<p style="padding-left: 30px;">4.1. One instance for every file in package</p>
+
<p style="padding-left: 30px;">4.2. Fields:</p>
+
<p style="padding-left: 60px;">4.2.1.  File Name</p>
+
<p style="padding-left: 90px;">4.2.1.1. Purpose: identify path to file that corresponds to this summary information.  version of this standard to use to parse the rest of the file.</p>
+
<p style="padding-left: 90px;">4.2.1.2. Format: [directory/]filename.suffix</p>
+
<p style="padding-left: 90px;">4.2.1.3. Example: bar/foo.c</p>
+
<p style="padding-left: 60px;">4.2.2. File Type</p>
+
<p style="padding-left: 90px;">4.2.2.1. Purpose: Identify common types of files where there may be different treatment of copyright and license information:  source, binary, machine generated, ??</p>
+
<p style="padding-left: 90px;">4.2.2.2. Format: ?</p>
+
<p style="padding-left: 90px;">4.2.2.3. Example: ?</p>
+
<p style="padding-left: 90px;">(20100310 JM&nbsp;<em>4.2.2 – I like the field but I’m struggling with whether it will be difficult to automate the generation of this information if that’s there and whether to be concerned about that. Specifically I am wondering about auto generated files that come from tools. Here is my thought process. I can see where a project could farm everything in 4.0 from existing source except for possibly this field. If so that means they have to either answer this manually for every file (think of the Linux kernel)&nbsp;&nbsp;or try and adopt (as an example) a keyword approach and add it to files</em>.)</p>
+
<p style="padding-left: 60px;">4.2.3. License(s)</p>
+
<p style="padding-left: 90px;">4.2.3.1. Purpose: License governing file if known.  This will either be explicit in file, or be expected to default to package license.  Use a standard way of referring to license and its version.  See Section 5.0 for standardized license references. If more than one in effect, list all licenses.</p>
+
<p style="padding-left: 90px;">4.2.3.2. Format: ? [identier,]* [identifier | “string“]</p>
+
<p style="padding-left: 90px;">4.2.3.3. Example: GPL2.0,BSD,”xyz license type”</p>
+
<p style="padding-left: 60px;">4.2.4. Copyright(s)</p>
+
<p style="padding-left: 90px;">4.2.4.1. Purpose: identify the copyright holders and associated dates of their copyright that are in this specific file if known.  Note: Copyright holder identifier may have developer names, companies, email addresses, so we’ll probably need a generic string mechanism (including international characters).  Since there may be multiple per file, need a way of having separators between them.</p>
+
<p style="padding-left: 90px;">4.2.4.2. Format: [ “copyright holder”:”date(s)”]*</p>
+
<p style="padding-left: 90px;">4.2.4.3. Example: “Linus Torvalds”:”1996-2010”</p>
+
<p style="padding-left: 60px;">4.2.5. ?</p>
+
<h2>5.  Standard License Identifiers</h2>
+
<p style="padding-left: 30px;">5.1. Rationale for licenses to choose to standardize identifiers.  Focus on standardizing the most commonly used rather than all.  Align with any other standardization efforts underway here that will meet the need.</p>
+
<p style="padding-left: 30px;">5.2. Table of standard licenses and their identifiers</p>
+
<table border="1" cellspacing="0" cellpadding="0" width="542">
+
<tbody>
+
<tr>
+
<td width="69" valign="top">
+
<p>Identifier</p>
+
</td>
+
<td width="216" valign="top">
+
<p>Full name</p>
+
</td>
+
<td width="256" valign="top">
+
<p>Official  Source Text</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>GPL2.0</p>
+
</td>
+
<td width="216" valign="top">
+
<p>GNU  General Public License (GPL) Ver. 2, June 1991</p>
+
</td>
+
<td width="256" valign="top">
+
<p>http://www.gnu.org/copyleft/gpl.hmtl</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>GPL3.0</p>
+
</td>
+
<td width="216" valign="top">
+
<p>...</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
<tr>
+
<td width="69" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="216" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
<td width="256" valign="top">
+
<p>&nbsp;</p>
+
</td>
+
</tr>
+
</tbody>
+
</table>
+
<h2>6.  Definitions</h2>
+
<p style="padding-left: 30px;">1. Package: ...</p>
+
<p style="padding-left: 30px;">2. Date range:  [YYYY,]*[YYYY-]YYYY  syntax for multiple ranges needed.</p>
+

Latest revision as of 20:10, 21 October 2013

This is the location of the official version of the SPDX specification. During active development of next version, drafts may be found here as well.

The license list used by SPDX is available too, as are the Version 1.2 RDF references.