Руководства · 05

Идентификаторы SPDX и заголовки файлов

Как писать заголовки SPDX-License-Identifier и SPDX-FileCopyrightText, устаревшие идентификаторы (GPL-2.0 → GPL-2.0-only), поле license в метаданных пакетов и спецификация REUSE.

Последняя проверка: 2026-09-23

Что такое SPDX

SPDX (Software Package Data Exchange) — проект под эгидой Linux Foundation и стандарт машиночитаемого описания компонентов ПО и сведений о лицензиях. В 2021 году он стал международным стандартом ISO/IEC 5962:2021. Шире всего используются короткие идентификаторы из списка лицензий SPDX: договорённость писать просто MIT вместо разнобоя вроде «MIT License», «The MIT license», «лицензия MIT».

Две строки в заголовке файла

Если поместить в начало исходного файла следующие две строки в виде комментария, и люди, и инструменты сразу увидят правообладателя и лицензию файла.

// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT

Вкладка генератора «Заголовок файла» создаёт эти две строки в семи стилях комментариев.

Осторожно с устаревшими идентификаторами

Начиная с версии 3.0 списка лицензий SPDX (декабрь 2017 года) условие о версии лицензий GNU должно быть видно в идентификаторе.

Устаревший идентификаторАктуальный идентификатор
GPL-2.0GPL-2.0-only
GPL-2.0+GPL-2.0-or-later
GPL-3.0GPL-3.0-only
LGPL-2.1LGPL-2.1-only
AGPL-3.0AGPL-3.0-only

Если написать просто GPL-3.0, непонятно, имеется в виду «only» или «or later». Разница между ними объяснена в статье only и or-later.

Метаданные пакетов

Большинство менеджеров пакетов принимают идентификаторы или выражения SPDX.

ЭкосистемаФайлПример
npmpackage.json"license": "MIT" · закрытый пакет: "UNLICENSED"
RustCargo.tomllicense = "MIT OR Apache-2.0"
Pythonpyproject.tomllicense = "Apache-2.0" (PEP 639)
Mavenpom.xmlНазвание и URL внутри <licenses>

UNLICENSED в npm означает совсем не то, что «Unlicense»: это пометка закрытого пакета, использование которого не разрешено. Из-за похожего написания ошибки случаются часто.

REUSE: весь репозиторий — машиночитаемым

Спецификация REUSE от Европейского фонда свободного ПО (FSFE) определяет, как единообразно применять заголовки SPDX во всём репозитории.

  1. Все тексты лицензий кладут в папку LICENSES/ с именами идентификатор_SPDX.txt (например, LICENSES/MIT.txt).
  2. В каждый файл добавляют SPDX-FileCopyrightText и SPDX-License-Identifier.
  3. Для файлов, куда нельзя вставить комментарий (изображения, JSON и т. п.), сведения указывают в соседнем файле имя_файла.license или в REUSE.toml в корне репозитория.
  4. Инструментом reuse lint проверяют, не пропущены ли файлы.

Практические советы

Эта статья содержит общую информацию и не является юридической консультацией. Важные решения обсуждайте со специалистами.

Источники