GNU Lesser General Public License ( LGPL ) — это лицензия на свободное программное обеспечение , опубликованная Фондом свободного программного обеспечения (FSF). Лицензия позволяет разработчикам и компаниям использовать и интегрировать программный компонент, выпущенный под лицензией LGPL, в свое собственное (даже проприетарное ) программное обеспечение, при этом условия строгой лицензии с авторским левом не требуют выпуска исходного кода своих собственных компонентов. Однако любой разработчик, который изменяет компонент, на который распространяется действие LGPL, обязан сделать свою модифицированную версию доступной под той же лицензией LGPL. Для проприетарного программного обеспечения код LGPL обычно используется в форме разделяемой библиотеки , поэтому существует четкое разделение между проприетарными компонентами и компонентами LGPL. LGPL в основном используется для библиотек программного обеспечения , хотя он также используется некоторыми автономными приложениями.
LGPL была разработана как компромисс между строгим авторским левом Стандартной общественной лицензии GNU (GPL) и более либеральными лицензиями, такими как лицензии BSD и MIT License . Слово «Меньшее» в названии показывает, что LGPL не гарантирует конечному пользователю полную свободу в использовании программного обеспечения; он гарантирует свободу модификации только компонентов, лицензированных по LGPL, но не каких-либо проприетарных компонентов.
Лицензия первоначально называлась GNU Library General Public License и была впервые опубликована в 1991 году, и ей был присвоен номер версии 2 для соответствия версии 2 GPL. LGPL была незначительно переработана в версии 2.1, опубликованной в 1999 году, когда она была переименована в GNU Lesser General Public License, чтобы отразить позицию FSF, согласно которой не все библиотеки должны ее использовать. Версия 3 LGPL была опубликована в 2007 году как список дополнительных разрешений, применимых к версии 3 GPL.
Помимо термина «произведение, основанное на Программе» GPL, в LGPL версии 2 введены два дополнительных поясняющих термина «произведение, основанное на библиотеке» и «произведение, использующее библиотеку». [4] В LGPL версии 3 эти условия частично исключены.
Основное различие между GPL и LGPL заключается в том, что последняя позволяет связать произведение (в случае библиотеки, «используемое») с программой, не подпадающей под (L)GPL, независимо от того, лицензирована ли она под лицензией 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 года «Почему вам не следует использовать Меньшую GPL для вашей следующей библиотеки» Ричард Столлман объяснил, что, хотя LGPL не устарела , не обязательно использовать LGPL для всех библиотек, поскольку использование GPL может дать преимущество разработчикам свободного программного обеспечения. . [5]
С другой стороны, FSF иногда выступает за еще менее строгие лицензии. Например, Столлман одобрил использование лицензии в стиле BSD проектом Vorbis в своих библиотеках в 2001 году. [10]
В лицензии используется терминология, которая в основном предназначена для приложений, написанных на языке программирования C или его семействе. Franz Inc., разработчики Allegro Common Lisp , опубликовали собственную преамбулу к лицензии для пояснения терминологии в контексте Lisp . LGPL с этой преамбулой иногда называют LLGPL. [11]
Кроме того, в Ada есть специальная функция — дженерики, которая может побудить к использованию модифицированной стандартной общественной лицензии GNAT (GMGPL): она позволяет коду связываться с модулями, охватываемыми GMGPL, или создавать экземпляры модулей, охватываемых GMGPL, без того, чтобы сам код попадал под действие GPL.
Шаблоны C++ и библиотеки только заголовков имеют ту же проблему, что и дженерики Ada. Версия 3 LGPL рассматривает такие случаи в разделе 3. [12]
Возникла некоторая обеспокоенность по поводу возможности наследования объектно-ориентированных классов в коде, лицензируемом LGPL, кодом, отличным от (L)GPL. Разъяснения даны на официальном сайте GNU: