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

Я хочу использовать инструмент (ffmpeg), который находится под GNU Lesser General Public License, версия 2.1 GNU General Public License (GPL) версия 2 для некоторых компонентов.

Чтобы сделать это, я называю это только в своем программном обеспечении как таковом:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("lgplSoftware.exe", myParams);
p.Start();

Я не меняю его, я использую только встроенную версию программного обеспечения для окон.


Wikipedia говорит:

Основной спор, связанный с GPL, может ли программное обеспечение, не являющееся GPL, динамически связан с библиотеками GPL. В GPL ясно, что все производные работы кода под GPL сами должны быть под GPL. Хотя понятно, что статические связывание производит производные работы, оно неясно, является ли исполняемый файл динамически связывается с кодом GPL следует рассматривать как производную работу (см. Слабые Copyleft). свободного сообщества с открытым исходным кодом по этому вопросу. FSF утверждает что такой исполняемый файл действительно является производная работа, если исполняемый файл и GPL-код "выполняет вызовы функций для каждого другие и разделять структуры данных" с некоторыми другими, соглашающимися (например, Джерри Эпплин), в то время как некоторые (например, Линус Торвальдс) согласны с тем, что динамические связывание может создавать производные работы, но не согласны с обстоятельствами.


Я действительно смущен всеми этими юридическими вещами. Я бы тоже сделал свой проект LGPL и выпустил источник, но это не для меня.

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Однако это нарушает дух GPL и LGPL.

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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