# Лицензирование RAGRAF

Документ отвечает на вопросы «что можно», «что нельзя» и «почему так», не
пересказывая текст лицензии. Текст — в [`LICENSE`](https://github.com/paulmann/RAGRAF/blob/main/LICENSE), третьи
стороны — в [`NOTICE`](https://github.com/paulmann/RAGRAF/blob/main/NOTICE), условия вклада — в [`CLA.md`](https://github.com/paulmann/RAGRAF/blob/main/CLA.md).

> Тексты подготовлены инженерно, по фактам и замерам. Перед публикацией
> коммерческого предложения желательна проверка юристом: этот документ
> описывает техническую сторону лицензии, а не заменяет юридическую
> консультацию.

## 1. История лицензий (факт, а не интерпретация)

| Когда | Версия | Лицензия | Чем подтверждается |
|---|---|---|---|
| 12.10.2026 | `v0.1.0` | MIT | коммит `df7c1be`, файл `LICENSE` той ревизии |
| 15–16.10.2026 | публикуемые версии | PolyForm Noncommercial 1.0.0 | `LICENSE` той ревизии |
| с `v0.2.0` | новые выпуски | Business Source License 1.1 (`BUSL-1.1`) | этот выпуск |

**Права, выданные ранее, не отзываются.** Кто получил `v0.1.0` под MIT или
более позднюю версию под PolyForm, сохраняет те права на ту версию: лицензия
выдаётся на версию, а не на проект, и задним числом не меняется. Это осознанное
решение, а не упущение: обратное означало бы, что условия проекта ничего не
значат.

Лицензия применяется к каждой версии отдельно, поэтому дата перехода на
Apache-2.0 у разных версий разная.

## 2. Что можно без покупки

- использовать продукт **для любых целей**, включая коммерческую деятельность;
- использовать в производстве (production) внутри своей организации — это и
  есть смысл параметра `Additional Use Grant`;
- читать, изменять и распространять исходный код;
- встраивать в свои внутренние процессы и инструменты;
- использовать в исследованиях, обучении и личных проектах.

Внутреннее использование одним человеком и внутри организации лицензией
разрешено одинаково: грант не различает размер организации.

## 3. Что нельзя

Одно: **предоставлять продукт или его производные третьим лицам как
размещённую (hosted) или управляемую (managed) службу**, основная ценность
которой — функциональность RAGRAF.

Примеры, помогающие не ошибиться:

| Ситуация | Можно? |
|---|---|
| Внутренний индекс кода компании для своих разработчиков | да |
| Платная консультация, где вы настраиваете RAGRAF у клиента на его машине | да |
| Публичный веб-сервис «поиск по коду» на основе RAGRAF, продаваемый подпиской | **нет** |
| Встроить RAGRAF в свой продукт как незаметную часть инфраструктуры | да, пока это не служба, чья основная ценность — RAGRAF |
| Форк и его самостоятельное развитие внутри организации | да |

Граница проходит по вопросу «что именно продаётся»: если третье лицо платит
за функциональность RAGRAF как службы — нужна коммерческая лицензия.

## 4. Как получить коммерческую лицензию

Написать правообладателю: **mid1977@gmail.com**. В обращении достаточно
описать, что за служба, кто её пользователи и какая часть функциональности
RAGRAF в ней используется. Цена, объём прав и условия определяются договором,
а не этой страницей.

## 5. Почему это не «open source»

Business Source License 1.1 **не является open source** лицензией: она не
одобрена OSI, потому что ограничивает один вид использования. Исходный код при
этом открыт — его можно читать и менять, — но правильные слова здесь
«source-available» и «исходный код открыт», а не «open source».

Что из этого следует на практике:

- в описаниях проекта, статьях и презентациях нельзя называть Community
  «open source» — это неточность, которую легко проверить;
- значок лицензии на GitHub показывает «Other»: BSL нет в каталоге, который он
  распознаёт. Это не дефект файла `LICENSE`;
- через четыре года после выпуска версии она переходит на Apache-2.0, и тогда
  ограничение снимается само — это и есть смысл параметра `Change Date`.

## 6. Техническая сторона метаданных

Проверено вызовом 24.10.2026, а не по памяти:

```
BUSL-1.1                      -> BUSL-1.1   (принимается сборкой)
BSL-1.1                       -> InvalidLicenseExpression: Unknown license
PolyForm-Noncommercial-1.0.0  -> PolyForm-Noncommercial-1.0.0
```

Поэтому в `pyproject.toml` стоит `license = "BUSL-1.1"`, а короткое написание
`BSL-1.1` использовать нельзя: сборка откажет. Классификатор лицензии не
добавляется — по PEP 639 он конфликтует с выражением и ломает сборку целиком.
Нижняя граница `setuptools` — 77: `license-files` и выражение лицензии относятся
к PEP 639, и на более старых версиях метаданные собирались бы иначе.

Согласие метаданных проверяется автоматически: `tools/check_licensing.py`
(23-я проверка чекера конвенций). Она сравнивает выражение из `pyproject.toml`
с лицензией, опознанной по тексту `LICENSE`, ищет строку правообладателя,
проверяет заполненность параметров BSL и нижнюю границу сборщика. Расхождение
источников — красный результат, а не предупреждение.

## 7. Третьи стороны

Перечень с версиями и лицензиями — в [`NOTICE`](https://github.com/paulmann/RAGRAF/blob/main/NOTICE). Коротко: Joern и
JDK (Apache-2.0), модель эмбеддингов и torch в поставку не входят и подчиняются
своим лицензиям. Лицензия RAGRAF не меняет лицензии зависимостей и не даёт прав
на них.
