Россия, г. Москва +7 (926) 233-46-64 alex@harlamenkov.ru

Тайны GNU GPL. То, что от вас скрывали

Законодательство в области авторского права является самым противоречивым и запутанным в мире. Поэтому тема лицензирования ПО сложна и требует глубокого анализа.

На одном из форумов возникла дискуссия по лицензированию популярной системы для управления сайтом CMS «Joomla!®».

Суть спора: все компоненты, написанные для Joomla!, должны наследовать лицензию GNU GPL.

Но, так ли это на самом деле?

Детальное изучение нормативной базы принесло открытия.

Открытия оказались интересными.



Для начала определяем лицензию «Joomla!®». Для этого на официальном сайте находим ссылку «License» и читаем:

GNU General Public License v2.
Joomla! is distributed under the GNU General Public License version 2.… For complete information about the GNU GPL please visit the Free Software Foundation.


«Joomla!» распространяется по лицензии GNU General Public License v2.

Особо отметим, что при анализе лицензий программы весьма важно — указана конкретная версия GNU GPL или есть фраза «или более новая».

Автор лицензии GNU GPLv2 «Free Software Foundation, Inc». Следовательно, единственный доверенный текст находится по адресу: www.gnu.org/licenses/old-licenses/gpl-2.0.html

Ошибкой является обращение к сомнительным переводам лицензии с неавторитетных ресурсов. Поэтому будем использовать оригинальный текст и перевод Google.

В СПО-сообществе широко распространены мнения, основанные на личных представлениях и игнорировании текстов лицензий.

Мнение 1
Лицензия наследуется, следовательно, распространяется.
Если основной продукт А имеет лицензию GNU GPL, и она наследуется сторонним дополнением Б, то это однозначно означает, что дополнение Б тоже имеет эту же самую лицензию, т. е.лицензия GNU GPL распространяется на дополнение Б.


Путаница в вопросах «кем и от кого наследуется», и «на что распространяется».

Некоторые считают, что GNU GPL наследуется всеми и распространяется на всё.

GNU GPL содержит иную точку зрения.

Мнение 2
Всё, что затрагивает и зависит в своей работе от Программы, лицензированной по GNU GPL, абсолютно и безусловно должно также быть лицензировано по GNU GPL.

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


Здесь видно полное непонимание понятий «производных продуктов» и «модифицированных продуктов».

GNU GPL даёт на это чёткий и однозначный ответ.

Мнение 3
В программу или систему, лицензируемую по GNU GPL, не могут устанавливаться сторонние компоненты, выпускаемые под другими лицензиями.

 

Мнение 4
Основным критерием принято считать использование сторонним дополнением команд основной Программы. Другим критерием может быть выполнение кода Программы и стороннего дополнения в одной среде. Удовлетворение любого из этих критериев можно считать достаточным условием наследования GNU GPL лицензии.

 

Мнение 5
Дополнения к Программе, даже если они выполнены как отдельно устанавливаемые модули, никак не могут считаться независимыми от Программы, если для их работы необходимо наличие этой самой Программы. Дополнения не могут работать сами по себе. Для их работы необходима та самая Программы, которую эти модули дополняют. Следовательно нельзя считать такие дополнения независимыми и самостоятельными.

 

Заблуждения


Если следовать логике «Мнения 1» и «Мнения 2», то весь контент, включая тексты, видео и звук, публикуемый на сайтах, ПО которых лицензировано по GNU GPL, должен так же лицензироваться по GNU GPL, ибо затрагивает Программу и зависит в своей работе от неё.

Мнение 3 обосновывает запрет на разработку и использование проприетарных компонентов для СПО-систем.

Мнение 4 вообще обозначает трансляцию лицензии через системные вызовы. Исходя из этого, в ОС MS Windows нельзя запускать GNU GPL программы, а в ОС Linux, соответственно, проприетарные.

Однако, это не так.

Мнение 5 заслуживает особого внимания, так как выглядит очень логичным и, потому, убедительным.
Но в GNU GPLv2 есть однозначные критерии для определения «независимости» и «самостоятельности» приложения.

Что же в первоисточниках?


Правила распространения лицензии GNU GPLv2, записано в самой лицензии GNU GPLv2 (выделения жирным — авт.). То есть описано, на что распространяется Лицензия и как наследуется.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION   УСЛОВИЯ ДЛЯ КОПИРОВАНИЯ, РАСПРОСТРАНЕНИЯ И МОДИФИКАЦИИ
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:   2. Вы можете изменять свою копию или копии Программы или любой её части, создавая таким образом произведение, основанное на Программе, и копировать и распространять эти модификации или произведение в соответствии с Разделом 1, выше, при условии, что вы выполните все следующие условия:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.   а) Вы обязаны снабдить модифицированные файлы заметным уведомлением, что вы изменили файлы, и датой изменений.



Прим. авт.: то есть обязательно должны быть модифицированы файлы исходной Программы.



These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.   Эти требования применяются к модифицированному произведению в целом. Если известные части этого произведения не были основаны на Программе и могут обоснованно считаться независимыми и самостоятельными произведениями, то эта Лицензия и её условия не распространяются на эти части, если вы распространяете их как отдельные произведения. Но когда вы распространяете эти части внутри целого, что является работой, основанной на Программе, распространение целого должно попадать под требования этой Лицензии, чьи ограничения для получателей лицензии будут распространяться на целое, и на все части независимо от того, кто их написал.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.   Таким образом, это не следует воспринимать как попытку заявить свои права или оспаривать ваши права на произведение, написанное полностью вами, а, скорее, намерение реализовать право управления распространением производных или коллективных произведений, основанных на Программе.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.   В дополнение, простое объединение другой работы, не основанной на Программе с Программой (или работой, основанной на Программе) на одном томе хранения или средстве распространения не переносит другую работу под действие этой лицензии.



Таким образом, если при создании модуля нет «модифицированных файлов Программы», то нет и модификации Программы.
Для наследования условий GPL необходимо модифицировать файлы Программы и/или поставлять произведение в виде единого установочного комплекта.

Далее в GNU GPLv2 мы читаем определие исходного кода, который модифицируется:

3.…
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
  3.…Исходный код для произведения означает его вид, предпочтительный для выполнения в нем модификаций. Для исполняемого произведения полный исходный код означает все исходные коды для всех модулей, которые он содержит, плюс любые связанные с ней файлы определения интерфейса, плюс сценарии, используемые для управления компиляцией и установкой исполняемого произведения. Тем не менее, в качестве особого исключения, распространяемый исходный код не обязан включать то, что обычно распространяется (в исходных текстах или бинарном виде) с основными компонентами (компилятор, ядро ​​и так далее) операционной системы, на которой работает исполняемое произведение, если сам компонент сопровождает исполняемое произведение.



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

Установка (инсталляция) стороннего компонента в Программу есть модификация конфигурационных файлов, что не делает компонент частью Программы. Следовательно, Лицензия Программы не распространяется на компонент.

Далее. Если части произведения (в случае «Joonla!» — компоненты) не были основаны на исходном коде Программы (не содержат файлов, которые необходимо помечать, как «изменённые», то есть для их создания не использовался «Исходный код для произведения в виде, предпочтительном для выполнения в нём модификаций»), являются независимыми и самостоятельными произведениями и распространяются как отдельные произведения, то действие этой Лицензии и её условий не распространяются на эти части.

Тайное знание GNU GPL. Или То, что от вас скрывали


Процитированный текст лицензии GNU GPL не содержит никаких упоминаний о «затрагивании и зависимости в своей работе от Программы» как условии для наследования Лицензии.

В тексте GNU GPL содержится исчерпывающий перечень того, что считается «исходным кодом» Программы, модификация которого приводит к наследованию Лицензии. Это:

  1. исходные коды для всех модулей, которые он содержит;
  2. любые связанные с ней файлы определения интерфейса;
  3. сценарии, используемые для управления компиляцией и установкой исполняемого произведения.


Всё.

Только модификация этих, и только этих, компонентов приводит к наследованию GNU GPL.

Никакого упоминания об «использование сторонним дополнением команд основной Программы или выполнение кода Программы и стороннего дополнения в одной среде» в лицензии GNU GPL нет.

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

Вывод


Если приложение не содержит модификаций «исходного кода», то «известные части этого произведения могут обоснованно считаться независимыми и самостоятельными произведениями» (GNU GPLv2).

Для «Joomla!», и любой иной программы под лицензией GNU GPLv2, можно создавать компоненты, лицензия которых отличается от GNU GPLv2, при условии, что они будут распространяться отдельно от дистрибутива Joomla!, и не содержат модифицированного кода Joomla!

«Распространяться отдельно от дистрибутива», в свою очередь, означает, что GNU GPL- программа и сторонний компонент могут находиться на одном носителе, и даже в одном архиве. «Распространяться отдельно» означает только одно — отсутствие модификаций в «сценарии, используемом для управления компиляцией и установкой исполняемого произведения» (GNU GPLv2).
И только.

Алексей Евгеньевич Харламенков