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

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

П13. FOSSology как юридический workflow

Зачем эта практика ScanCode и ORT автоматизируют находку, но финальное лицензионное решение — это работа человека с фиксацией ответственности. FOSSology — это сервер для clearing workflow: загрузка артефакта → прогон агентов-сканеров (nomos, monk, ojo, copyright) → ручной review reviewer-ом → утверждённое заключение (concluded license) с автором и историей. Именно здесь «detected» из П11 превращается в «concluded» с подписью и аудиторским следом, а не остаётся машинной строкой.

Цель

Развернуть FOSSology, загрузить артефакт, запустить агенты лицензионного анализа, провести хотя бы один файл через ручной clearing (расхождение detected/concluded) и выгрузить отчёт (SPDX или ReadMe_OSS), в котором зафиксированы concluded-лицензии и кто их утвердил. Проверяемый результат — выгруженный clearing-отчёт с историей решения.

Команда или действие

# Поднять сервер одной командой (web UI на http://localhost:8081/repo)
docker run -d --name fossology -p 8081:80 fossology/fossology
# логин по умолчанию: fossy / fossy

# Дальше через web UI:
#   Upload → From File / From URL  (артефакт: tarball исходников)
#   при загрузке отметить агенты: nomos, monk, ojo, copyright
#   Jobs → дождаться завершения scheduler
#   Browse → пакет → License → ручной review (Bulk/Concluded)
#   Exports → SPDX2 / ReadMe_OSS / DEP5

Если нужна автоматизация через REST API (генерация токена в web UI → Admin → API tokens):

TOKEN="<bearer-token>"
BASE="http://localhost:8081/repo/api/v1"

# загрузить артефакт в папку folderId=1
curl -s -X POST "$BASE/uploads" \
  -H "Authorization: Bearer $TOKEN" \
  -H "folderId: 1" \
  -F "fileInput=@somelib-2.4.1.tar.gz"

# запустить агенты для upload (uploadId из ответа выше)
curl -s -X POST "$BASE/jobs" \
  -H "Authorization: Bearer $TOKEN" \
  -H "folderId: 1" -H "uploadId: 3" -H "Content-Type: application/json" \
  -d '{"analysis":{"nomos":true,"monk":true,"ojo":true,"copyright":true},
       "decider":{"nomos_monk":true}}'

nomos и monk ловят разное — поэтому запускают оба nomos распознаёт лицензии по регулярным сигнатурам (широко, но шумно), monk — по точному совпадению с эталонными текстами из БД (узко, но уверенно), ojo вытягивает SPDX-теги SPDX-License-Identifier. Расхождение их вердиктов на одном файле — это и есть кандидат на ручной review: где агенты согласны, человек тратит время зря; где спорят — там настоящая работа clearing-а.

Что вы должны увидеть

После завершения Jobs в Browse у пакета появляется сводка лицензий с разбивкой по агентам. Концептуально:

File: parser.c
  nomos:      GPL-2.0-only        (signature match)
  monk:       GPL-2.0-only  98%   (reference text)
  concluded:  GPL-2.0-only        ← внесён reviewer-ом вручную, с датой и логином

Фрагмент SPDX-экспорта (виден concluded vs declared):

FileName: ./parser.c
LicenseConcluded: GPL-2.0-only
LicenseInfoInFile: GPL-2.0-only
LicenseComments: Concluded by reviewer 'auditor' on 2026-06-17, clearing OK.

Ориентир: на одном среднем пакете агенты дают десятки file-level находок; для зачёта достаточно довести до concluded хотя бы один файл, где видно различие «что нашла машина» и «что утвердил человек». Главное — в отчёте присутствует поле LicenseConcluded и комментарий о том, кто и когда вынес решение (audit trail), а не только LicenseInfoInFile.

Если не получилось

Типичные ошибки - Контейнер стартовал, но web UI не открывается — FOSSology инициализирует БД при первом запуске, это занимает минуту-две. Смотрите docker logs -f fossology до строки готовности scheduler; не ломитесь в UI сразу. - Jobs висят в Scheduled и не стартуют — не поднялся fo-scheduler внутри контейнера. В all-in-one образе он встроен; при ручной установке проверяйте systemctl status fossology. Перезапуск контейнера обычно лечит. - Все лицензии остались No license found — загрузили бинарники/архив без исходных текстов либо забыли отметить агенты при upload. Перезапустите job с nomos+monk по тому же upload через Jobs → Agents. - REST 401 Unauthorized — токен просрочен или скопирован с лишними пробелами. Токены в FOSSology короткоживущие; сгенерируйте заново в Admin → API tokens и подставьте без переносов строк.

Критерий зачёта

Показать преподавателю: (1) экспорт (SPDX2 / ReadMe_OSS) с заполненным LicenseConcluded; (2) хотя бы один файл, где detected-вердикты агентов разошлись и вы вынесли concluded руками; (3) объяснение, чем clearing-решение в FOSSology отличается от машинной находки ScanCode (наличие автора, даты, истории — audit trail). Просто «загрузил и прогнал агенты» без ручного review не засчитывается: суть практики — юридический workflow с ответственным.

Нормативная связка