System Package Data Exchange ( SPDX ) es un estándar abierto capaz de representar sistemas con componentes de software como listas de materiales de software (SBOM) [1] y otras referencias de seguridad, datos e inteligencia artificial que respaldan una variedad de casos de uso de gestión de riesgos. SPDX permite la expresión de componentes, licencias , derechos de autor, referencias de seguridad y otros metadatos relacionados con el software. [2] Su propósito original era mejorar el cumplimiento de las licencias, [3] y desde entonces se ha ampliado para facilitar casos de uso adicionales, como la transparencia y la seguridad de la cadena de suministro. [4] SPDX es escrito por el Proyecto SPDX impulsado por la comunidad que involucra a expertos clave de la industria, organizaciones y entusiastas del código abierto bajo los auspicios de la Fundación Linux .
La especificación SPDX está reconocida como el estándar abierto internacional para seguridad, cumplimiento de licencias y otros artefactos de la cadena de suministro de software como ISO/IEC 5962:2021. La versión actual del estándar es 3.0. [5]
El estándar SPDX 2.x define un documento SBOM, que contiene metadatos SPDX sobre el software. El documento en sí se puede expresar en varios formatos, incluidos JSON, YAML, RDF/XML, valor de etiqueta y hoja de cálculo. Cada documento SPDX describe uno o más elementos, que pueden ser un paquete de software, un archivo específico o un fragmento de un archivo. A cada elemento se le asigna un identificador único y los metadatos de un elemento pueden hacer referencia a otros elementos. [6]
SPDX 3.0 permite a los usuarios comunicar información a un nivel mucho más granular sin tener que empaquetarla como datos "sobre". Un principio de diseño clave en SPDX 3.0 es que todos los elementos pueden expresarse y referenciarse independientemente de cualquier otro elemento. Esta independencia es necesaria para admitir una variedad de casos de uso de análisis e intercambio de contenido y facilita la comunicación de elementos individuales de interés. La estructura de relaciones también se ha actualizado para que sea más expresiva y más fácil de entender en comparación con versiones anteriores de la especificación.
El modelo de datos SPDX 3.0 se basa en el modelo de datos de representación de conocimiento extensible del Marco de descripción de recursos (RDF), que proporciona una forma flexible y extensible de representar e intercambiar información. Los datos pueden serializarse en una variedad de formatos para almacenamiento y transmisión, incluidos, entre otros: - formato JSON-LD según se define en JSON-LD 1.1; - Formato Turtle (Terse RDF Triple Language) tal como se define en RDF 1.1 Turtle; - Formato N-Triples tal como se define en RDF 1.1 N-Triples; y - formato RDF/XML tal como se define en la sintaxis XML de RDF 1.1.
La especificación 3.0 introdujo el concepto de perfiles, diseñados para admitir varias áreas nuevas de casos de uso (por ejemplo, compilación, seguridad, inteligencia artificial, datos) sin aumentar la complejidad general. Los perfiles permiten a los usuarios llevar solo los casos de uso que les interesan sin la sobrecarga de los casos de uso que no les interesan y, al mismo tiempo, aumentan la cantidad de información que se puede recopilar directamente de los datos SPDX. Actualmente hay ocho perfiles disponibles para implementar en SPDX 3.0:
La primera versión de la especificación SPDX tenía como objetivo facilitar el cumplimiento de las licencias de software , [3] pero las versiones posteriores de la especificación agregaron capacidades destinadas a otros casos de uso, como la capacidad de contener referencias a vulnerabilidades de software conocidas . [13] Las versiones recientes de SPDX cumplen con los 'Elementos mínimos para una lista de materiales de software' de la NTIA . [17]
SPDX 2.2.1 se presentó a la Organización Internacional de Normalización (ISO) en octubre de 2020 y se publicó como ISO/IEC 5962:2021 Tecnología de la información — Especificación SPDX® V2.2.1 en agosto de 2021. [10] [18]
Cada licencia se identifica con un nombre completo, como "Mozilla Public License 2.0" y un identificador corto, aquí "MPL-2.0". Las licencias se pueden combinar por operadores AND
y OR
, y agrupando (
,.)
Por ejemplo, (Apache-2.0 OR MIT)
significa que se puede elegir entre Apache-2.0
( licencia Apache ) o MIT
( licencia MIT ). Por otro lado, (Apache-2.0 AND MIT)
significa que se aplican ambas licencias.
También hay un operador "+" que, cuando se aplica a una licencia, significa que también se aplican las versiones futuras de la licencia. Por ejemplo, Apache-1.1+
significa que Apache-1.1
puede Apache-2.0
aplicarse (y versiones futuras, si las hubiera).
SPDX describe los términos exactos bajo los cuales se licencia un software. No intenta categorizar las licencias por tipo, por ejemplo describiendo licencias con términos similares a la Licencia BSD como "similares a BSD". [19]
En 2020, la Comisión Europea publicó su Joinup Licensing Assistant, [20] que permite seleccionar y comparar más de 50 licencias, con acceso a su identificador SPDX y al texto completo.
La familia de licencias GNU (por ejemplo, la Licencia Pública General GNU versión 2 ) tiene la opción de elegir una versión posterior de la licencia incorporada. A veces, no estaba claro si la expresión SPDX GPL-2.0
significaba "exactamente GPL versión 2.0" o "versión GPL". 2.0 o cualquier versión posterior". [21] Así, desde la versión 3.0 de la Lista de licencias SPDX, la familia de licencias GNU recibió nuevos nombres. [22] GPL-2.0-only
significa "exactamente versión 2.0" y GPL-2.0-or-later
significa "versión 2.0 o cualquier versión posterior".
El identificador de licencia SPDX se puede agregar en la parte superior de los archivos de código fuente como una cadena corta que declara inequívocamente la licencia utilizada. La SPDX-License-Identifier
sintaxis, iniciada por Das U-Boot en 2013, pasó a formar parte de SPDX en la versión 2.1. En 2017, la FSFE lanzó REUSE, que proporciona herramientas para validar el comentario y extraer de manera eficiente información de derechos de autor. [23]
El identificador de licencia SPDX también se utiliza en varios administradores de paquetes como npm , [24] Python, [25] y Rust cargo. [26] Las expresiones de licencia SPDX se utilizan en los metadatos del paquete RPM en Fedora Linux , reemplazando el uso anterior del sistema Callaway. [27] Debian utiliza una especificación de licencia ligeramente diferente. [28]