|
|
(75 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
− | <p>Version: DRAFT 20100308</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><strong>Signed off:</strong></p>
| + | |
− | <p>(Approved for use by active participants in this specification effort, as indicated by name and email id)</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]]. |
− | <h2>1. Rationale</h2>
| + | |
− | <p style="padding-left: 30px;"><strong>1.1. Charter</strong></p>
| + | [[Category:Technical]] |
− | <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 specification.</p>
| + | |
− | <p style="padding-left: 90px;">2.2.1.1. Purpose: version of this 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;">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;">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;">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>
| + | |
− | <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: 60px;">3.2.4. Formal 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. Alternate License Present</p>
| + | |
− | <p style="padding-left: 90px;">3.2.5.1. Purpose: signal that not all files in package are governed by formal license</p>
| + | |
− | <p style="padding-left: 90px;">3.2.5.2. Format: Y | N</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;">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: 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> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | </tr>
| + | |
− | <tr>
| + | |
− | <td width="69" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="216" valign="top">
| + | |
− | <p> </p>
| + | |
− | </td>
| + | |
− | <td width="256" valign="top">
| + | |
− | <p> </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>
| + | |
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.