Статическая ссылка Qt с версией с открытым исходным кодом

Я разрабатываю приложение с открытым исходным кодом Qt. Поскольку я не хочу распространять распространяемые Microsoft Visual Visual C (++), я хотел бы использовать статическую версию Qt. Информация о лицензировании Qt сообщает, что я должен "разработать" с коммерческой лицензией Qt, если я хочу использовать статическое связывание в своем приложении, хотя, когда я использую команда configure -static для создания статической библиотеки Qt в командной строке спрашивает меня, использую ли я коммерческую версию с открытым исходным кодом Qt.

Итак, можно построить Qt с версией с открытым исходным кодом? Нужно ли мне коммерческое издание использовать статические ссылки? Я не буду продавать приложение.

Ответ 1

EDIT Апрель 2016

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

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

На веб-сайте Qt есть два часто задаваемых вопроса, и ни в одном из них прямо не указано, что вы не можете этого сделать. Так же, как не указано, что вы можете. Однако есть, по крайней мере, несколько случаев, подразумевающих туманную юридическую угрозу в случае, если вы это делаете. Я думаю, что есть хорошее объяснение для всех этих людей - они не могут сказать, что вы не можете это сделать, не публикуя практической лжи, которая может также иметь негативные юридические последствия для них, и они готовы отказать в этом, а не поощряйте его, поскольку он может заставить больше людей покупать коммерческую лицензию.

Короче говоря, да, вы можете, и вы определенно должны, поскольку в последнее время Qt стал живым адом для развертывания, плюс Qt 5.7 в статической сборке, QML файлы аккуратно заправляются в исполняемом файле, а не в файловой системе, для любого, кто может вмешаться. Просто убедитесь, что:

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

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

Update:

Вот выдержка из Часто задаваемые вопросы по GNU:

В целях соблюдения LGPL (любая существующая версия: v2, v2.1 или v3):

(1) Если вы статически ссылаетесь на библиотеку LGPL'd, вы также должны предоставить свое приложение в объекте (не обязательно в источнике) формат, чтобы пользователь имел возможность изменять библиотеку и relink приложение.

Это говорит об этом довольно ясно.


Старый, оригинальный ответ:


Можно создавать Qt статически, пока ваше приложение является открытым исходным кодом, и вы предоставляете источник. Если вы хотите, чтобы ваш источник был закрыт, вам либо нужна дорогая коммерческая лицензия, либо вам нужно использовать динамическое соединение.

BTW, использующий статическую сборку Qt, довольно хорош, для Qt5 я получаю около 7-8 МБ исполняемого файла без внешних зависимостей, что намного лучше, чем 20 + МБ дополнительной dll, которую вы должны отправить с динамически связанным приложением.

Для получения дополнительной информации вы можете посмотреть это видео: Правильный выбор лицензии при разработке с Qt

В целом, это можно сделать? 100% да. Должно ли это быть сделано? Это зависит, для личных/тестирования/обучения цели на 100% нормально, однако, если вы планируете распространять программное обеспечение производственного класса, будь то коммерчески или нет, с открытым исходным кодом или нет, вам лучше сначала обратиться к юристу. Весь предмет излишне сложный, при условии его интерпретации, так что консультация с адвокатом становится дороже, чем дорогая коммерческая лицензия.

Ответ 2

Ответ Да, если вы хотите открыть исходный код своего приложения.

В соответствии с собственной интерпретацией лицензий Qt-Project, которые они используют, если вы динамически связываетесь с библиотеками Qt, ваше приложение может быть либо закрытым, либо открытым. Однако, если вы статически ссылаетесь, ваше приложение подчиняется условиям LGPL.

Точный язык, который использует проект Qt, следующий:

В случае динамической компоновки возможно, но не обязательно, поддерживать исходного кода приложения, если это "работа, которая использует библиотека" - обычно достигается посредством динамической компоновки библиотеки. В случае статической компоновки библиотеки приложение может больше не будет "работой, которая использует библиотеку" и, таким образом, LGPL. Рекомендуется либо динамически связываться, либо предоставлять исходный код приложения для пользователя под LGPL.

(http://qt-project.org/legal.html)

В некоторых других ответах предложение о том, что ситуация "совсем не ясна", просто не соответствует действительности. Проект Qt пытался в полной мере понять, в каких условиях допустимо использование лицензии LGPL, а статическое связывание - один из тех, пока приложение также LGPL.


Поскольку исходный вопрос указывает на некоммерческий (не обязательно открытый исходный код), то апеллятору необходимо будет решить, могут ли они разрешить распространение под LGPL (или GPL по расширению, так как на приведенной выше странице также указано, что "LGPL можно преобразовать в GNU General Public License" ).