Есть ли модифицированная лицензия LGPL, которая позволяет статическое связывание?

21

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

...

г) Выполните одно из следующих действий:

0) Передать Минимальный Соответствующий Источник в соответствии с условиями настоящей Лицензии и Код Соответствующего Приложения в форме, подходящей и на условиях, которые позволяют пользователю рекомбинировать или связывать Приложение с модифицированной версией Связанной версии для создания модифицированная комбинированная работа, в порядке, указанном в разделе 6 GNU GPL для передачи соответствующего источника.

1) Используйте подходящий механизм разделяемой библиотеки для связи с библиотекой. Подходящим механизмом является тот, который (а) использует во время выполнения копию библиотеки, уже имеющейся в компьютерной системе пользователя, и (б) будет правильно работать с модифицированной версией библиотеки, совместимой по интерфейсу с связанной версией.

...

Однако в некоторых случаях это может представлять значительные трудности. В частности, программы на Haskell почти всегда статически компилируются. Более того, компилятор выполняет межмодульную оптимизацию, поэтому невозможно вынуть часть кода и заменить его другой. Поэтому очень сложно удовлетворить это условие. (Смотрите эту ссылку на Haskell Wiki.)

Динамическое связывание было бы решением, но во многих случаях это невозможно. Например:

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

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

(Также мне было бы интересно узнать, есть ли непредвиденные последствия такой модификации LGPL.)

Петр Пудлак
источник
Вы не можете динамически связывать внешние библиотеки в Haskell? Это должно быть чертовски неудобно.
Роберт Харви
2
Если весь ваш проект FOSS, то это может быть не проблема. Направьте их на источники и дайте им разобраться! :-)
Питер Роуэлл
2
Что отличит эту лицензию от лицензий без авторского лева?
2
@delnan Есть много других вещей в LGPL, которые часто желательны. Например, он требует, чтобы любая модификация была (L) GPL, или запрещает тивоизацию .
Петр Пудлак
Лицензия wxWindows является настолько официальной, насколько это возможно, учитывая, что она одобрена OSI .
Иоахим Зауэр

Ответы:

12

wxwidgets лицензируется по существу = LGPL + статическое связывание

... по сути, L-GPL (библиотека Public Public License), за исключением того, что производные работы в двоичном виде могут распространяться на собственных условиях пользователя. Это решение, которое удовлетворяет тех, кто желает создавать программное обеспечение под GPL с использованием wxWidgets, а также тех, кто производит проприетарное программное обеспечение.

wxWidgets является сертифицированным программным обеспечением с открытым исходным кодом. Участниками обсуждения, которые привели к этому решению, являются люди из Abisource , Роберт Роблинг, Джулиан Смарт, Маркус Флек, Карстен Баллуедер и некоторые советы Ричарда Столлмана. Ричард подтвердил, что новая лицензия совместима с приложениями под GPL. Тем не менее, нет никаких существенных ограничений на проприетарные приложения.

Лицензия wxWindows была одобрена Инициативой Open Source , и вы можете найти лицензию на их сайте здесь ...

Мартин Беккет
источник
0mq также лицензируется под LGPL с явным статическим исключением связи.
Тревор Пауэлл
4

IANAL, но меня убеждают, что одним из решений является предоставление объектных файлов для деталей, не принадлежащих LGPL. Таким образом, пользователь может повторно связать программу и, таким образом, может изменить часть LGPL, выполняя требования LGPL.

Другими словами, вам нужно иметь исходный пакет с исходными кодами LGPL и скомпилированными объектными файлами с кодом не-LGPL. Очевидно, что вам необходимо предоставить объектные файлы для каждой архитектуры, для которой вы выпускаете двоичные файлы, но я не думаю, что это большая проблема.

С точки зрения разработки, простейшим может быть только то, что система сборки будет одновременно собирать исходный пакет при сборке двоичного файла для распространения.

Хайд
источник
у вас есть реальный сценарий, в котором это было сделано?
knocte
3

Я нашел один с Google: лицензия OpenScales

OpenScales выпущен в соответствии с версией 3 Малой общественной лицензии GNU (LGPL, доступна здесь ), за исключением исключения статического связывания (см. Ниже) ...

В дополнение к тексту лицензии LGPL к OpenScales применяются исключения из условий LGPL:

В качестве специального исключения для Малой общедоступной лицензии GNU версии 3 вы можете передать третьему лицу исполняемый файл из комбинированного произведения, который статически или динамически связывает части этой библиотеки в исполняемом файле, передавая минимальный соответствующий источник, но без необходимости передавать соответствующий код приложения в соответствии с разделом 4d0 Малой общедоступной лицензии GNU, при условии, что вы используете неизмененную публично распространяемую версию библиотеки. Это исключение не лишает законной силы любые другие причины, по которым исполняемый файл может быть охвачен Стандартной общедоступной лицензией GNU или Стандартной общедоступной лицензией GNU.

Хотя это не стандартно, и я не знаю, существует ли он.

Minthos
источник
1

Как бы вы продолжали гарантировать свободу пользователей? Я полагаю, что «правильный» ответ - статически связать прокладку, которая динамически загружает библиотеку.

stonemetal
источник
Да, это лучшее решение. Но в некоторых случаях динамическое связывание невозможно. Некоторые языки не имеют такой возможности. Или некоторые платформы не имеют такой возможности.
Петр Пудлак
На самом деле линкеры делают именно это, когда вы динамически ссылаетесь на библиотеку.
Кальмарий