Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Практическая работа: классификация лицензий и реестр с вердиктами
Цель
Провести набор лицензий из реального SBOM через цепочку «evidence → нормализация → вердикт → запись в реестр» и собрать классификатор с таблицей обязательств. Проверяемый результат — заполненный реестр лицензий, где у каждого компонента есть SPDX-выражение, класс и вердикт.
Входные данные
- SBOM в CycloneDX 1.6 (свой проект, согласованный фрагмент или учебный файл) с непустыми полями
licenses. - Публичная SPDX License List (spdx.org/licenses) — словарь для сверки идентификаторов.
- Зафиксируйте: источник SBOM, дату анализа, версию использованного детектора лицензий (если применялся).
Шаги
Шаг 1. Извлечь сырьё (evidence)
Выгрузите из SBOM пары «компонент → исходная строка лицензии». Если строка свободная (BSD-like, Apache 2, пусто, NOASSERTION) — оставьте её как есть, это и есть evidence.
# извлечь компоненты и их лицензии из CycloneDX (jq)
jq -r '.components[] | [.purl, (.licenses // [] | tostring)] | @tsv' sbom.cdx.json
Шаг 2. Нормализовать в SPDX-выражение
Каждую строку приведите к каноничному SPDX-идентификатору или выражению. Учтите:
- GPL-2.0 → GPL-2.0-only или GPL-2.0-or-later (решите, что заявлено, и обоснуйте);
- множественные лицензии → (MIT OR Apache-2.0) (выбор) либо Apache-2.0 AND MIT (оба);
- лицензия с исключением → GPL-2.0-only WITH Classpath-exception-2.0;
- нераспознанное → пометьте как NOASSERTION и в очередь на доразметку (не выдумывайте идентификатор).
Шаг 3. Классифицировать
Каждому выражению присвойте класс и обязательство:
| purl | evidence (raw) | SPDX-выражение | Класс | Триггер copyleft | Обязательство |
|---|---|---|---|---|---|
| pkg:npm/a@1 | MIT |
MIT |
permissive | — | атрибуция |
| pkg:npm/b@2 | LGPL |
LGPL-3.0-only |
weak copyleft | статическая линковка | открыть изменения компонента |
| pkg:pypi/c@3 | GPL3 |
GPL-3.0-only |
strong copyleft | линковка в произведение | открыть производный продукт |
| pkg:npm/d@4 | Affero |
AGPL-3.0-only |
network copyleft | использование по сети | открыть исходники SaaS |
| pkg:npm/e@5 | пусто | NOASSERTION |
unknown | ? | требуется заключение |
Шаг 4. Вынести вердикт с учётом контекста
Для каждого компонента дайте один из вердиктов разрешено / условно (с обязательством) / блокер / требуется заключение, исходя из того, как продукт распространяется (закрытый бинарник, дистрибутив с исходниками, сетевой сервис). Зафиксируйте автора, дату, обоснование. Сценарий «network copyleft в SaaS» и любую проприетарную/LicenseRef-* лицензию ведите как блокер или заключение.
Шаг 5. Записать в реестр
Сведите результат в реестр лицензий: компонент, выражение, класс, вердикт, обоснование, срок пересмотра. Кейсы-исключения (приняли риск осознанно) оформите отдельно.
Ожидаемый результат
- Таблица из шага 3, заполненная по вашему SBOM (минимум 8 компонентов, среди них хотя бы один copyleft и один
NOASSERTION). - По каждому компоненту вынесен вердикт с обоснованием и контекстом распространения.
- Список
unknown-лицензий с назначенным ответственным за доразметку.
Если не получилось
- Все лицензии вышли
permissive— вероятно, читаете только метаданные пакета, а не файлы; настоящий copyleft часто прячется в исходниках (нужен посборочный детектор, П11. ScanCode для лицензий). ORпосчитали как «обе действуют» — это выбор одной; перечитайте шаг 2.- Не отличили
*-onlyот*-or-later— это разные вердикты; если в evidence нет указания, фиксируйте сомнение, а не угадывайте. NOASSERTIONзаписали как «ок» — это блокер готовности до доразметки, не «зелёный».
Критерий зачёта
Показать преподавателю заполненный реестр, где: (1) для каждого компонента есть и evidence, и нормализованное SPDX-выражение; (2) проставлен класс и обязательство; (3) вынесен вердикт с учётом способа распространения; (4) все unknown имеют ответственного. Минимум один copyleft-кейс доведён до условного вердикта с конкретным обязательством.
Нормативная и практическая связка
- Практики: П11. ScanCode для лицензий · П12. ORT и license policy · П26. Лицензионная классификация · П27. Юридическое заключение и реестр лицензий · П30. Исключения и принятие риска.
- Нормативка: SPDX ISO/IEC 5962 · OpenChain ISO/IEC 5230.
- Шаблоны: Политика лицензионной чистоты · Порядок работы с неизвестной лицензией · Шаблон юридического заключения по лицензии · Реестр исключений.