среда, 24 февраля 2016 г.

[prog] Любопытный момент в FAQ-е по лицензиям Qt

Qt -- это один из лучших C++ных инструментов для разработки GUI-приложений, не шибко требовательных к производительности. Главная проблема с Qt состоит в очень неслабой стоимости коммерческой лицензии на Qt.

В принципе, есть LGPL версия Qt, которая позволяет вести разработку закрытого софта не покупая коммерческую лицензию на Qt. Но вскоре Qt переводит практически все свои компоненты на три лицензии (GPLv3, LGPLv3 и коммерческую), а по поводу LGPLv3 в FAQ-е Qt есть любопытный абзац:

The user of your application has to be able to re-link your application against a different or modified version of the Qt library. With LGPLv3 it is also explicitly stated that the user needs to be able to run the re-linked binary on it’s intended target device. It is your obligation to provide the user with all necessary tools to enable this process. For embedded devices, this includes making the full toolchain used to compile the library available to users. For parts licensed under LGPLv3 you are obliged to provide full instructions on how to install the modified library on the target device (this is not clearly stated with LGPLv2.1, although running the application against the modified version of the library clearly is the stated intention of the license).

Т.е. у пользователя вашего приложения должна быть возможность перелинковать ваше приложение с другой версией Qt (в том числе и с модифицированной версией Qt). И эта возможность должна быть не просто продекларирована, но вы, как поставщик софта, должны обеспечить пользователю эту возможность (в частности, снабдив пользователя полным тулчейном для сборки приложения).

Имхо, когда используется динамическая линковка приложения с Qt, обеспечение данного пункта, в каких-то случаях будет происходить автоматически. Скажем, заменяем мы QtCore5.dll другой версией и все. А вот в случае со статической линковкой уже веселее.

Однако, еще более любопытно упоминание в требованиях возможности перелинковать приложение с модифицированной версией Qt. Вот тут простой замены dll/so может не хватить.

Допустим, мое приложение использует LGPL-ную версию Qt 5.5.1. Какой-то пользователь берет Qt 5.5.1 и модифицирует в нем, скажем, QListWidget. Всего навсего добавляет в QListWidget еще одно поле.

Соответственно, размер QListWidget поменяется и просто так перелинковать мое приложение с обновленной динамической библиотекой Qt-5.5.1-qlistwidget-patched уже будет нельзя. Нужно будет перекомпилировать исходники приложения. А раз простой перелинковкой дело не ограничивается, значит приложение не выполняет требований лицензии LGPLv3...

Или я чего-то не понимаю и здесь все проще?

Отправить комментарий