Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Package URL
Для чего
Package URL (purl) — детерминированная схема координат пакета: по типу экосистемы, имени и версии она указывает на конкретный артефакт в конкретном реестре. В отличие от назначаемых вручную строк CPE, purl вычисляется из метаданных пакета однозначно, поэтому служит первичным ключом компонента в CycloneDX и SPDX и ключом запроса к OSV.dev.
Как применяют
Каноническая форма: pkg:type/namespace/name@version?qualifiers#subpath. Примеры по экосистемам:
pkg:npm/lodash@4.17.21
pkg:npm/%40angular/core@17.0.0 # @scope кодируется как %40
pkg:pypi/requests@2.31.0
pkg:maven/org.apache.commons/commons-lang3@3.14.0
pkg:conan/zlib@1.3.1?channel=stable # C/C++ через Conan
pkg:generic/openssl@3.0.13?download_url=https%3A%2F%2Fdownloads.example.com%2Fopenssl-3.0.13.tar.gz&checksum=sha256:...
Ключевые правила: type и name обязательны; namespace зависит от экосистемы (Maven groupId, npm scope); qualifiers несут уточнения (arch, repository_url, channel); при нормализации регистр и кодирование приводятся к канону, иначе одна зависимость двоится. В SBOM purl кладётся в components[].purl.
Сильные стороны
- Детерминизм: одинаковый артефакт даёт одинаковую строку — корректная дедупликация и стабильное сопоставление с OSV.
- Покрывает десятки экосистем (
npm,pypi,maven,nuget,golang,deb,conan,generic). pkg:genericиqualifiers(download_url,checksum) позволяют идентифицировать вендорённые исходники, у которых нет реестра.
Ограничения
- Не адресует ОС и аппаратные платформы — здесь нужен CPE (
part:o,part:h). - Для C/C++ без пакетного менеджера каноничного purl часто нет;
pkg:genericспасает лишь при наличии устойчивогоdownload_url/checksum. - Расхождения в кодировании (
%40, регистр, лишниеqualifiers) ломают дедупликацию, если не нормализовать.
Offline / on-premise
Схема не требует сети: purl формируется из локальных метаданных пакета (lockfile, манифест) при генерации SBOM в закрытом контуре. Сетевой доступ нужен лишь следующему шагу — запросу к источнику уязвимостей по этому purl, который тоже разворачивается локально (зеркало OSV).
Связанные темы
М04 Идентификаторы компонентов и уязвимостей · М03 Форматы SBOM · М09 C/C++ legacy Практики: П24. PURL нормализация и private qualifiers · П21. Conan graph и package identity Смежные карточки: CPE · CycloneDX · SPDX · OSV.dev · Conan