Files
ue-toolchain/docs/licensing-options.md
MagentaDolphin ecd87ac96d feat(skills): ship ue-design-skills bundle, licensing and delivery gate
Phase 0 of the handoff plan, as a marketplace rather than a flat skills/
directory. Content moved out of the LyraResearch archive and depersonalised:
addresses stay in the archive, recipes ship.

- plugins/ue-design-skills: 17 skills, 232 failure-mode entries, each with the
  six required fields; catalog.json as the harness-neutral source of truth and
  .claude-plugin/ as one adapter over it.
- _gate: 16 rules, one poisoned fixture per rule, plus surface coverage so a
  declared file cannot silently miss the line rules.
- ADR-0002 (harness-neutral bundle behind a marketplace) and ADR-0003 (split
  licensing: CC BY-ND 4.0 prose, Apache-2.0 code and metadata).
- LICENSE files at both levels, CONTRIBUTING.md, docs/licensing-options.md as
  the material the licence decision grew from.

Verified: gate.py 0 violations; test_gate.py 16/16 rules redden on their
fixtures with a clean baseline and 2 root files reaching the line rules.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 23:48:55 +07:00

237 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Выбор лицензии: варианты и что они означают
**Статус:** ~~решение не принято~~ — **решено 2026-09-03**,
[ADR-0003](architecture/decisions/0003-split-licensing-prose-and-code.md): проза
бандла CC BY-ND 4.0, код и метаданные Apache-2.0, правообладатель — MagentaDolphin.
Документ сохраняется как материал, из которого решение выросло: §§1–6 ниже описывают
состояние **до** выбора, включая отсутствовавший тогда `LICENSE`. Читать как разбор
вариантов, не как состояние репозитория.
**Открытый вопрос:** №2 из `handoff.md` — закрыт.
**Это не юридическое заключение.** Автор документа не имеет квалификации его дать.
---
## 0. Состояние на сейчас
| Что | Значение |
|---|---|
| Файл `LICENSE` в репозитории | отсутствует **[изм]** |
| `README.md:25` | «TBD (планируется MIT)» **[изм]** |
| `plugin.json` → `author.name` | `"ue-design-skills"` — заглушка, автором значится сам бандл **[изм]** |
| Поле `license` в манифестах | отсутствует; удалено намеренно (ADR-0002) **[изм]** |
| Правообладатель | **не определён** |
Лицензируемый объект сегодня — бандл `plugins/ue-design-skills`: ~19 000 строк
авторской прозы, 232 записи с рецептами обнаружения, 335 блоков кода (в
подавляющем большинстве — команды поиска и публичный API движка), плюс скрипт
гейта `_gate/` на Python.
Через фазу 1 к этому добавится **C++-модуль UE и MCP-сервер**. Это меняет расчёт
и разобрано в §6.
---
## 1. Требования владельца, переведённые в лицензионные термины
Сформулировано владельцем:
> Свободное использование студиями · упоминание имени, в том числе в титрах ·
> никакого форка в чужие продукты без разрешения, тем более коммерческие ·
> никаких претензий на игры и код, созданные с помощью инструмента.
В терминах, которыми оперируют лицензии:
| № | Требование | Лицензионный термин |
|---|---|---|
| **R1** | студии, включая коммерческие, пользуются свободно | грант на **use**, без ограничения по коммерческому характеру |
| **R2** | имя указано, в том числе в титрах игры | **attribution**, причём с триггером на *использование*, а не на распространение |
| **R3** | нельзя форкать в свой продукт без разрешения | запрет на **Share Adapted Material** / **redistribution** |
| **R4** | претензий на созданное с помощью инструмента нет | явная **output clause** |
---
## 2. Главное различие, вокруг которого всё вращается
**Использование — не распространение.** Почти все лицензионные обязанности
привязаны ко второму.
- Студия читает скилы, проектирует по ним систему, выпускает игру. **Ничего
вашего наружу не ушло.** Ни одна лицензия здесь ничего не требует.
- Студия берёт бандл, переписывает под себя и публикует как свой продукт. **Вот
здесь** лицензия работает, и здесь живёт R3.
Отсюда следствие, которое важно принять до выбора строки в таблице:
> **R1 и R3 совместимы** — они про разные действия. Свободно пользоваться и не
> иметь права перевыпускать — нормальная, часто встречающаяся конструкция.
>
> **R2 в лицензионной форме недостижим.** Ни одна из существующих лицензий не
> обязывает упоминать автора в титрах игры, при создании которой инструмент
> просто использовали. Обязанность атрибуции срабатывает при распространении
> копии, а копия здесь не распространяется. **[выв]**
Это не придирка к формулировке. Это разница между «в лицензии написано» и «есть
механизм, который заставит».
---
## 3. Требование R2: чем его закрывают на практике
Раз лицензия не даёт, перечислю то, что даёт — по убыванию силы.
| Механизм | Как работает | Чего стоит |
|---|---|---|
| **Договор** | студия подписывает условия использования, где атрибуция в титрах — обязательство | требует переговоров с каждой студией; убивает «скачал и работай» |
| **Двойное лицензирование** | бесплатная лицензия с ограничением + платная/свободная по запросу, в обмен на атрибуцию | рабочая схема, но это уже бизнес-процесс, а не файл в репозитории |
| **Пункт-рекомендация в README** | «если это помогло — упомяните в титрах» | ноль принуждения, ненулевой эффект; студии этим пользуются добровольно чаще, чем кажется |
| **Историческая advertising clause** (BSD-4-Clause) | требовала упоминания «во всех рекламных материалах» | пункт признан вредным и отозван Беркли; вызывает несовместимость и отказ юротделов |
| **Атрибуция при распространении** (CC BY / Apache NOTICE) | обязательна, но только когда копию передают дальше | закрывает форки и маркетплейсы, **не** закрывает титры игры |
Практический вывод: атрибуция в титрах достижима как **норма сообщества плюс
условие для тех, кто просит расширенных прав**, а не как строка лицензии. **[выв]**
---
## 4. Кандидаты против четырёх требований
Легенда: ✅ даёт · ⚠️ даёт частично · ❌ не даёт или противоречит.
| Лицензия | R1 свободное использование | R2 титры | R3 запрет форка | R4 выход свободен | Что это на самом деле означает |
|---|---|---|---|---|---|
| **MIT** | ✅ | ❌ | ❌ | ✅ | Форк в коммерческий продукт разрешён явно. Прямо противоречит R3 |
| **Apache-2.0** | ✅ | ⚠️ `NOTICE` при распространении | ❌ | ✅ | То же, что MIT, плюс патентный грант и пометки об изменениях. R3 не закрывает |
| **CC BY 4.0** | ✅ | ⚠️ при распространении | ❌ | ✅ | Сделана для текста, атрибуция реальна — но производные разрешены, включая коммерческие |
| **CC BY-SA 4.0** | ✅ | ⚠️ | ⚠️ форк разрешён, но обязан остаться открытым под SA | ✅ | Не запрещает форк, а заражает его. Для внутренних вики студий — стоп-сигнал юротдела |
| **CC BY-ND 4.0** | ✅ | ⚠️ при распространении | ✅ | ✅ | **Ближайшее совпадение по смыслу.** В версии 4.0 адаптации создавать *можно*, нельзя **Share** их. Студия правит под себя внутри — законно; публикует свою версию — нет |
| **CC BY-NC 4.0** | ❌ | ⚠️ | ⚠️ | ✅ | Запрещает коммерческое использование — отсекает ровно ту аудиторию, которая нужна по R1 |
| **PolyForm Noncommercial** | ❌ | ❌ | ✅ | ✅ | Та же ошибка, что у NC: блокирует коммерческие студии |
| **PolyForm Internal Use** | ✅ | ❌ | ✅ | ✅ | «Пользуйтесь для своих нужд, но не поставляйте другим». Точно ложится на R1+R3 |
| **PolyForm Shield** | ✅ | ❌ | ⚠️ запрещает только конкуренцию с автором | ✅ | Широкое принятие, блокируются лишь прямые конкуренты. Мягче, чем R3 |
| **CC0 / public domain** | ✅ | ❌ | ❌ | ✅ | Отказ от всего, включая имя |
| **Проприетарная / своя** | по вашему усмотрению | можно вписать | можно вписать | можно вписать | Единственный способ получить ровно R1–R4. Цена — в §5 |
Замечания к таблице:
- **CC для кода использовать не следует** — это позиция самой Creative Commons.
Если выбор уходит в CC-семейство, гейт и будущий C++-модуль всё равно требуют
отдельной строки.
- **PolyForm-лицензии не одобрены OSI** — все накладывают ограничение по области
использования. То же верно для всех CC, кроме CC0/BY/BY-SA.
- **CC BY-ND 4.0 — не то же самое, что ND 3.0.** В 3.0 создание адаптации было
за пределами гранта; в 4.0 адаптации явно разрешены, пока их не публикуют.
Общая страница CC об этом до сих пор пишет по-старому, авторитетен здесь текст
legal code, а не сводка.
---
## 5. Три реалистичные комбинации
### Вариант A — CC BY-ND 4.0 на тексты, Apache-2.0 на код
Что получает пользователь: читает, применяет, правит под себя внутри студии;
опубликовать свою версию бандла не может; код гейта и будущего плагина берёт
свободно.
- **R1** ✅ · **R3** ✅ · **R4** ✅ · **R2** — только атрибуция при
распространении, титры остаются просьбой в README.
- Готовые тексты, ничего сочинять не нужно.
- Минус: нужно объяснять границу «текст/код» в каждом обсуждении. Минус второй:
ND-лицензия закрывает и *дружественный* вклад — исправление в вашем тексте
нельзя опубликовать даже как pull request-форк.
### Вариант B — PolyForm Internal Use на бандл, Apache-2.0 на код
Формулировка «пользуйтесь для внутренних операций своей компании, но не
поставляйте другим» ближе к вашей интонации, чем язык авторского права CC.
- **R1** ✅ · **R3** ✅ · **R4** ✅ · **R2** ❌ полностью.
- Минус: лицензия малоизвестна, юротдел студии её читает целиком, а незнакомая
лицензия чаще приводит к отказу, чем к вопросу. **[гип]**
### Вариант C — своя лицензия из четырёх пунктов
Ровно R1–R4, включая пункт про титры и пункт «на созданное с помощью инструмента
претензий нет».
- **R1–R4** ✅ на бумаге.
- Минус, который перевешивает: **каждая студия обязана провести юридическую
проверку**, а нестандартная лицензия — типовая причина автоматического отказа
во внутренних политиках. Свободное распространение по R1 упирается ровно в это.
Плюс текст должен написать юрист, иначе неоднозначность будет толковаться не в
вашу пользу.
---
## 6. Что изменится в фазе 1 и почему это важно решить сейчас
Сегодня продукт — текст. После фазы 1 в том же репозитории появится **C++-модуль
UE и MCP-сервер**, то есть код, который студия компилирует внутрь своего
редактора.
Отсюда два следствия **[выв]**:
1. **Ограничительная лицензия на исполняемый код бьёт по принятию сильнее, чем
на текст.** Юротдел, спокойно пропускающий документ с ограничениями, обычно
гораздо строже к коду, попадающему в сборку.
2. **Менять лицензию задним числом нельзя** — те, кто уже взял по прежним
условиям, остаются на них. Поэтому раздельная схема «код свободный, тексты
ограничены» выгоднее выбрать сразу, чем переигрывать после первого релиза.
---
## 7. Правообладатель
Любой из вариантов начинается со строки `Copyright (c) 2026 <ПРАВООБЛАДАТЕЛЬ>`.
| Форма | Когда уместна |
|---|---|
| Настоящее имя физлица | автор один; самая простая и внятная форма |
| Псевдоним / handle | если публичность имени нежелательна; авторство труднее доказывать при споре |
| Юрлицо | если работа сделана в рамках компании — тогда выбор может быть и не ваш |
| `<project> contributors` | принято при нескольких авторах; сейчас это описание будущего, а не факт |
Имя правообладателя не выводится из содержимого репозитория и не может быть
подставлено по умолчанию. Требование R2 — про **это** имя, поэтому пока оно не
названо, R2 не реализуемо ни одним из механизмов §3.
---
## 8. Слой, который выбором из таблицы не закрывается
Содержание бандла выведено из разбора Epic Lyra, распространяемого по UE EULA.
Измерено: в поставке нет кода Epic, нет адресов вида `Файл.ext:строка`, нет имён
с префиксом донора вне блоков `Provenance` (правило гейта P03, ноль нарушений).
Присутствуют публичные имена API движка — `UPROPERTY`, `TArray`, `FGameplayTag` и
подобные — и собственные наблюдения об архитектуре. **[изм]**
Это существенно снижает риск, но **не является юридическим заключением** и не
заменяет его. Если релиз публичный — вопрос адресуется человеку с квалификацией.
Обезличивание, уже сделанное, принималось ради качества продукта; то, что оно
попутно уменьшает этот риск, — побочный эффект, а не доказательство. **[гип]**
---
## 9. Что требуется от владельца, чтобы закрыть вопрос
1. **Правообладатель** — имя в строку copyright (§7).
2. **Комбинация** — A, B, C или иная (§5).
3. **Форма требования о титрах** — просьба в README, условие двойного
лицензирования, или снятие требования (§3).
После этого механическая часть — `LICENSE`, поле `license` в `catalog.json` и
`plugin.json`, раздел в `README.md`, правило гейта на присутствие файла — делается
за один заход.
---
## Источники
- [PolyForm Project — исходные тексты лицензий](https://github.com/polyformproject/polyform-licenses)
- [PolyForm Noncommercial License 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0)
- [License Round-Up — разбор семейства PolyForm](https://writing.kemitchell.com/2021/06/20/License-Round-Up)
- [CC BY-ND 4.0 — deed](https://creativecommons.org/licenses/by-nd/4.0/deed.en)
- [CC 4.0 — обращение с адаптациями (wiki)](https://wiki.creativecommons.org/wiki/4.0/Treatment_of_adaptations)
- [CC — о лицензиях](https://creativecommons.org/share-your-work/cclicenses/)
- [CC FAQ](https://creativecommons.org/faq/)