Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
cargo-sbom
Для чего
cargo-sbom — узкоспециализированный генератор SBOM для проектов на Rust. Он читает результат разрешения зависимостей Cargo (метаданные Cargo.lock/cargo metadata) и строит точный SBOM именно для crates: с прямыми и транзитивными зависимостями, версиями и источниками crate. Это тот случай, когда «родной» генератор знает экосистему лучше, чем универсальный.
Как применяют
Запуск в корне Rust-проекта с выбором формата:
cargo sbom --output-format cyclone_dx_json_1_4 > sbom.cdx.json
cargo sbom --output-format spdx_json_2_3 > sbom.spdx.json
Каждый crate получает PURL вида pkg:cargo/serde@1.0.197, а корневой пакет и зависимости связываются по фактическому графу разрешения Cargo, а не по «плоскому» списку из манифеста.
«Родной» генератор точнее универсального cargo-sbom берёт состав из фактического графа разрешения Cargo, а не угадывает по манифесту. Для Rust это даёт корректные
pkg:cargoPURL и честное различение прямых и транзитивных зависимостей.
Сильные стороны
- Точность для Rust: данные берутся из реального графа разрешения Cargo, без эвристик.
- Корректные
pkg:cargoPURL и различение прямых/транзитивных зависимостей. - Экспорт и в CycloneDX, и в SPDX — встраивается в любую трассировку.
- Минимальная настройка: работает «из коробки» в каноничном Rust-проекте.
Ограничения
Слепая зона на границе с C cargo-sbom видит crate, но не нативные C-библиотеки, которые
*-sys-крейты и build-скрипты подтягивают и линкуют. Для таких зависимостей Rust-SBOM нужно дополнять анализом бинаря (blint).
- Только Rust/Cargo; для любых других экосистем бесполезен.
- Видит зависимости уровня crate, но не учитывает нативные C-библиотеки, подтянутые через
*-sys-крейты и сборочные скрипты. - Зависит от наличия валидного
Cargo.lock/разрешённого графа.
Offline / on-premise
Полностью офлайн при наличии локального кеша Cargo (~/.cargo) или внутреннего реестра crate (registry mirror). Генерация идёт по уже разрешённому графу, обращений в сеть не требует — пригодно для закрытого контура с зеркалом crates.
Связанные темы
М05 Инструменты генерации SBOM · М04 Идентификаторы · П07. OSV-Scanner и lockfiles · П24. PURL нормализация и private qualifiers · Package URL · cdxgen · OSV-Scanner