GNU Lesser General Public License ( LGPL ) — это лицензия свободного программного обеспечения , опубликованная Free Software Foundation (FSF). Лицензия позволяет разработчикам и компаниям использовать и интегрировать программный компонент, выпущенный под LGPL, в свое собственное (даже проприетарное ) программное обеспечение без необходимости в соответствии с условиями строгой лицензии copyleft публиковать исходный код своих собственных компонентов. Однако любой разработчик, который изменяет компонент, подпадающий под LGPL, обязан сделать свою измененную версию доступной под той же лицензией LGPL. Для проприетарного программного обеспечения код под LGPL обычно используется в форме общей библиотеки , так что существует четкое разделение между проприетарными и LGPL компонентами. LGPL в основном используется для программных библиотек , хотя она также используется некоторыми автономными приложениями.
LGPL была разработана как компромисс между сильным копилефтом GNU General Public License (GPL) и более разрешительными лицензиями, такими как лицензии BSD и MIT License . Слово «Lesser» в названии показывает, что LGPL не гарантирует конечному пользователю полную свободу использования программного обеспечения; она гарантирует только свободу модификации компонентов, лицензированных по LGPL, но не каких-либо проприетарных компонентов.
Первоначально лицензия называлась GNU Library General Public License и была впервые опубликована в 1991 году, и приняла номер версии 2 для паритета с GPL версии 2. LGPL была немного пересмотрена в версии 2.1, опубликованной в 1999 году, когда она была переименована в GNU Lesser General Public License, чтобы отразить позицию FSF, что не все библиотеки должны ее использовать. Версия 3 LGPL была опубликована в 2007 году как список дополнительных разрешений, применяемых к GPL версии 3.
В дополнение к термину «работа, основанная на Программе» из GPL, версия 2 LGPL ввела два дополнительных поясняющих термина: «работа, основанная на библиотеке» и «работа, использующая библиотеку». [4] Версия 3 LGPL частично исключила эти термины.
Основное различие между GPL и LGPL заключается в том, что последняя позволяет связывать работу с (в случае библиотеки, «используемой») не-(L)GPL программой, независимо от того, лицензирована ли она по лицензии семейства GPL или другим лицензиям. [5] В LGPL 2.1 не-(L)GPL программа может затем распространяться на любых условиях, если она не является производной работой . Если это производная работа, то условия программы должны позволять «модификацию работы для собственного использования заказчиком и обратную разработку для отладки таких модификаций». Является ли работа, использующая программу LGPL, производной работой или нет, является юридическим вопросом. Автономный исполняемый файл, который динамически связывается с библиотекой через .so , .dll или аналогичный носитель, как правило, считается не производной работой, как определено LGPL. Он подпадает под определение «работы, использующей Библиотеку». Пункт 5 версии LGPL 2.1 гласит:
По сути, если это «работа, которая использует библиотеку», то должно быть возможно связать программное обеспечение с более новой версией программы, защищенной LGPL. Наиболее часто используемый метод для этого — использовать «подходящий механизм общей библиотеки для связывания». В качестве альтернативы, статически связанная библиотека разрешена, если предоставлены либо исходный код, либо связываемые объектные файлы. [6]
Одной из особенностей LGPL является разрешение сублицензировать [7] в рамках GPL любую часть программного обеспечения, полученную в рамках LGPL (см. раздел 3 LGPL версии 2.1 и раздел 2 вариант b LGPL версии 3). Эта особенность позволяет напрямую повторно использовать код LGPL в библиотеках и приложениях GPL.
Версия 3 LGPL изначально несовместима с версией 2 GPL. Однако работы, использующие последнюю, которые дали разрешение на использование более поздней версии GPL, совместимы: [8] работа, выпущенная под GPLv2 «или любой более поздней версией», может быть объединена с кодом из библиотеки LGPL версии 3, при этом объединенная работа в целом подпадает под условия GPLv3. [9]
Прежнее название GNU Library General Public License создавало впечатление, что FSF рекомендовал всем библиотекам программного обеспечения использовать LGPL, а программам — GPL. В эссе 1999 года « Почему вам не следует использовать Lesser GPL для вашей следующей библиотеки» Ричард Столлман объяснил, что, хотя LGPL не была отменена , не обязательно использовать LGPL для всех библиотек, поскольку использование GPL может дать преимущество разработчикам свободного программного обеспечения. [5]
Лицензия использует терминологию, которая в основном предназначена для приложений, написанных на языке программирования C или его семействе. Franz Inc., разработчики Allegro Common Lisp , опубликовали собственную преамбулу к лицензии, чтобы прояснить терминологию в контексте Lisp . LGPL с этой преамбулой иногда называют LLGPL. [10]
Кроме того, в Ada есть специальная функция — дженерики, которая может побудить к использованию модифицированной универсальной общественной лицензии GNAT (GMGPL): она позволяет коду связываться с модулями, подпадающими под действие GMGPL, или создавать их экземпляры, при этом сам код не попадает под действие GPL.
Шаблоны C++ и библиотеки только для заголовков имеют ту же проблему, что и обобщенные Ada. Версия 3 LGPL рассматривает такие случаи в разделе 3. [11]
Возникли некоторые опасения по поводу пригодности объектно-ориентированных классов в коде под лицензией LGPL, наследуемых не-(L)GPL кодом. Разъяснение дано на официальном сайте GNU: