Комплаенс
Что уходит в браузер и по каким лицензиям: состав поставки портала, SBOM, права на материалы сайта и готовые ответы для опросника поставщика.
Черновик до запуска: текст написан, юристом не проверялся.
Короткий ответ
Ядро Granularity объявляет 0 runtime-зависимостей. Это не фигура речи и не округление: в манифесте установленного пакета 0.41.0 раздел dependencies пуст, и аудит зависимостей у вас сводится к одному пакету.
Сам портал — статические HTML, CSS и шрифты. Ни один запрос не уходит на сторонний хост: ни за шрифтом, ни за стилем, ни за аналитикой. Полный состав того, из чего он собран, отдаётся машине одним запросом — CycloneDX.
Что уходит в браузер
Разница между «зависимость проекта» и «код на устройстве пользователя» здесь принципиальна, и почти весь список ниже — первое. На устройство приезжает вот что.
- Шрифт Inter — SIL Open Font License 1.1. Отдаются 3 подмножества:
inter-cyrillic.woff2,inter-latin-ext.woff2,inter-latin.woff2. Ещё 4 файла читает генератор карточек Open Graph — они не покидают сборку. Копия лицензии лежит в репозитории рядом со шрифтом, и её отпечаток сторожит гейт: замена шрифта роняет сборку. - Иконки lucide — ISC. Пакет
@iconify-json/lucideсборочный, но его данные запекаются в CSS масками — то есть приезжают к пользователю и попадают под свою лицензию. Отдельного запроса за иконкой нет ни одного. - JavaScript островов — Vue и компоненты Granularity. Прозаическая страница не грузит ни байта: скрипт появляется там, где есть живое демо, playground или поиск.
- Индекс поиска — Pagefind, MIT. Индекс и его WebAssembly отдаются с того же адреса и загружаются только по запросу пользователя.
Ни одного стороннего хоста
Утверждение проверяемое, и оно проверяется: гейт сборки просматривает каждую отданную страницу и каждый файл стилей и требует, чтобы всякий загружаемый ресурс — скрипт, стиль, шрифт, картинка, фрейм — приезжал с собственного адреса сайта. Появившаяся ссылка на чужой CDN роняет сборку, а не остаётся незамеченной до аудита.
Практическое следствие: ни один сторонний обработчик не получает IP-адрес вашего сотрудника от того, что он открыл документацию. Обработчиков персональных данных у сайта нет вовсе — приватность.
Одна оговорка, и она названа здесь, а не спрятана в исключении гейта. Демо GrFilePreview показывает состояние «картинка не загрузилась» и берёт для этого адрес в домене .invalid. Такие имена зарезервированы RFC 2606 и не резолвятся нигде и никогда — это и есть их назначение, — поэтому запросом к стороннему хосту он не становится и никаких данных никуда не отправляет.
Состав поставки портала
Замыкание production-зависимостей портала — 396 пакетов на 12 лицензиях, из них 14 прямых. Читается дерево, установленное на диск, а не список из манифеста: в реестре лицензий важно то, что доехало, включая транзитивное, и версия берётся оттуда же — диапазон «^0.41.0» это не версия, а обещание.
Почти всё в этом списке — сборочный инструмент. Он превращает исходники в статические файлы и в браузер не едет никогда. Не читайте таблицу как «пользователю приезжает четыреста пакетов»: ему не приезжает ни одного.
| Лицензия | Пакетов | Из них прямые зависимости портала |
|---|---|---|
MIT | 360 | @astrojs/markdown-remark, @astrojs/vue, @feugene/fint-i18n, @feugene/unocss-preset-granular, @floating-ui/dom, @unocss/astro, astro, remark-directive, unocss, vue |
ISC | 10 | — |
BSD-2-Clause | 8 | — |
Apache-2.0 | 4 | — |
BlueOak-1.0.0 | 3 | — |
BSD-3-Clause | 3 | — |
SEE LICENSE IN LICENSE | 3 | @feugene/astro-granularity, @feugene/granularity, @feugene/granularity-code |
CC-BY-4.0 | 1 | — |
CC0-1.0 | 1 | — |
MPL-2.0 | 1 | — |
OFL-1.1 | 1 | @fontsource-variable/inter |
Python-2.0 | 1 | — |
Строка SEE LICENSE IN LICENSE — это собственные пакеты Granularity: в манифесте npm идентификатора для такой лицензии нет, и он живёт в файле. Разбор — на странице лицензии. Лицензия.
SBOM и машиночитаемые ответы
/api/v1/sbom.json— CycloneDX 1.6 с purl на каждый пакет./api/v1/licenses.json— та же поставка сводкой по лицензиям.
Граница названа прямо, потому что подменять её выгодно и потому нечестно: это состав портала. Полный SBOM по каждому из пакетов библиотеки собирается в её релизном процессе, и выдавать одно за другое — тот род неточности, который корпоративная проверка не прощает.
Права на материалы сайта
| Что | На каких условиях |
|---|---|
| Код библиотеки | LicenseRef-Granularity-EUC-1.0 |
| Примеры кода на сайте | CC0 1.0 — общественное достояние. Копируйте без указания источника: пример для того и нужен. |
| Проза документации | CC BY 4.0 — переиспользуемо с указанием источника. |
| Логотип и знак | Все права защищены; правила — на странице бренда. |
| Шрифты и иконки | По лицензиям правообладателей — перечислены ниже. |
Строка про примеры кода важна практически. Без явного разрешения копирование примера в свой проект формально наследует лицензию библиотеки со всей её оговоркой — очевидно не то, чего хочет автор, и потому это написано, а не подразумевается.
VPAT и ACR
Отчёта о соответствии (VPAT 2.5 / ACR) пока нет. Он запланирован и требует не только прогонов, но и ручной проверки со скринридером, которой ещё не было, — заполнить его по одной автоматике значило бы выдать документ, чья первая же строка неверна.
Что есть вместо него прямо сейчас: декларация о доступности с заявленным уровнем, методом проверки и — главное — перечнем известных исключений. Она отвечает на те же вопросы, только без формы. Декларация о доступности.
Готовые ответы для опросника поставщика
| Вопрос | Ответ |
|---|---|
| Идентификатор лицензии для реестра | LicenseRef-Granularity-EUC-1.0 |
| SBOM в машиночитаемом виде | CycloneDX 1.6 — /api/v1/sbom.json |
| Runtime-зависимости ядра | Нет ни одной. |
| Запросы к сторонним хостам с сайта | Нет. Шрифты, стили и скрипты отдаются с собственного адреса сайта. |
| Cookie и трекеры | Cookie нет вовсе; аналитика не развёрнута. См. страницу про cookie. |
| Соответствие по доступности | WCAG 2.2 AA, соответствует частично — исключения перечислены в декларации. |
| VPAT / ACR | Ещё не опубликован. Что есть вместо него — ниже. |
Контакт
Вопросы юротдела и запросы на документы — legal@granularity.tech. Отвечаем в течение пяти рабочих дней. Об уязвимостях — безопасность.