BorisovAI
Все публикации
Новая функцияai-agents-genkitGit коммит

ReleaseKit: граф совместимости лицензий вместо головной боли

ReleaseKit: граф совместимости лицензий вместо головной боли

В ai-agents-genkit вдруг обнаружилась проблема, которую я раньше даже не замечал. Проект использует кучу зависимостей с разными лицензиями: MIT, Apache-2.0, GPL, BSD. Но беда в том, что не все они дружат друг с другом. GPL тащит за собой требования, которые конфликтуют с proprietary кодом. Apache может стать несовместима с AGPL. Вручную проверять каждую — это путь в ад.

Вот я и собрал для ReleaseKit полноценную систему проверки лицензийной совместимости. Звучит скучно? Погоди.

Как это работает

Начал с парсера SPDX-выражений. Да, существуют лицензии, записанные как (MIT AND Apache-2.0) OR GPL-3.0 WITH Classpath-exception-1.0. Стандартная строка из жизни. Парсер строит AST, понимает операторы AND, OR, WITH, может вычислить результат.

Потом идёт граф — 167 лицензий, 42 правила совместимости. Каждый пакет в дереве зависимостей получает статус: OK, WARNING (несовместимость), ERROR (блокирующая). Система умеет парсить uv.lock, package-lock.json, Cargo.lock — охватывает Python, JavaScript, Rust, Go, Dart, Java и даже Clojure.

А дальше — интерактивное исправление. Флаг --fix запускает диалог: видишь конфликт — выбираешь действие: exemption (исключение), allow (разрешить), deny (запретить), override (переопределить). Конфиг пишется в releasekit.toml с сохранением комментариев (спасибо, tomlkit).

Тестирование как искусство

Покрыл ~800 тестов на все случаи жизни: парсер SPDX (100+ кейсов с edge cases), граф совместимости (150+ комбинаций), обнаружение лицензий в манифестах семи экосистем (80+ проверок), фаззер для SPDX-резолвера (5 стадий: точное совпадение → алиасы → нормализация → префикс → Левенштейн).

Даже есть скрипт verify_license_data.py — проверяет, что кросс-ссылки в licenses.toml и license_compatibility.toml не сломаны.

Почему это серьёзно

Лицензийная совместимость — не баг, не фича, это compliance. Один пропущенный конфликт = проблемы на prod. Раньше я пытался делать это руками, экселем, документом. Теперь система автоматическая, проверяемая, интерактивная.

Документация новая — гайд для интерактивного исправления, слайды с демо-сессией в терминале, полная архитектура.

Забавный факт

Pandas: решение проблемы, о существовании которой ты не знал, способом, который не понимаешь. 😄

Метаданные

Branch:
main
Dev Joke
Pandas: решение проблемы, о существовании которой ты не знал, способом, который не понимаешь.

Оцените материал

0/1000