Партнеры прислали исходные коды проекта [для дальнейшего развития]. Часть кодов есть, часть отсутствует, вместо них приписка, в буквальном переводе на русский: «часть исходных кодов отсутствует, т.к. содержит открытые исходные коды, которые были изменены и не могут распространяться (cannot be distributed)». Плюс дальше предложение самому скачать эти коды и изменить в соответствии с прилагаемыми описаниями. Это я чего-то не понимаю в открытых лицензиях или они? Или же распространение этих кодов повлечет наложение на них каких-либо еще обязательств? Или из меня просто дурака строят? В общем не пойму никак…
PS Некоторый нюанс в том, что коды не на software, а на hardware, может в этом какой-то тайный смысл.
GPL позволяет изменять исходные коды для собственных нужд и не распространять изменения. Если же изменённый код распространяется, то он должен распространяться под GPL. Видимо, партнёры не хотят распространять код под GPL и, следовательно, не могут распространять его вообще.
Вы неверно понимаете условия GPL. Исходный код со всеми изменениями требуется распространять под GPL, но только в том случае, если сама программа распространяется. Если же программа (или железка) используется только для внутренних нужд и не распространяется за пределами организации, то и исходные коды распространять не требуется.
Так в том-то и дело, что принятие лицензии не означает, что изменённый исходный код должен распространяться. Лицензия налагает условия лишь на распространение (conveying) программы в виде исходных кодов или исполнимых файлов (параграфы 4-6). Нет распространения — нет ограничений.
Это сделано, чтобы каждый пользователь мог не только использовать, но и модифицировать полученную программу как ему надо, не требуя от него ничего.
Вот это-то как раз не очевидно. Лазейка сомнительная, бесспорно. Но по схожему принципу распространяются, например, закрытые драйвера Nvidia для Linux. По идее — это модификация ядра (derivative work), а значит должна быть применена GPL. Но по факту — исходных кодов нет.
Так, вернёмся к исходному вопросу. Где написано: каким образом взаимодействует та часть проекта, что с исходниками с той частью, на которую исходников нет? Может это разные программы совершенно? Если так, то GPL не распространяется на предоставленный код.
Что касается Nvidia: драйверы взаимодействуют с ядром. Без ядра они бесполезны. Значит — они дополняют ядро. Значит — они его модификация. Значит, на них должно распространяться GPL (ибо ядро — под GPL, а не под LGPL). Или они как-то иначе взаимодействуют, не через вызовы функций ядра?
Что касается Nvidia: драйверы взаимодействуют с ядром. Без ядра они бесполезны. Значит — они дополняют ядро. Значит — они его модификация.
lorus, эти драйвера были разработаны с нуля и под винду. А потом уже адаптированы для linux. По вашей логике, пользовательские приложения — тоже модификация ядра, ведь без него они бесполезны.
Если бы ядро было полностью под GPL, и между ним и приложениями не было бы прокладки из библиотек под более пермиссивными лицензиями типа LGPL, то да — все пользовательские приложения пришлось бы лицензировать под GPL. И это не моя логика. Такова логика лицензии. И то, что драйверы были разработаны как-то ещё ничего не меняет: чтобы взаимодействовать с GPL нужно следовать правилам GPL. Точка.
чтобы взаимодействовать с GPL нужно следовать правилам GPL
чтобы взаимодействовать с GPL нужно всего лишь уметь работать с предоставленными интерфейсами. Вовсе не прослойка в виде glibc делает возможными проприетарные программы на GPL-линуксе.
Такова логика лицензии
Логика лицензии в том, что автор предоставляет 4 свободы в отношении кода всем, кто так или иначе пользуется его кодом, даже если он кем-либо модифицирован. Эти свободы, однако, не распространяются на код других авторов. Так, например, сборка с помощью gcc не делает ваш код автоматически GPL.
Не понял ваш комментарий про интерфейсы. GPL определяет правила взаимодействия с программными интерфейсами. Этим правилам и требуется следовать. Что не так? Как пояснили выше, взаимодействие драйверов Nvidia с ядром возможно без открытия их исходных кодов лишь потому, что из этих правил сделано исключение (EXPORT_SYMBOL вместо EXPORT_SYMBOL_GPL). Программы же взаимодействуют не с ядром, а с glibc прежде всего. Вопрос же взаимодействия GPL-ядра с LGPL-библиотекой также урегулирован с помощью исключений из GPL. В чём я не прав?
GPL определяет правила взаимодействия с программными интерфейсами
Покажите, где именно? Я вот вижу, что GPL определяет только правила создания производных произведений и их распространения. Но в случае NVIDIA, ядро не изменяется, драйвер написан независимо, а значит нет никакого производного произведения.
Программы же взаимодействуют не с ядром, а с glibc прежде всего… В чём я не прав?
Ровно в этом. Существует 100500 проприетарных библиотек C, с которыми можно собраться статически. В этом случае программы взаимодействуют с ядром, через системные вызовы.
То есть вы считаете, что драйвер независим от ядра? То есть он пользуется функциями ядра напрямую, ядро обращается к нему напрямую, но это не делает их вместе производной работой? Очень интересно. Что тогда делает? То есть можно взять любую библиотеку выпущенную под GPL, использовать её, например, в проприетарной программе и сказать: это независимая работа, поскольку, дескать, мы ни строчки в самой библиотеке не поменяли, а потому GPL к нашей программе неприменим? Зачем же тогда все эти LGPL, EXPORT_SYMBOL, GPL class extensions...?
Вот как GPL это определяет:
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
Что касается glibc — хорошо, есть другие стандартные библиотеки, есть программы взаимодействующие с ядром напрямую. Суть не в этом. Суть в наличии исключений из GPL. Без них нет способа проприетарному коду использовать GPL код. Вот я о чём.
Не знаю, nvidia не распространяет ядро, только модуль. Вот что об этом говорит Торвальдс:
However, copyright law obviously
hinges on the definition of «derived work», and as such anything can
always be argued on that point.
I personally consider anything a «derived work» that needs special hooks
in the kernel to function with Linux (ie it is _not_ acceptable to make a
small piece of GPL-code as a hook for the larger piece), as that obviously
implies that the bigger module needs «help» from the main kernel.
Similarly, I consider anything that has intimate knowledge about kernel
internals to be a derived work.
What is left in the gray area tends to be clearly separate modules: code
that had a life outside Linux from the beginning, and that do something
self-containted that doesn't really have any impact on the rest of the
kernel. A device driver that was originally written for something else,
and that doesn't need any but the standard UNIX read/write kind of
interfaces, for example.
Суть в наличии исключений из GPL. Без них нет способа проприетарному коду использовать GPL код
Вот ещё пара строк оттуда:
The «user program» exception is not an exception at all, for example, it's
just a more clearly stated limitation on the «derived work» issue. If you
use standard UNIX system calls (with accepted Linux extensions), your
program obviously doesn't «derive» from the kernel itself.
Вопрос породил обширную дискуссию. Может там вариант в том, что они взяли ПО, и написали к нему свои библиотеки или компоненты. Не модифицировали части кода, а именно написали свои, взамен тех, что предлагались в дистрибутиве. И именно эти компоненты, они относят как коммерческую тайну своей организации и не хотят распространять.
По условиям лицензии, они передали вам весь исходный код, который подпадает под действие GPL v3, и обозначили места, где используют внутренние библиотеки, дав вам ссылки, на первоначальный дистрибутив.
В данном случае нарушений условий не было бы.
Кстати, вот ещё один интересный момент. Если вы поступите как они хотят: то есть скачаете исходный GPL код и модифицируете его согласно инструкциям, то результат подпадает по GPL. Это значит, что вы имеете полное право передать исходники не только заказчику, но и кому угодно ещё, то есть выложить в открытый доступ. В определённой ситуации вы даже будете обязаны это сделать. И запретить они вам этого не могут (по условиям GPL). Так что их перестраховка с невыдачей вам исходников бесполезна в любом случае.