Пиков / КАПО
Как читать авторский курс и нормативные материалы

Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.

OSS Review Toolkit

Роль в линейке лицензионных инструментов ORT (OSS Review Toolkit) — это оркестратор и исполняемая политика. Там, где ScanCode отвечает «какая лицензия найдена», ORT отвечает «можно ли с этим набором лицензий выпускаться» — и превращает ответ в падающий или зелёный CI-gate. ScanCode он использует как один из встроенных сканеров.

Для чего

Сквозной конвейер лицензионного и зависимостного анализа: строит дерево зависимостей из реальных lock-файлов, досканирует исходники детектором лицензий, прогоняет результат через политику на Kotlin DSL и генерирует отчёты. Главная ценность — этап evaluate: правила вычисляют из набора лицензий нарушения (violations) с уровнем ERROR/WARNING/HINT, на которых строится воспроизводимый CI-gate.

Как применяют

Конвейер из четырёх стадий analyze → scan → evaluate → report:

ort analyze  -i . -o out/                       # дерево зависимостей + заявленные лицензии
ort scan     -i out/analyzer-result.yml -o out/ # детектор лицензий по исходникам
ort evaluate -i out/scan-result.yml -o out/ \
  --rules-file curations/rules.kts \
  --license-classifications-file curations/license-classifications.yml
ort report   -i out/evaluation-result.yml -o out/ -f WebApp,CycloneDX,SpdxDocument

Правило политики (rules.kts) — блокировать strong copyleft в проприетарной поставке:

fun RuleSet.copyleftRule() = packageRule("STRONG_COPYLEFT_IN_DISTRIBUTION") {
    licenseRule("STRONG_COPYLEFT", LicenseView.CONCLUDED_OR_DECLARED_AND_DETECTED) {
        require { isStrongCopyleft() }   // класс из license-classifications.yml
        error("Лицензия ${license} класса strong copyleft в ${pkg.id.toCoordinates()}.",
              "Получить юридическое заключение либо заменить компонент.")
    }
}

ort evaluate завершается ненулевым кодом при наличии violations (например, echo $? → 2 для severity ERROR) — именно этот код останавливает pipeline.

Сильные стороны

Ограничения

Offline / on-premise

Частично. Стадии scan и evaluate локальны, но analyze по умолчанию обращается к реестрам пакетов для разрешения зависимостей, а advisor подтягивает данные об уязвимостях из внешних фидов. В закрытом контуре ORT работает только при наличии зеркал пакетных менеджеров и локальных кэшей; без них стадия analyze неполна. Запускается официальным контейнером ghcr.io/oss-review-toolkit/ort:latest или собирается под JDK 17+.

Связанные темы