Я могу динамично назвать программное обеспечение LGPL/GPL в своем приложении с закрытым исходным кодом? [закрытый]

Это - что-то вроде религиозных дебатов. Оба подхода имеют свои проблемы.

  • Использование instanceof и Вы никогда не можете добавлять значительных участников к подклассам.
  • Использование getClass и Вы нарушаете принцип замены Лисков.

Bloch имеет другой соответствующий совет в Эффективный Java Второй Выпуск :

  • Объект 17: Дизайн и документ для наследования или запрещают его

51
задан Yvette Colomb 29 June 2016 в 00:25
поделиться

5 ответов

Связывание имеет особое значение в компьютерном программировании. Вы вообще не связываете код под GPL или LGPL, вы только порождаете двоичный файл под GPL или LGPL, и GPL и LGPL разрешают это. Ваши пользователи могут свободно использовать этот двоичный файл для целей, предусмотренных его авторами, и могут бесплатно загружать и компилировать исходный код, поэтому все их свободы сохраняются, и вы не нарушаете GPL или LGPL. (Это то, о чем FAQ по GPL говорится как о «общении на расстоянии вытянутой руки».) Это даже не нарушает дух LGPL и GPL; они терпят существование несвободных программ и предполагают, что в какой-то момент несвободные программы породят бесплатные программы, и наоборот. (В противном случае мы не смогли бы запустить GPL ' ed под Windows.)

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

Кроме того, хотя вы специально не спрашивали об этом, имейте в виду, что распространение программного обеспечения под GPL или LGPL вместе с вашим программным обеспечением означает, что вы Требуется включить копию лицензии в программу установки, а также распространять исходный код. Например, если вы упаковываете свое приложение в установщик и включаете копии GPL или LGPL ed в установщике, то вы распространяете код под LGPL или GPL и должны сделать копии исходного кода доступными (онлайн, по почте или на компакт-диске, в зависимости от того, как вы распространяете свое приложение) . Включение ссылки на исходный проект недостаточно (по крайней мере, для версии 2 GPL). Для получения более подробной информации прочтите GPL и LGPL.

59
ответ дан 7 November 2019 в 10:19
поделиться

Исправьте меня, если я ошибаюсь, но я считаю, что ситуация, которую вы описываете, выглядит следующим образом:

  1. У вас есть программа GPL или LGPL, созданная как отдельный исполняемый файл, без каких-либо модификаций, сделанных вами.
  2. Вы создаете приложение с закрытым исходным кодом, которому необходимы функциональные возможности программы GPL или LGPL.
  3. В своей программе вы используете ваша инфраструктура или средства ОС для запуска другого, отдельного исполняемого файла.
  4. Вы используете вывод этого исполняемого файла в своей программе.

Если это так, вы на самом деле не связываете с GPL - или программа под лицензией LGPL. Таким образом, вы не связаны условиями лицензии этой программы. На самом деле это довольно распространенный, хотя и сложный,

3
ответ дан 7 November 2019 в 10:19
поделиться

В общем, это одна из немногих вещей, которые я считаю действительно неприятными для GPL. Что еще хуже, так это то, насколько это может быть заразно. Тем не менее, есть способ обойти это.

Во-первых, начните с определения вашего собственного интерфейса для отправки данных. Он будет использоваться между вашим приложением и отдельной библиотекой, которую вы будете создавать. Не используйте повторно ничего из кода GPL, потому что это подпадает под лицензию GPL. Однако нет ничего плохого в использовании аналогичной структуры. Поскольку этот интерфейс создан вами, он будет подпадать под вашу собственную лицензию. Вы можете использовать его как хотите.

Затем создайте библиотеку-оболочку вокруг кода GPL, которая также будет реализовывать ваш личный интерфейс. Эта библиотека подпадет под лицензию GPL и, следовательно, будет заражена. Однако, хотя это сделает ваш интерфейс доступным для внешнего мира, ваш интерфейс не может быть заражен. Это не производное или что-то в этом роде. Это на 100% ваш собственный код, и вы можете использовать тот же интерфейс для подключения к другой библиотеке.

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

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

Тем не менее, имейте в виду, что здесь вам может потребоваться юридическая консультация. В SO не так много юристов. Но это уловка, которая может обойти эту лицензию GPL.

2
ответ дан 7 November 2019 в 10:19
поделиться

Я не юрист, и это не может быть юридической консультацией. С этим позади нас, ИМХО, если код, на который вы ссылаетесь, является LGPL, вы в ясном понимании. Если технически это GPL, это проблема.

Разница между GPL и LGPL состоит в том, что связывание с кодом LGPL не вызывает необходимости делиться.

0
ответ дан 7 November 2019 в 10:19
поделиться

Вы можете сделать это с помощью программного обеспечения LGPL, но не можете сделать это с программным обеспечением под лицензией GPL.

Раздел 6 LGPL 2.1 о комбинированных произведениях говорит, как вы можете использовать библиотеку в своих программа с закрытым исходным кодом. Вы можете вызывать лицензионную программу LGPL, как вы, и даже можете динамически ссылаться на нее.

В GPL нет такого исключения, когда вы используете программу / библиотеку GPL как часть своей программы, поэтому она воспринимается как неотъемлемая часть вашей программы, тогда вы должны лицензировать все по лицензии, совместимой с GPL. См. эту запись GPL-FAQ .

0
ответ дан 7 November 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: