Mangle от Google: язык на базе Datalog для работы с разрозненными данными
Mangle — новый проект с открытым исходным кодом от Google, который расширяет логический язык Datalog для современных задач дедуктивного программирования баз данных. Реализованный как библиотека на Go, Mangle упрощает выполнение запросов и рассуждений по данным, хранящимся в разных местах и форматах.
Борьба с фрагментацией данных
Современные процессы разработки и обеспечения безопасности страдают от фрагментации данных. Сведения о зависимостях, уязвимостях, конфигурациях и инфраструктуре разбросаны по файлам, API, реестрам и другим хранилищам. Mangle позволяет рассматривать эти разрозненные источники как единую логическую базу данных. Вместо ручного объединения данных можно описать факты и правила и выполнить дедуктивный запрос, который учитывает всю картину целиком.
Расширения Datalog для практических задач
Mangle опирается на классический Datalog, добавляя полезные для реальных проектов возможности:
- Рекурсивные правила: поддержка рекурсии позволяет компактно выражать транзитивные отношения, такие как полные деревья зависимостей или иерархии прав доступа.
- Унифицированный доступ к данным: язык может подгружать факты из файлов, API или других хранилищ, что позволяет объединять данные независимо от их физического размещения.
- Агрегации и внешние функции: Mangle поддерживает агрегатные функции, такие как count и sum, а также вызов внешних функций. Это расширяет чистую логику и позволяет выполнять более сложные вычисления и интеграцию с существующим кодом.
Эти дополнения сохраняют декларативную простоту Datalog и делают язык применимым к сложному практическому анализу.
Практические сценарии применения
Mangle особенно подходит для задач в области безопасности, анализа цепочек поставок и построения графов знаний:
- Обнаружение уязвимостей: команды безопасности могут описывать политики и структуру кода в виде фактов и правил. Например, правило может отметить проект как уязвимый, если он зависит от библиотеки с известной CVE; Mangle рекурсивно проверит граф зависимостей и выявит затронутые проекты.
- Анализ зависимостей ПО: Mangle помогает ориентироваться в современных цепочках поставок ПО. Язык можно использовать для анализа SBOM, контроля версий в организации или поиска проектов, затронутых устаревшими библиотеками.
- Моделирование графов знаний: представляя сущности и связи в виде логических фактов, организации могут обнаруживать скрытые связи и выполнять сложные рассуждения над взаимосвязанными наборами данных.
Реализация и удобство для разработчиков
Реализация Mangle как библиотеки на Go позволяет встраивать язык в существующие приложения и инструменты анализа без необходимости разворачивать отдельную систему баз данных. Такой подход предоставляет возможности дедуктивного запроса прямо разработчикам и соответствует распространенным стекам разработки. Документация проекта ориентирована на практику и помогает разработчикам, более знакомым с императивными или объектно-ориентированными подходами, освоить логику на практике.
С чего начать
В репозитории проекта доступны документация, учебные материалы и примеры, которые помогут командам начать работу. Mangle предлагает прагматичный путь к объединению разрозненных данных и выполнению сложных рассуждений для анализа безопасности, управления инфраструктурой и других задач.