Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Conan
Контекст Conan — пакетный менеджер для C/C++ (Python‑based). В отличие от голой связки CMake + системный
apt, Conan хранит декларацию зависимостей вconanfile.txt/conanfile.py, фиксирует точные версии и опции сборки вconan.lockи оперирует устойчивой идентичностью пакета видаopenssl/3.2.1#<recipe_revision>:<package_id>. Это редкий для мира C/C++ случай, когда состав ПО объявлен машиночитаемо.
Для чего
Conan управляет внешними C/C++ зависимостями: разрешает граф requires, скачивает или собирает бинарные пакеты под конкретный профиль (компилятор, архитектура, build_type) и отдаёт сборочной системе пути к заголовкам и библиотекам. Для SCA важно, что он даёт то, чего обычно нет в legacy‑C/C++: воспроизводимый список компонентов с версиями и каноническим ключом пакета, пригодным для нормализации в PURL.
Как применяют
Граф зависимостей с точными ревизиями и опциями:
conan graph info . --format=json > graph.json
conan lock create . # фиксирует conan.lock
Идентичность пакета в выводе: openssl/3.2.1@_/_#a1b2... :da39a3ee... (recipe revision + package_id). Это нормализуется в PURL:
pkg:conan/openssl@3.2.1?rrev=a1b2c3&prev=d4e5f6
SBOM в CycloneDX штатно генерируется CycloneDX‑deployer'ом (в составе расширений Conan):
conan install . --deployer-package=* --format=json # + cyclonedx-генерация поверх графа
Сильные стороны
- Устойчивый ключ компонента (recipe/package revision) — снимает половину боли C/C++: версия и опции сборки зафиксированы, PURL восстанавливается без догадок.
conan.lockделает состав воспроизводимым между машинами и CI — это «lockfile», которого в чистом CMake‑проекте нет.- Различает варианты одного пакета по
package_id(например,shared=Truevs статическая сборка) — видно, что именно слинковано.
Ограничения
- Покрывает только то, что объявлено через
requires. Зависимости, добавленные мимо Conan (ручнойthird_party/, системныйapt,FetchContentв CMake), в граф не попадают. - Транзитивные системные библиотеки, подтянутые через
system_requirements()/apt, видны как факт установки, но не всегда с точной версией дистрибутива. - Статическая линковка стирает границу компонента в итоговом бинаре — Conan знает, что
.aбыл использован, но в готовом артефакте без build‑evidence это не проверить.
Offline / on-premise
Да. Conan работает с приватным remote (conan remote add <name> <url>), пакеты и рецепты кешируются локально (~/.conan2); возможен полностью закрытый контур с зеркалом ConanCenter во внутреннем репозитории артефактов. Сам Conan ставится из колеса Python и не требует обращения наружу при наличии заполненного локального кеша.
Связанные темы
М09 C/C++ legacy · М05 Генерация SBOM · П21. Conan graph и package identity · П24. PURL нормализация и private qualifiers · П31. Пилот CodeScoring make CMake qmake · CMake · vcpkg · Package URL