Вопрос приходит как лицензионный, но ответ начинается с инвентаризации. Интерфейс VPN, движок OpenVPN, которым он управляет, библиотека TLS и установщик могут иметь четыре разных набора условий, а внешний вид продукта ничего не говорит о том, какой файл относится к какому набору. Пройдите артефакты в порядке их поставки, и юридический вопрос станет намного уже к тому моменту, когда вы передадите его тому, кто компетентен ответить. Каждый шаг сужает его: что распространяется, что было изменено и как части взаимодействуют.

Начните с того, что установщик кладёт на диск

Возьмите выпущенный установщик или пакет, а не рабочую копию, и перечислите каждый файл, который он размещает на чистой машине. Запишите версии интерфейса, движка и библиотеки TLS, а также отметьте, является ли движок отдельным исполняемым файлом или библиотекой, загружаемой в тот же процесс.

Этот последний факт определяет всё дальнейшее. Отдельный исполняемый файл, запускаемый через сокет, ставит иной набор вопросов, чем код, скомпилированный в один бинарный файл, а установщик, который просто кладёт оба рядом, не решает дело ни в ту, ни в другую сторону. Объединение — это решение об упаковке, тогда как отношения между программами — архитектурное решение.

Запишите список с версиями, потому что условия различаются между основными выпусками.

dpkg -L openvpn | head -n 40
openssl version -a

Отделите интерфейс от движка

Файл копирования OpenVPN указывает GPL версии 2 и документирует исключение для компоновки с OpenSSL, которое является конкретным разрешением с определённой областью действия, а не общей лицензией на смешение условий.

Зафиксируйте текст лицензии, поставляемый с вашей сборкой, а не тот, что сегодня на сайте проекта. Выпуск, закрепивший более старую ветку, несёт документ этой ветки. Скриншоты страницы репозитория не заменяют его, потому что нужный вам файл — тот, что внутри артефакта. Храните его рядом с установщиком, чтобы пакет был полным.

Затем опишите интеграцию честно: запускает ли интерфейс движок как дочерний процесс и говорит по текстовому протоколу, или он связывает библиотеку и обменивается внутренними структурами? Вторая схема близка так, как первая — нет, и именно это различие рецензент спросит первым.

Отметьте, какие файлы вы изменили

Изменённый исходный код меняет анализ больше, чем любая деталь упаковки. Если вы применили патч к движку, сам патч является производной работой, и обязанность ложится на того, кто распространяет результат.

Запишите каждый патч, его цель и то, был ли он отправлен вверх по потоку, потому что патч, никогда не покидавший ваш репозиторий, всё равно остаётся частью того, что вы поставляете, если поставляете бинарный файл.

Конфигурационные файлы, темы и переводы обычно живут с интерфейсом, но перевод, встраивающий строки исходного кода движка, — небольшое напоминание о том, что граница проходит по файлу, а не по каталогу. Держите различие между вышестоящим выпуском и вашей сборкой, чтобы ответ был доступен по запросу, а не восстанавливался позже. Это различие также самый полезный артефакт, когда аудитор спрашивает, что изменилось.

Проверьте версию OpenSSL отдельно

OpenSSL 3.0 и новее распространяются по Apache License 2.0, тогда как более старые выпуски несут условия OpenSSL/SSLeay. Это разные документы с разными обязанностями, и объединённый движок может компоновать тот из них, который нашла ваша система сборки.

Подтвердите фактически поставляемую версию, а не ту, что указана в скрипте сборки.

Зависимость от OpenVPN не превращает каждое изменение OpenSSL в код GPL, и исключение для компоновки не снимает других обязанностей, связанных с распространением библиотеки. Относитесь к исключению как к одному пункту в более широком анализе и запишите собственные уведомления библиотеки TLS вместе со всем остальным.

Соберите пакет доказательств

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

Держите пакет у одного владельца, чтобы ни один выпуск не мог выйти без него.

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

Похожие статьи