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: решение проблемы, о существовании которой ты не знал, способом, который не понимаешь.