Собрали для вас шпаргалку по GNU-лицензиям. Это must-read для всех, кто использует опенсорс в коммерческих продуктах. Разобрали условия, риски и способы защиты простыми словами с примерами.
План:
Риски несоблюдения GNU лицензий
Что необходимо знать об Open Source лицензиях
Условия GNU GPL (General Public License)
Условия GNU AGPL
Условия GNU LGPL v3
Как можно снизить или устранить риски использования GNU лицензий
1. Риски несоблюдения GNU лицензий
Почему вообще стоит беспокоиться о том, как использовать опернсорс лицензии? Они же опенсорс!
Но не так все просто, несоблюдения требований использования опенсорс лицензий в коммерческих продуктах рождает определенные риски для вашего продукта, рассказываем о них ниже.
1.1. Отказ в регистрации в реестре российского ПО
Правообладателям, планирующим регистрацию ПО в Реестре российского ПО, критически важно соблюдать условия лицензий GNU. Эксперты при проверке вправе запросить подтверждение легального использования открытого кода и отказать, если таковые будут отсутствовать.

Тем более в ближайшие годы Минцифры планируют ужесточить требования к ПО. Появятся дополнительные проверки на соблюдение требований лицензий GNU, что усложнит участие в госзакупках и регистрацию в реестре.
1.2. Потеря доверия
Если контрагенты узнают, что ПО обременено нарушениями лицензионных соглашений, это подорвет их доверие. У разработки понизится ценность, соглашения будут расторгнуты. Многие изначально не станут сотрудничать с ненадежным поставщиком из-за юридических рисков.
2. Что необходимо знать об Open Source лицензиях
Практически ни одна программа не пишется "с нуля". Она представляет собой конструктор, собранный из компонентов, каждый из которых распространяется по лицензии.
Аналогия: Представьте, что вы строите дом.
Ваш код — это архитектурный проект и несущие стены.
Библиотеки — это готовые строительные блоки: кирпичи, окна, двери.
Система управления базами данных — это фундамент и система коммуникаций : вода, электричество.
Как правило, вы не делаете кирпичи и окна сами, вы покупаете их у разных производителей. У каждого производителя свои правила использования его продукции (условия лицензии), при несоблюдении которых последуют санкции.
Лицензии бывают двух типов:

Мало кто знает, но и Open Source лицензии хранят в себе риски, которые мы сейчас подробно разберем в данной статье.

3. Условия и риски GNU GPL (General Public License)
Существует 3 версии лицензии GNU GPL. Первая версия (GPL v1) устарела для всех компонентов и не применяется c 1991 года, поэтому внимания заслуживают только вторая (GPL v2) и третья (GPL v3) версии.

3.1. GPL v2
Популярные компоненты лицензии: Linux (Ubuntu, Debian, Fedora, CentOS),GCC, MySQL и т.д.

Условия (обязанности), которые накладывает лицензия (ст. 2, 3, 6)
Условие 1: Распространение на тех же условиях (Ст. 2b)
"You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License"
– Что это значит:
Знаменитое "вирусное" свойство. Если вы включаете GPL v2-код в свой продукт и распространяете его, весь ваш продукт должен быть лицензирован под GPL v2. Вы не можете сделать его проприетарным.
Условие 2: Сохранение уведомлений (Ст. 2a)
"You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change"
– Что это значит:
Вы должны сохранить все уведомления об авторском праве и лицензии. Если вы вносите изменения, вы должны явно пометить файлы и указать, что вы изменили и когда.
Условие 3: Предоставление исходного кода (Ст. 3)
You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
– Accompany it with the complete corresponding machine-readable source code,....,
– Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution...,
– Accompany it with the information you received as to the offer to distribute corresponding source code.
– Что это значит:
Распространяя программу в скомпилированном виде (бинарнике), вы обязаны предоставить всем получателям полный исходный код. Сделать это можно одним из способов:
– Приложить исходный код к бинарнику.
– Предложить в течение 3 лет предоставить исходный код любому, кто заплатит не больше вальных затрат на его распространение (обычно стоимость носителя или скачивания).
– Указать, где можно скачать исходный код (например, на вашем сайте).
* Под исключение данного условия попадают: программы, созданные для внутреннего использования в компании, серверная часть у клиент-серверных ПО (AGPL была создана специально, чтобы закрыть эту "лазейку" для серверных и SaaS-приложений).
3.2. GPL v3
Популярные компоненты лицензии: Readline, GCC, GDB и т.д.
Новая версия вводит новые условия, но сохраняет все прежние ограничения.

Условия (обязанности), которые накладывает лицензия
Условие 1: Предоставление Исходного Кода.
Цитата из Раздела 6: "You may convey covered works in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License".
– Что это значит:
Вы должны сделать исходный код доступным для всех, кто получил программу. Способы предоставления исходников остались прежними.
Условие 2: О патентных лицензиях (новое положение).
Цитата из Раздела 11: "Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims in its contributor version...".
– Что это значит:
Если вы распространяете код, то не можете потом подать в суд на его пользователей за нарушение ваших патентов, которые используются в этом коде, так как лицензия ограничивает �� этом правообладателей.
Условие 3: Запрет блокирования модификаций – Тивоизация (новое положение)
Цитата из Раздела 6: "The Corresponding Source... must include any encryption or authorization keys necessary to install and/or execute modified versions from source code in the recommended or principal context of use."
– Что это значит:
Если вы распространяете устройство с ПО под GPLv3, вы должны дать пользователю возможность заменить его на свою модифицированную версию.
Разберем на примерах:
Пример 1: Умная колонка (как было ДО GPL v3).
Компания "XSound" создает умную колонку. В её прошивке используется код под GPL v2.
Она выкладывает исходный код прошивки на своем сайте, формально выполняя лицензию.
Однако прошивка должна быть подписана секретным ключом компании, иначе колонка её не примет.
Результат: Покупатель не может модифицировать прошивку, чтобы добавить поддержку нового аудиоформата.
Пример 2: Умная колонка (как стало С GPL v3).
Теперь компания "XSound" использует в прошивке код под GPL v3.
Лицензия обязывает их предоставить не только исходный код, но и:
Инструкции, как собрать и подписать прошивку для их колонки.Ключи для подписи или способ обхода проверки подписи (например, инструмент для разблокировки загрузчика).
Результат: Покупатель скачивает код, исправляет его, подписывает с помощью предоставленных компанией инструментов и успешно заливает свою версию в колонку.
4. Условия GNU AGPL
Популярные компоненты лицензии: Booktype, BerkeleyDB, MongoDB, OpenRemote, Matomo.
GNU Affero GPL (AGPL) является доработкой GPL v3, но с ужесточением для сетевого ПО.

Условия (обязанности), которые накладывает лицензия
Условие 1: Предоставление исходного кода удаленным пользователям
Цитата из абз. 1 раздела 13: “…if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network... an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge…”
– Что это значит:
Если вы запустили ПО на сервере или другом устройстве с предоставлением сетевого доступа пользователям, то ваша модифицированная версия должна позволять им получить её исходный код.
Условие 2: Распространение исходного кода
Цитата из абз. 1 раздела 6: "You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License..."
– Что это значит:
Как и в GPL, при распространении программы в исходной или объектной форме вы должны предоставить получателям соответствующий исходный код.
Условие 3: Сохранение уведомлений.
Цитата из раздела 4: “...keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program”.
– Что это значит:
Вы должны сохранить все уведомления об авторском праве и лицензии. Если вы вносите изменения, вы должны явно пометить файлы и указать, что вы изменили и когда.
Условие 4: Лицензирование модификаций под AGPL v3.
Цитата из раздела 5(c): “You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy”.
– Что это значит:
Любые изменения в самом ПО или производные работы должны распространяться на условиях AGPL v3.
Условие 5: Обязанность предоставить информацию для установки (для пользовательских устройств).
Цитата из абз. 5 раздела 6: "...the Corresponding Source conveyed under this section must be accompanied by the Installation Information".
– Что это значит:
Как и в GPL v3, производитель устройства обязан дать всё необходимое (ключи шифрования, инструкции и прочее), чтобы пользователь мог установить изменённую прошивку или ПО на своём устройстве.
Пример:
Компания DataInsight развивает облачный сервис аналитики на базе Matomo, дополнив его собственными модулями для обработки больших данных. Пользователи получают доступ к сервису через веб-интерфейс, не скачивая программу на свои устройства.
Для соблюдения AGPL v3 компания обязана:
предоставить всем пользователям, взаимодействующим с сервисом по сети, доступ к полному исходному коду сервиса, включая собственные модификации;
сопровождать код уведомлениями об авторских правах и копией лицензии AGPL v3;
публиковать все модификации под той же лицензией AGPL v3;
предоставить установочные инструкции и ключи, если ПО устанавливается на пользовательские устройства.
Результат: сервис остаётся коммерческим (например, за счёт платной поддержки или облачного хостинга), но исходный код, включая модификации, остаётся открытым и доступным всем пользователям сервиса.
5. Условия GNU LGPL v3
Популярные компоненты лицензии: GNOME Files, TinyButStrong, GNU C Library, Qt, LibreOffice SDK, SDL, libVLC.
LGPL (Lesser General Public License) специально разработана для библиотек.

Условия (обязанности), которые накладывает лицензия
Условие 1: Уведомление об авторских правах и лицензии
Цитата из раздела 4 (a,b): “Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. Accompany the Combined Work with a copy of the GNU GPL and this license document”.
– Что это значит:
Нужно сохранить уведомление об авторских правах библиотеки и приложить тексты лицензий GNU LGPL и GNU GPL к вашему продукту.
Условие 2: Предоставление возможности модификации и повторного линкования.
Цитата из раздела 4(d): “Do one of the following: 0. Convey the Minimal Corresponding Source… and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work… 1. Use a suitable shared library mechanism for linking with the Library…”
– Что это значит:
Если библиотека вшита в исполняемый файл, то вы должны предоставить ее полный исходный код (с вашими изменениями, если они есть) и исходные или объектные файлы ПО, чтобы пользователь мог пересобрать его с модифицированной библиотекой. Если используется динамическая линковка, то есть библиотека является отдельным файлом, вам не придется раскрывать исходники вашего ПО. ��станется только оставить открытым код библиотеки и обеспечить интерфейсную совместимость, чтобы пользователь мог беспрепятственно осуществить замену.
Условие 3: Предоставление информации для установки
Цитата из раздела 4 (e): ”Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL... to the extent that such information is necessary to install and execute a modified version of the Combined Work…”
– Что это значит:
Производитель устройства (например, роутера или медиаплеера) должен предоставить ключи или инструкции, чтобы пользователь смог установить свою модифицированную прошивку с этой библиотекой.
Условие 4: Открытость модификаций
Цитата из раздела 2: “If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy”.
– Что это значит:
При изменении библиотеки вы обязаны распространить её либо под LGPL, либо под GPL, без каких-либо дополнительных ограничений.
Условие 5: Соблюдение особых правил при использования заголовочных файлов библиотеки
Цитата из раздела 3: “...if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice... b) Accompany the object code with a copy of the GNU GPL and this license document”.
– Что это значит:
Если вы скопировали из заголовков библиотек не просто макросы или параметры, а более сложный код, то вы должны уведомить об использовании библиотеки и приложить тексты лицензий.
Разберем на примерах:
Пример 1: Динамическая линковка
Компания VideoLabs создаёт проприетарный медиаплеер и прилагает к нему библиотеку libVLC под LGPL v3 в формате отдельного файла.
К плееру прилагаются уведомления об авторских правах и тексты лицензий LGPL и GPL.
Исходники библиотеки и изменения к ней доступны пользователям для пересборки и распространяются под LGPL.
Результат: основной код остается закрытым, а пользователи могут изменять и заменять библиотеку.
Пример 2: Статическая компоновка
Компания GraphSoft создает закрытый графический редактор и включает библиотеку GTK, распространяемую под LGPL v2, прямо в исполняемый файл.
Программа содержит уведомления об авторских правах и тексты лицензий.
Для обеспечения возможности пользователей пересобирать ПО с модифицированной библиотекой предоставляются исходники или объектные файлы программы.
Любые изменения в библиотеке публикуются под LGPL или GPL.
Результат: основной код остается закрытым, но статическая компоновка требует дополнительных материалов для соблюдения LGPL.
Сводная таблица

6. Как можно снизить или устранить риски использования GNU лицензий
Если вы решили создать ПО, чтобы потом продавать лицензионные копии, вам стоить проверить условия лицензии, которая распространяется на ваш код! Лучшим решением будет вовсе не использовать компоненты под GNU GPL И AGPL по следующим причинам:
обязанность раскрывать исходный код вашей разработки;
невозможность препятствовать дальнейшему бесплатному распространению;
невозможность защитить патентом свои разработки на основе заразных компонентов.
Эти условия препятствуют коммерциализации, поэтому следует остановиться на разрешительных или слабовирусных лицензиях по типу MIT, BSD, Apache 2.0 или MPL 2.0, LGPL. Они гарантируют свободную интеграцию в ПО и не требуют раскрытия исходного кода.
Чтобы предупредить риски, вызванные использованием заразных компонентов, я рекомендую предпринять следующее:
проверить лицензии компонентов на начальном этапе разработки;
составить регламент для разработчиков с инструкциями для определения заразных лицензий;
провести дополнительное обучение сотрудников по вопросам лицензирования и работе с open-source.
Такие меры позволят избежать нарушений с вашей стороны и свести риски споров с правообладателями к минимуму :-)
