05 марта 2026 № 1 (2026)

ROSARIUM

газета советского программиста

Аудит лицензий проекта

Пошаговая проверка лицензий upstream-проекта перед упаковкой.

На этой странице

Перед упаковкой проекта для community нужно убедиться, что его лицензия позволяет распространение и что все компоненты учтены.

Пошаговый аудит

1. Определить основную лицензию

tar xf myproject-1.0.tar.gz
cat myproject-1.0/LICENSE
# или
cat myproject-1.0/COPYING

Сверьте текст с известными лицензиями. Если лицензия кастомная — читайте внимательно.

2. Проверить SPDX-заголовки в исходниках

grep -rn "SPDX-License-Identifier" myproject-1.0/src/ | sort -u

Если в разных файлах разные идентификаторы — все должны быть учтены в License:.

3. Проверить bundled/vendor-зависимости

# Найти все файлы лицензий
find myproject-1.0 -iname 'LICENSE*' -o -iname 'COPYING*' | sort

# Для Rust
ls myproject-1.0/vendor/*/LICENSE* 2>/dev/null | head -20

# Для Go
find myproject-1.0/vendor -name 'LICENSE' | head -20

4. Автоматизированные инструменты

# Для Rust-проектов
cd myproject-1.0
cargo license            # Список лицензий зависимостей
cargo deny check licenses  # Проверка на запрещённые лицензии

# Для Go
go-licenses csv ./...

# Для Python
pip-licenses --from=mixed

5. Проверить совместимость

Если проект под GPL, а bundled-библиотека под несовместимой лицензией (например, SSPL, AGPL-3.0 + GPL-2.0-only) — это проблема.

Что нельзя распространять

КатегорияПримерыДействие
Проприетарные лицензии«All rights reserved», кастомныеТолько в non-free (если разрешено)
Запрет на распространение«For personal use only»Нельзя упаковывать
Нет лицензии вообщеНет файла LICENSE/COPYINGСвязаться с upstream, попросить добавить
«Бомба» в лицензииОграничения на конкретные страны/использованиеЧитать внимательно

Что делать, если лицензия неясна

  1. Прочитайте LICENSE/COPYING полностью
  2. Поищите обсуждения лицензии этого проекта
  3. Спросите upstream — откройте issue с вопросом о лицензировании
  4. Не упаковывайте пока не разберётесь — лучше пропустить, чем нарушить

Пример аудита: проект с несколькими лицензиями

myproject-1.0/
├── LICENSE               → MIT (основной код)
├── src/
│   ├── main.c           → // SPDX-License-Identifier: MIT
│   └── parser.c         → // SPDX-License-Identifier: MIT
├── third_party/
│   ├── cjson/
│   │   ├── LICENSE      → MIT
│   │   └── cJSON.c
│   └── miniz/
│       ├── LICENSE      → MIT
│       └── miniz.c
└── docs/
    └── manual.pdf       → CC-BY-4.0 (в шапке PDF)

Результат:

License:        MIT AND CC-BY-4.0
Provides:       bundled(cjson) = 1.7.15
Provides:       bundled(miniz) = 3.0.2

Чеклист аудита лицензий

  • Основная лицензия определена и записана в SPDX
  • Все файлы с другими лицензиями учтены
  • Bundled-зависимости проверены
  • Лицензии совместимы друг с другом
  • Файлы лицензий указаны через %license
  • Лицензия позволяет распространение в community

Проверьте понимание

  1. Как найти все файлы лицензий в проекте?
  2. Что делать, если у проекта нет файла лицензии?
  3. Как учесть лицензии bundled-зависимостей в SPEC?
  4. Какие лицензии нельзя распространять через community?

Следующий модуль: Работа с upstream