---
name: license-audit
description: Лицензионная проверка проекта. Использовать, когда просят выяснить лицензии зависимостей, ассетов, моделей или данных, составить список чужих компонентов, оценить, можно ли продавать или публиковать продукт, или выбрать лицензию для репозитория.
---

# Лицензионная проверка проекта

Цель – таблица фактов с доказательствами, по которой человек сам сделает вывод о том, можно
ли распространять и продавать продукт. Юридический вывод не делай: перечисляй условия
и препятствия.

Каждое правило записано по форме: **Когда** (ситуация) – **сделай** (действие) с **мерой**.
**Проверка:** вопрос к результату с ответом «да/нет».

## Опись

- **Когда** начинаешь проверку – **сделай** опись всего чужого по девяти категориям: движок
  и среда выполнения, библиотеки (включая зависимости зависимостей), ассеты, модели и веса,
  наборы данных, внешние сервисы, инструменты разработки, сгенерированное ИИ, заимствованные
  фрагменты кода.
  **Проверка:** в описи есть строки, которых нет в файле зависимостей?
- **Когда** в проекте есть файл зависимостей – **сделай** запуск сканера экосистемы
  (`pip-licenses`, `license-checker`, `cargo deny`, `go-licenses`) и возьми список пакетов из
  его вывода; число строк библиотек в описи равно числу пакетов в выводе.
  **Проверка:** количества совпадают или расхождение объяснено?

## Факты

- **Когда** записываешь лицензию компонента – **сделай** это по первичному источнику: вывод
  сканера, метаданные реестра, файл LICENSE по тегу установленной версии, страница условий
  правообладателя; по памяти не отвечай.
  **Проверка:** у каждой строки есть ссылка на источник?
- **Когда** источник найти не удалось – **сделай** запись «НЕ УСТАНОВЛЕНО» и напиши, чего
  не хватает; ноль предположений.
  **Проверка:** в таблице нет лицензий без источника?
- **Когда** компонент – модель или набор данных – **сделай** отдельные строки для кода, для
  весов и для данных: у них могут быть разные условия.
  **Проверка:** для каждой модели указаны условия весов, а не только репозитория с кодом?
- **Когда** у компонента несколько лицензий или лицензия менялась между версиями – **сделай**
  пометку и укажи, какая действует для версии в проекте.
  **Проверка:** версия в таблице совпадает с версией в файле зависимостей?

## Толкование

- **Когда** относишь лицензию к классу – **сделай** выбор из восьми: отказ от прав,
  разрешительная, слабый копилефт, сильный копилефт, сетевой копилефт, только некоммерческое,
  особые условия, не установлено.
  **Проверка:** у каждой строки ровно один класс?
- **Когда** описываешь обязанности – **сделай** это для способа распространения, названного
  пользователем (передача копий, сервис по сети, внутреннее использование); если способ
  не назван, спроси.
  **Проверка:** обязанности изменятся, если изменить способ распространения?

## Ответ

- **Когда** отдаёшь результат – **сделай** таблицу с девятью столбцами: № | Компонент |
  Версия | Где используется | Лицензия (SPDX) | Источник | Класс | Обязанности | Проверено по
  источнику; после неё три списка: «Мешает продаже», «Можно при условии», «Не установлено».
  **Проверка:** каждый пункт списков ссылается на номер строки?
- **Когда** заканчиваешь – **сделай** перечень того, что не проверял, и ничего не меняй
  в проекте без согласия пользователя.
  **Проверка:** после работы `git status` пуст?
