Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
П27. Юридическое заключение и реестр лицензий
Зачем эта практика Машинная находка живёт в JSON и ни за что не отвечает. Юридическое решение должно быть привязано к компоненту, обосновано уликой, подписано человеком и записано в реестр, который переживёт смену сотрудников. Эта практика — финал цепочки модуля: вы берёте разобранный copyleft- или unknown-кейс и оформляете его как карточку заключения (evidence → обязательства → вердикт) и запись в реестре лицензий, пригодную для аудита. Без инструментов: работа идёт в сервисе аудита/вердиктов либо в табличном реестре по шаблону.
Цель
Оформить карточку юридического заключения по одному компоненту: исходное evidence, нормализованное SPDX-выражение, перечень обязательств, контекст распространения (линковка/сеть), итоговый вердикт и ответственный с датой и сроком пересмотра. Завершить — внести компонент в реестр лицензий со статусом. Проверяемый результат — заполненная карточка + строка в реестре, привязанные к purl компонента.
Команда или действие
Аналитическая практика, артефакт — карточка заключения. Структура (заполняется по шаблону или в сервисе аудита/вердиктов):
# Карточка юридического заключения по компоненту
component:
purl: "pkg:npm/somelib@2.4.1" # привязка к опознанному компоненту (М04)
name: "somelib"
version: "2.4.1"
evidence:
declared: "MIT" # из метаданных пакета
detected: "GPL-2.0-only" # находка ScanCode/FOSSology (П11/П13)
source_file: "vendor/somelib/parser.c:3-18"
raw_text: "This program is free software; you can redistribute..."
license:
spdx_expression: "GPL-2.0-only" # нормализованное выражение
class: "strong copyleft"
distribution_context:
linking: "static" # static | dynamic | none
network_use: false # релевантно для AGPL
obligations:
- "Открыть исходный код производного произведения при распространении бинарника"
- "Сохранить уведомления об авторских правах и текст лицензии"
verdict:
decision: "blocker" # allowed | conditional | blocker | needs-opinion
rationale: "strong copyleft в проприетарной поставке при статической линковке"
decided_by: "роль: юрист (не ФИО)"
decided_at: "2026-06-17"
review_by: "2026-12-17"
Строка в реестре лицензий (CSV/таблица), привязанная к компоненту:
purl,license,class,verdict,decided_at,review_by,opinion_ref
pkg:npm/somelib@2.4.1,GPL-2.0-only,strong-copyleft,blocker,2026-06-17,2026-12-17,OP-2026-014
Вердикт без контекста распространения неполон Один и тот же
purlдаёт разный вердикт: LGPL при динамической линковке —conditional, при статической — ближе кblocker; AGPL в закрытом контуре безвреден, но «выстреливает» при превращении продукта в сетевой сервис. Поэтому поляlinkingиnetwork_useв карточке обязательны — без них заключение нельзя ни проверить, ни переиспользовать при смене архитектуры.
Что вы должны увидеть
В сервисе аудита/вердиктов компонент после внесения заключения переходит из статуса «нет вердикта» в конкретный статус, и у него появляется история: кто, когда, на каком основании. Проверяемый минимум:
- карточка содержит обе стороны —
evidence(откуда взялось) иverdict(что решили); решение без улики или улика без решения не засчитываются; verdict.decision— одно из четырёх значений, а не свободный текст;- есть
decided_by(роль),decided_atиreview_by— заключение не бессрочно; - в реестре строка привязана к
purl, а не к имени без версии (иначе вердикт «уплывёт» на другую версию).
Минимальный набор «было/стало» Было (П11/П26):
pkg:npm/somelib@2.4.1— detectedGPL-2.0-only, статус «нет вердикта». Стало (П27): тот жеpurl— вердиктblocker, обоснование «strong copyleft при статической линковке в проприетарной поставке», ответственный — роль «юрист», пересмотр через 6 месяцев, ссылка на заключениеOP-2026-014. Аудитор по строке реестра восстанавливает всю цепочку решения.
Если не получилось
Типичные ошибки - Вердикт без evidence — записано «GPL, блокер», но не указано, в каком файле и какой текст это породил. При споре нечем доказать; заключение нефальсифицируемо. - Привязка к имени без версии —
somelibвместоpkg:npm/somelib@2.4.1. Лицензия и обязательства могут отличаться между версиями; вердикт должен висеть на конкретномpurl. - Нет срока пересмотра —review_byпуст. Лицензия компонента может смениться при обновлении; бессрочный «allowed» превращается в дыру. -needs-opinionоставлен как финальный статус — это промежуточное состояние, а не вердикт. Компонент с ним не готов к выпуску; его нужно довести доallowed/conditional/blocker.
Критерий зачёта
Показать преподавателю: (1) карточку заключения с обеими частями (evidence + verdict), заполненными полями class, distribution_context, obligations; (2) строку в реестре лицензий, привязанную к purl с ответственным, датой и сроком пересмотра; (3) объяснение, как этот же purl получил бы другой вердикт при изменении линковки или при сетевом использовании. Карточка-«заглушка» без улики или без ответственного не засчитывается — практика проверяет именно доказуемость и подотчётность решения.
Нормативная связка
- Модуль: М07 Лицензионная чистота и юридический workflow
- Смежные практики: П11. ScanCode для лицензий · П13. FOSSology как юридический workflow · П26. Лицензионная классификация · П30. Исключения и принятие риска
- Нормативка: SPDX ISO/IEC 5962 · OpenChain ISO/IEC 5230 · ISO/IEC 27001 A.5/A.8
- Шаблоны: Шаблон юридического заключения по лицензии · Реестр исключений · Матрица evidence для аудита · Журналирование и audit trail