Аудит лицензий проекта
Пошаговая проверка лицензий 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, попросить добавить |
| «Бомба» в лицензии | Ограничения на конкретные страны/использование | Читать внимательно |
Что делать, если лицензия неясна
- Прочитайте LICENSE/COPYING полностью
- Поищите обсуждения лицензии этого проекта
- Спросите upstream — откройте issue с вопросом о лицензировании
- Не упаковывайте пока не разберётесь — лучше пропустить, чем нарушить
Пример аудита: проект с несколькими лицензиями
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
Проверьте понимание
- Как найти все файлы лицензий в проекте?
- Что делать, если у проекта нет файла лицензии?
- Как учесть лицензии bundled-зависимостей в SPEC?
- Какие лицензии нельзя распространять через community?
Следующий модуль: Работа с upstream