Как устроена юридическая шпаргалка GitHub и зачем разворачивать choosealicense.com локально
Вы наверняка встречали форму выбора лицензии при создании нового репозитория на GitHub. Пара кликов, и в проекте появляется файл LICENSE с правильным копирайтом и текущим годом. Мало кто задумывается, но вся эта логика, короткие понятные пояснения и подсвеченные иконками права живут в открытом репозитории github/choosealicense.com.
Проект вырос из простой идеи. Разработчики редко разбираются в юридических тонкостях и не хотят читать десятки страниц легального текста. Им нужен прямой ответ: что можно делать с кодом, а что нельзя. Сайт choosealicense.com закрывает эту задачу, а сам репозиторий служит бэкендом для лицензионной системы GitHub.
Зачем нужен этот репозиторий
В первую очередь это статический сайт на Jekyll. Его главная задача — разложить сложные юрдокументы на понятные категории без оценочных суждений. Авторы не навязывают конкретную лицензию, а дают инструмент для самостоятельного выбора.
Помимо работы веб-сайта, контент репозитория регулярно импортируется в Ruby-гем Licensee. Именно эта библиотека под капотом самого GitHub определяет тип лицензии в ваших проектах, выводит её статус в интерфейсе репозитория и отдает данные через GitHub API.
Как устроены лицензии внутри
Вся магия сайта и интеграций строится на структурированном описании каждого документа. В папке _licenses лежат Markdown-файлы. Каждая лицензия снабжена шапкой в формате YAML (front matter) и полным юридическим текстом.
В YAML-шапке задаются метаданные:
title: MIT License
spdx-id: MIT
description: A short and simple permissive license...
how: Create a file named LICENSE containing the license text...
using:
babel: https://github.com/babel/babel/blob/main/LICENSE
permissions:
- commercial-use
- modifications
- distribution
- private-use
conditions:
- include-copyright
limitations:
- liability
- warranty
Правила разделены на три категории: разрешения, условия и ограничения. Вся расшифровка отдельных атомарных правил вроде commercial-use или include-copyright хранится отдельно в файле _data/rules.yml. Если нужно добавить новое условие, вы описываете его один раз в rules.yml и ссылаетесь на него в файлах лицензий.
При создании нового репозитория GitHub берет шаблон и подставляет реальные значения вместо встроенных переменных:
fullnameилиloginавтораyearтекущего годаprojectдля названия репозиторияprojecturlдля ссылки на проект
Автоматическая сборка и мультиязычность
Сайт поддерживает переводы интерфейса и кратких аннотаций через Jekyll-плагин jekyll-polyglot. Сами юридические тексты лицензий принципиально не переводятся, чтобы не искажать правовую суть оригинальных документов.
Поскольку jekyll-polyglot не входит в стандартный список поддерживаемых плагинов GitHub Pages, деплой организован через GitHub Actions. Рабочий процесс собирает сайт и публикует готовый статический бандл в ветку gh-pages.
Запуск проекта на своем компьютере
Развернуть локальную копию сайта можно за пару минут. Потребуются установленные компиляторы make и cmake.
На macOS зависимости ставятся через Homebrew:
brew install make cmake
В Ubuntu или Debian достаточно стандартного пакетного менеджера:
sudo apt-get install make cmake
После этого клонируем репозиторий вместе с подмодулями и запускаем внутренние скрипты:
git clone https://github.com/github/choosealicense.com.git --recursive
cd choosealicense.com
./script/bootstrap
./script/server
Сайт поднимется по адресу http://localhost:4000. Вы сможете редактировать файлы в _licenses и сразу видеть результаты в браузере.
Как использовать репозиторий в своих проектах
Локальная сборка или форк проекта пригодятся в разных ситуациях:
- Создание внутренней базы юридических документов. В крупных компаниях часто действуют свои правила использования стороннего кода. Можно сфоркать репозиторий, добавить туда корпоративные требования и развернуть внутренний справочник.
- Генерация лицензий в CLI-утилитах. Если вы пишете собственный генератор шаблонов проектов, отсюда удобно брать выверенные тексты LICENSE с переменными автоподстановки.
- Автоматический аудит кодовой базы. Опираясь на файлы правил из
_licenses, легко написать простой линтер для проверки сторонних зависимостей в вашем CI/CD. - Изучение архитектуры многоязычных Jekyll-сайтов. Кастомный пайплайн сборки с плагином
jekyll-polyglotслужит хорошим примером для собственных статических проектов.
Что в итоге
Репозиторий choosealicense.com — хороший пример того, как превратить скучные юридические документы в удобную структуру данных. Проект объединяет понятный веб-интерфейс, машиночитаемые метаданные и механизмы автоподстановки. Если вам нужно навести порядок с лицензиями в собственных проектах или сделать удобный справочник для команды, исходники этого сайта станут отличной отправной точкой.
