Проприетарные плагины для программ GPL:а как насчет интерпретируемых языков?[закрыто]
-
09-06-2019 - |
Вопрос
Я разрабатываю приложение с лицензией GPL на Python, и мне нужно знать, позволяет ли GPL моей программе использовать проприетарные плагины.Это что должен сказать FSF по этому вопросу:
Если программа, выпущенная под лицензией GPL, использует подключаемые модули, каковы требования к лицензиям подключаемого модуля?
Это зависит от того, как программа вызывает свои плагины.Если программа использует fork и exec для вызова подключаемых модулей, то подключаемые модули являются отдельными программами, поэтому лицензия на основную программу не предъявляет к ним никаких требований.
Если программа динамически связывает плагины, и они вызывают функции друг у друга и совместно используют структуры данных, мы считаем, что они образуют единую программу, которую следует рассматривать как расширение как основной программы, так и плагинов.Это означает, что плагины должны быть выпущены под лицензией GPL или совместимой с GPL лицензией на свободное программное обеспечение, и что при распространении этих плагинов должны соблюдаться условия GPL.
Если программа динамически связывает подключаемые модули, но связь между ними ограничивается вызовом ‘основной’ функции подключаемого модуля с некоторыми опциями и ожиданием его возврата, это пограничный случай.
Различие между fork / exec и динамическим связыванием, помимо того, что оно является отчасти искусственным, не распространяется на интерпретируемые языки:как насчет плагина Python / Perl / Ruby, который загружается через import
или execfile
?
(редактировать:Я понимаю, почему существует различие между fork / exec и динамическим связыванием, но похоже, что кто-то, кто хотел соответствовать GPL, но шел против "духа" - я этого не делаю - мог просто использовать fork / exec и межпроцессное взаимодействие, чтобы делать практически все).
Лучшим решением было бы добавить исключение к моей лицензии, чтобы явно разрешить использование проприетарных плагинов, но я не могу этого сделать, поскольку использую Qt/PyQt который является GPL.
Решение
он проводит различие между fork / exec и динамическим связыванием, помимо того, что оно является своего рода искусственным,
Я вовсе не думаю, что это искусственно.По сути, они просто проводят разделение в зависимости от уровня интеграции.Если в программе есть "плагины", которые, по сути, запускаются и забываются без интеграции на уровне API, то результирующая работа вряд ли будет считаться производной работой.Вообще говоря, плагин, который просто разветвляется / выполняется, соответствовал бы этим критериям, хотя могут быть случаи, когда это не так.Этот случай особенно применим, если код "плагина" также будет работать независимо от вашего кода.
Если, с другой стороны, код сильно зависит от работы с GPL, такой как интенсивный вызов API или тесная интеграция структуры данных, то, скорее всего, это будет считаться производной работой.Т.е. "плагин" не может существовать сам по себе без продукта GPL, а продукт с установленным этим плагином по сути является производной от продукта GPLed.
Итак, чтобы было немного понятнее, те же принципы можно было бы применить к вашему интерпретируемому коду.Если интерпретируемый код в значительной степени зависит от ваших API (или наоборот), то это будет считаться производной работой.Если это просто скрипт, который выполняется сам по себе с крайне малой интеграцией, то это может быть и не так.
Имеет ли это больше смысла?
Другие советы
@Дэниел
Различие между fork / exec и динамическим связыванием, помимо того, что оно является отчасти искусственным, не распространяется на интерпретируемые языки:как насчет плагина Python / Perl / Ruby, который загружается через import или execfile?
Я не уверен, что различие является искусственный.После динамической загрузки код плагина использует общий контекст выполнения с кодом GPLed.После fork / exec этого не происходит.
В любом случае я бы предположил, что import
ing приводит к запуску нового кода в том же контексте выполнения, что и бит GPLed, и вы должны относиться к нему как к случаю динамической ссылки.Нет?
Каким объемом информации вы делитесь между плагинами и основной программой?Если вы делаете что-то большее, чем просто выполняете их и ждете результатов (не обмениваясь данными между программой и плагином в процессе), то вам, скорее всего, сойдет с рук, что они являются проприетарными, в противном случае они, вероятно, должны были бы быть GPL'd.