Проприетарные плагины для программ GPL:а как насчет интерпретируемых языков?[закрыто]

StackOverflow https://stackoverflow.com/questions/31412

Вопрос

Я разрабатываю приложение с лицензией 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 этого не происходит.

В любом случае я бы предположил, что importing приводит к запуску нового кода в том же контексте выполнения, что и бит GPLed, и вы должны относиться к нему как к случаю динамической ссылки.Нет?

Каким объемом информации вы делитесь между плагинами и основной программой?Если вы делаете что-то большее, чем просто выполняете их и ждете результатов (не обмениваясь данными между программой и плагином в процессе), то вам, скорее всего, сойдет с рук, что они являются проприетарными, в противном случае они, вероятно, должны были бы быть GPL'd.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top