Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
vcpkg
Контекст vcpkg — пакетный менеджер для C/C++ от Microsoft. В manifest‑режиме состав зависимостей объявлен в
vcpkg.json, а версии пинуются через baseline и overrides вvcpkg-configuration.json. Ключевая для SCA особенность: vcpkg сам генерирует SPDX‑SBOM на каждый установленный порт — редкая ситуация, когда C/C++ зависимость приходит вместе с готовым машиночитаемым описанием.
Для чего
vcpkg собирает и устанавливает C/C++ библиотеки из «портов», интегрируется с CMake через toolchain‑файл и выдаёт цели для линковки. Для инвентаризации он ценен тем, что фиксирует версии (baseline) и кладёт рядом с каждым пакетом SPDX‑документ, описывающий компонент и его происхождение.
Как применяют
Manifest‑режим с воспроизводимыми версиями:
// vcpkg.json
{
"dependencies": ["openssl", "zlib", { "name": "boost-asio", "version>=": "1.84.0" }],
"builtin-baseline": "a1b2c3d4e5f6..."
}
Установка и интеграция со сборкой:
vcpkg install --triplet x64-linux
cmake -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
После установки SBOM каждого порта лежит здесь:
vcpkg_installed/<triplet>/share/openssl/vcpkg.spdx.json
Эти per‑package SPDX‑документы агрегируются в общий SBOM проекта.
Сильные стороны
- Per‑package SPDX «из коробки»: для каждого порта есть
vcpkg.spdx.jsonс версией, лицензией и хешами — готовый машинный факт без отдельного генератора. builtin-baseline+version>=/overridesдают воспроизводимый и пинуемый состав, эквивалент lockfile.- Триплет (
x64-linux,x64-windows-static) явно фиксирует платформу и модель линковки — видно, статическая сборка или динамическая.
Ограничения
- Покрывает только то, что объявлено в
vcpkg.json. Системныеapt‑библиотеки, ручнойthird_party/иFetchContentвне vcpkg не учитываются. - SPDX порта описывает сам компонент, но факт его линковки в итоговый бинарь подтверждается только анализом артефакта (
ldd/readelf) или build‑scan. - Привязка к реестру портов: нестандартная или внутренняя библиотека требует своего overlay‑порта, иначе её в манифесте не будет.
Offline / on-premise
Да. vcpkg поддерживает asset caching (X_VCPKG_ASSET_SOURCES) и binary caching (VCPKG_BINARY_SOURCES) — исходники и собранные бинарные пакеты кладутся во внутреннее хранилище/прокси, после чего установка идёт без выхода в интернет. Реестр портов хранится как git‑репозиторий и зеркалируется во внутренний контур.
Связанные темы
М09 C/C++ legacy · М05 Генерация SBOM · М03 Форматы SBOM · П21. Conan graph и package identity · П31. Пилот CodeScoring make CMake qmake · Conan · CMake · SPDX