Могу ли я динамически вызывать программное обеспечение 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();
Я не изменяю его, я использую только встроенную версию программного обеспечения для Windows.
Википедия говорит:
Ключевой спор, связанный с GPL, заключается в том, может ли программное обеспечение не-GPL быть динамически связано с библиотеками GPL. GPL четко требует, чтобы все производные произведения кода под GPL сами были под лицензией GPL. Хотя понятно, что статическое связывание создает производные работы, неясно, следует ли считать исполняемый файл, который динамически связывается с кодом GPL, производным произведением (см. "Слабое копирование"). Сообщество свободного / открытого программного обеспечения разделено на эту проблему. FSF утверждает, что такой исполняемый файл действительно является производной работой, если исполняемый файл и код GPL "выполняют вызовы функций друг к другу и совместно используют структуры данных", при этом некоторые другие соглашаются (например, Джерри Эпплин), в то время как некоторые (например, Линус Торвальдс) соглашаются, что динамическое связывание может создавать производные работы, но не согласны с обстоятельствами.
Я действительно смущен всеми этими законными вещами. Я бы тоже сделал свой проект LGPL и выпустил исходный код, но это не мое дело.
Итак, вопрос в том, могу ли я использовать его так, как я делаю сейчас, или я буду казнен армией юристов?
5 ответов
Связывание имеет особое значение в компьютерном программировании. Вы вообще не связываете код 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 для точных деталей.
Поправьте меня, если я ошибаюсь, но я считаю, что описанная вами ситуация выглядит следующим образом:
- У вас есть программа GPL или LGPL, собранная как отдельный исполняемый файл, без внесенных вами изменений.
- Вы создаете приложение с закрытым исходным кодом, которое нуждается в функциональности программы GPL или LGPL.
- В вашей программе вы используете свою инфраструктуру или средства ОС для запуска другого отдельного исполняемого файла.
- Вы используете вывод этого исполняемого файла в вашей программе.
Если это так, вы на самом деле не ссылаетесь на программу, лицензированную под GPL или LGPL. Таким образом, вы не связаны условиями лицензии этой программы. На самом деле это довольно распространенный, хотя и сложный, способ избежать проблем с лицензированием таких исполняемых файлов.
Тем не менее, это нарушает дух GPL и LGPL.
В общем, это одна из немногих вещей, которые я считаю по-настоящему неприятными для GPL. Хуже всего то, насколько заразно это может быть. Тем не менее, есть способ обойти это.
Сначала начните с определения собственного интерфейса для отправки данных. Это будет использоваться между вашим приложением и отдельной библиотекой, которую вы будете создавать. Не используйте что-либо из кода GPL, потому что это подпадает под лицензию GPL. Тем не менее, нет ничего плохого в использовании подобной структуры. Поскольку этот интерфейс является вашим собственным созданием, он подпадает под вашу собственную лицензию. Вы можете использовать его так, как вам нравится.
Затем создайте библиотеку-оболочку вокруг кода GPL, которая также будет реализовывать ваш персональный интерфейс. Эта библиотека попадает под лицензию GPL и, таким образом, становится зараженной. Однако, несмотря на то, что ваш интерфейс будет открыт для внешнего мира, он не может быть загрязнен. Это не происходит или что-то еще. Это на 100% ваш собственный код, и вы можете использовать тот же интерфейс для подключения к другой библиотеке.
Эта библиотека-обертка будет служить буфером защиты между вашим собственным кодом и кодом GPL. Ваш собственный код никогда не будет GPL, так как он не использует код GPL напрямую. Интерфейс также будет служить решением для изменения кода GPL другим решением.
Обойти лицензионное ограничение - хитрость, но, поскольку интерфейс принадлежит только вам и вам, GPL будет заблокирован им. Код GPL и код не-GPL будут двумя разными программами, если использовать его таким образом.
Тем не менее, имейте в виду, что вам может понадобиться юридическая консультация здесь. В SO не так много юристов. Но это хитрость, которая может обойти эту лицензию GPL.
Вы можете сделать это с программным обеспечением LGPL, но вы не можете сделать это с лицензионным программным обеспечением GPL.
В разделе 6 LGPL 2.1 о комбинированных работах рассказывается, как вы можете использовать библиотеку в своей программе с закрытым исходным кодом. Вы можете вызывать лицензионную программу LGPL, как и вы, и даже можете динамически ссылаться на нее.
GPL не имеет такого исключения, когда вы используете программу / библиотеку GPL как часть вашей программы, так что она воспринимается как неотъемлемая часть вашей программы, тогда вы должны лицензировать все под лицензией, совместимой с GPL. Смотрите эту запись GPL-FAQ.
Я не юрист, и это не может быть юридической консультацией. Учитывая это, IMHO, если код, на который вы ссылаетесь, - это LGPL, вы в чистом виде. Если это GPL технически, то это проблема.
Разница между GPL и LGPL в том, что связывание с кодом LGPL не вызывает необходимости делиться.