LINUX.ORG.RU
ФорумTalks

Кто они, коммерческие пользователи Qt?

 , ,


0

6

https://www.opennet.ru/opennews/art.shtml?num=54352

Туука Турунен (Tuukka Turunen), директор по разработке в компании Qt Company, объявил об ограничении доступа к репозиторию с исходными текстами LTS-ветки Qt 5.15, выпущенной в мае прошлого года. Ограничение введено в соответствии с озвученным год назад планом, подразумевающим общедоступную публикацию кода изменений в LTS-ветках только до формирования очередного значительного выпуска.

В декабре был сформирован релиз Qt 6.0, код которого остаётся доступен и в ближайшие дни ожидается публикация первого корректирующего обновления 6.0.1. Доступ к коду с обновлениями для ветки Qt 5.15 с 5 января смогут получить только обладатели коммерческой лицензии. Публичный доступ ко всем ранее опубликованным веткам Qt 5.15 будет сохранён, но новые коммиты будут добавляться за закрытыми дверями. Исключение сделано только для кода модулей Qt WebEngine и Qt Script, которые имеют привязку к внешним зависимостям под лицензией LGPL.

Просто стало интересно, кто им платит за лицензию? В каких программах используется коммерческий Qt?


Ответ на: комментарий от Xa

Это с включенным icu? Раньше он добавлял ~25mb ( icudt52 (23 Mb), icuin52 (3Mb) and icuuc52 (2Mb)) . Даж багрепорт заводили (QTBUG-38259). Потом уго убрали из базовой поставки. Но вот в свежем QTBUG-78942 говорят что при статической сборке он всё равно линкует icu.

CrazyAlex25 ★★★
()
Ответ на: комментарий от CrazyAlex25

Да вроде динамически…

# вообще собирал так:
./configure -skip qtdeclarative -skip qtquicktimeline -skip qtshadertools -skip qtquickcontrols2 -skip qtdoc -skip qtquick3d -skip qttranslations -skip qttools -skip qtwayland -static -prefix /opt/qt/6.0.0_static

# ldd helloworld
        linux-vdso.so.1 (0x00007ffcb27e4000)
	libxkbcommon-x11.so.0 => /lib/x86_64-linux-gnu/libxkbcommon-x11.so.0 (0x00007fa4d8d12000)
	libxcb-icccm.so.4 => /lib/x86_64-linux-gnu/libxcb-icccm.so.4 (0x00007fa4d8d0b000)
	libxcb-image.so.0 => /lib/x86_64-linux-gnu/libxcb-image.so.0 (0x00007fa4d8b06000)
	libxcb-keysyms.so.1 => /lib/x86_64-linux-gnu/libxcb-keysyms.so.1 (0x00007fa4d8b01000)
	libxcb-randr.so.0 => /lib/x86_64-linux-gnu/libxcb-randr.so.0 (0x00007fa4d8aee000)
	libxcb-render-util.so.0 => /lib/x86_64-linux-gnu/libxcb-render-util.so.0 (0x00007fa4d8ae7000)
	libxcb-shm.so.0 => /lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fa4d8ae0000)
	libxcb-sync.so.1 => /lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007fa4d8ad6000)
	libxcb-xfixes.so.0 => /lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007fa4d8acc000)
	libxcb-render.so.0 => /lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007fa4d8abd000)
	libxcb-shape.so.0 => /lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007fa4d8ab8000)
	libxcb-xkb.so.1 => /lib/x86_64-linux-gnu/libxcb-xkb.so.1 (0x00007fa4d8a9a000)
	libSM.so.6 => /lib/x86_64-linux-gnu/libSM.so.6 (0x00007fa4d8a8d000)
	libICE.so.6 => /lib/x86_64-linux-gnu/libICE.so.6 (0x00007fa4d8a6f000)
	libxcb-xinput.so.0 => /lib/x86_64-linux-gnu/libxcb-xinput.so.0 (0x00007fa4d8a4b000)
	libxcb-glx.so.0 => /lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007fa4d8a2e000)
	libgtk-3.so.0 => /lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007fa4d827d000)
	libgdk-3.so.0 => /lib/x86_64-linux-gnu/libgdk-3.so.0 (0x00007fa4d8178000)
	libpango-1.0.so.0 => /lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007fa4d8127000)
	libgobject-2.0.so.0 => /lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fa4d80c7000)
	libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fa4d80b3000)
	libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007fa4d80ae000)
	libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa4d8084000)
	libEGL.so.1 => /lib/x86_64-linux-gnu/libEGL.so.1 (0x00007fa4d806f000)
	libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fa4d8035000)
	libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fa4d7f30000)
	libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fa4d7e71000)
	libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fa4d7e2a000)
	libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa4d7ced000)
	libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007fa4d7c9c000)
	libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007fa4d7c58000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa4d7c3c000)
	libicui18n.so.66 => /lib/x86_64-linux-gnu/libicui18n.so.66 (0x00007fa4d793d000)
	libicuuc.so.66 => /lib/x86_64-linux-gnu/libicuuc.so.66 (0x00007fa4d7757000)
	libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007fa4d76d4000)
	libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007fa4d762b000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa4d7623000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fa4d74fa000)
	libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fa4d74c6000)
	libOpenGL.so.0 => /lib/x86_64-linux-gnu/libOpenGL.so.0 (0x00007fa4d749a000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa4d7477000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa4d7296000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa4d7145000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa4d712a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa4d6f38000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa4da08d000)
	libxcb-util.so.1 => /lib/x86_64-linux-gnu/libxcb-util.so.1 (0x00007fa4d6d32000)
	libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fa4d6d29000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fa4d6d0d000)
	libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fa4d6d07000)
	libpangocairo-1.0.so.0 => /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007fa4d6cf5000)
	libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007fa4d6ce3000)
	libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fa4d6cdb000)
	libcairo-gobject.so.2 => /lib/x86_64-linux-gnu/libcairo-gobject.so.2 (0x00007fa4d6ccf000)
	libcairo.so.2 => /lib/x86_64-linux-gnu/libcairo.so.2 (0x00007fa4d6baa000)
	libgdk_pixbuf-2.0.so.0 => /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007fa4d6b82000)
	libatk-1.0.so.0 => /lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007fa4d6b58000)
	libatk-bridge-2.0.so.0 => /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 (0x00007fa4d6b21000)
	libepoxy.so.0 => /lib/x86_64-linux-gnu/libepoxy.so.0 (0x00007fa4d69ee000)
	libfribidi.so.0 => /lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007fa4d69d1000)
	libgio-2.0.so.0 => /lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007fa4d67ee000)
	libpangoft2-1.0.so.0 => /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007fa4d67d5000)
	libXinerama.so.1 => /lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007fa4d67d0000)
	libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007fa4d67c3000)
	libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007fa4d67b6000)
	libXcomposite.so.1 => /lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007fa4d67b1000)
	libXdamage.so.1 => /lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fa4d67aa000)
	libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007fa4d679f000)
	libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007fa4d679a000)
	libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007fa4d6789000)
	libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fa4d6774000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa4d6769000)
	libthai.so.0 => /lib/x86_64-linux-gnu/libthai.so.0 (0x00007fa4d675c000)
	libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007fa4d6750000)
	libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa4d674a000)
	libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa4d6742000)
	libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fa4d668a000)
	libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fa4d665b000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fa4d662d000)
	libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007fa4d657e000)
	libicudata.so.66 => /lib/x86_64-linux-gnu/libicudata.so.66 (0x00007fa4d4abd000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa4d4a4a000)
	libpixman-1.so.0 => /lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007fa4d49a1000)
	libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fa4d4797000)
	libatspi.so.0 => /lib/x86_64-linux-gnu/libatspi.so.0 (0x00007fa4d4760000)
	libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007fa4d4700000)
	libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fa4d46d5000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fa4d46b7000)
	libdatrie.so.1 => /lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007fa4d46ad000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fa4d4684000)
	liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007fa4d4663000)
	libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fa4d4545000)
	libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007fa4d44ec000)
	libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007fa4d445c000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fa4d4439000)
Xa
()
Ответ на: комментарий от Xa

А откуда в зависимостях libgtk-3.so.0? Да и вообще как-то многовато лишнего. Хотя последняя версия которую я использовал была толи 5.5 толи 5.6

CrazyAlex25 ★★★
()

Легче перечислить, где НЕ используется коммерческий Кьют. Помимо вышеперечисленного, добавлю продукты от Arobas Music и East West.

meliafaro ★★★★★
()
Ответ на: комментарий от CrazyAlex25

А не знаю, configure надо лучше настраивать. В Qt5 были например облегчающие ключики «-no-ssl -no-gtk -qt-xcb -no-icu -no-glib -no-sm -no-dbus -no-accessibility -no-feature-accessibility», тут я по умолчанию почти запустил посмотреть просто…

Xa
()
Ответ на: комментарий от hibou

Как раз вчера смотрел видео по разработке GTK-based приложений под Винду. Всё там нормально, даже внешний вид можно прилепить виндовский.

meliafaro ★★★★★
()
Ответ на: комментарий от CrazyAlex25

Некорректно сравнивать ГТК и Кьют. ГТК больше похож на QtWidgets. Но под капотом у ГТК Glib, где есть куча ништяков на все случаи жизни.

meliafaro ★★★★★
()
Ответ на: комментарий от hummer

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

Reset ★★★★★
()
Ответ на: комментарий от hibou

Интереснее тем, как у них получилось выстроить объектную модель на чистом Си. Да еще и так, что биндинги клепать к другим языкам - раз плюнуть.

Собственно, в основном ради полуавтоматических биндингов это и затевалось. Объектная система отделена от синтаксиса. Поэтому биндинги ГТК есть вообще для любого языка, кроме какой-то уж совсем экзотики. А в Кьют приходится это всё делать вручную, поэтому кроме Питона нигде не взлетело.

meliafaro ★★★★★
()
Ответ на: комментарий от hibou

Мне вот интересно, как они виртуальные методы на Си реализовали? Есть ли такое в GTK+?

Через классовую структуру, содержащую указатели на функции. Если интересно, можешь глянуть мои старые статьи на Хабре на эту тему https://habr.com/ru/post/348204/

meliafaro ★★★★★
()
Ответ на: комментарий от CrazyAlex25

Там походу еще и половина гнома собралась попутно.

utanho ★★★★★
()
Ответ на: комментарий от CrazyAlex25

Ну да, поэтому аналогом Кьют будет не только ГТК, а вообще весь их стек - Glib, GObject, GIO, ATK, Pango, и т. д.

meliafaro ★★★★★
()
Ответ на: комментарий от utanho

У Кьют, если я не ошибаюсь, он нужен для воспроизведения мультимедиа-файлов под Линукс, или что-то в этом роде.

meliafaro ★★★★★
()
Ответ на: комментарий от meliafaro

Именно. Представьте себе современный ноут/пека без звука. Можно конечно настроить субтитры, но музыку слушать врядли получится.

utanho ★★★★★
()

Не знаю кто покупает, но ~300$ в месяц на разработчика это не так уж и много. Например по сравнению со стоимостью офиса.

dvetutnev
()

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

Порог вхождения немаловажен. Вот, например, понадобилось мне как-то быстро наколенить GUI с двумя потоками. Но не просто в оригинальном виде, а через Python (не на сишке же писать GUI в 21м году!). Попробовал сначала GTK. Мало того что какие-то разные версии биндингов (одна для старых версий GTK, другая - для новых?), и нужно весь этот легаси-шлак отфильтровывать, так делаешь по мотивам примера - наработает. Потом взял Qt, API интуитивно понятный, и главное - работает без лишних экспериментов и околачивания баклуш на всяких SO.

seiken ★★★★★
()

Сижу на арче. Тут LTS на долго не задерживается. А вот любителям подмороженной стабильности (читай: дебиан) придётся потерпеть.

ox55ff ★★★★★
()

Много кто из автопрома европейского использует. Хотя, японцы тоже не брезгуют. CrazyAlex25 уже написал.

baldman88
()
Ответ на: комментарий от utanho

Ну это слишком сильное заявление :)

Разве в коде QtMultimedia (видимо, отсылка к этому модулю) есть непосредственные вызовы GLib? Я не смотрел исходный код, но слушал несколько лет назад выступление Кнута Ирвина об архитектуре Qt. Всё-таки в QtMultimedia прилично всё абстрагировано, какой хотите multimedia backend, такой и прикручиваете. В Linux есть архитектурно прекрасный основанный на Glib GStreamer, позволяющий легко строить конвейеры обработки данных в реальном времени и подключать кодеки, к тому же специально созданный для предоставления API высокоуровневым прикладным программам. Пилить свой аналог было бы просто глупо. Но при желании подменить GStreamer другим решением - можно довольно легко.

А вот связь GTK+ с GLib гораздо более существенная, без GLib GTK+ не существует, вы не можете подменить другой библиотекой по вашему усмотрению. Даже приложение с пустым окном создать.

northerner ★★★
()
Ответ на: комментарий от utanho

В значительной степени это так: цикл обработки событий, типы данных и алгоритмы, кодировки и интернационализация, таймеры, потоки, регулярки, ГПЧ, плагины, некоторая базовая поддержка XML (SAX и DOM в Qt в отдельном модуле) и т.д.

В целом, QtCore всё же богаче с точки зрения функциональности, но и в Glib есть пара уникальных фич.

northerner ★★★
()
Ответ на: комментарий от northerner

Попробуйте собрать QtCore без Glib и посмотрите результат.

utanho ★★★★★
()
Ответ на: комментарий от EXL

Qt-разработчики сегодня всеми силами пытаются как-то обойти неудобное для них соглашение

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

Желание кутешников зарабатывать на своём продукте и сытно кушать вполне оправдано, но вот то, как они пытаются его реализовать…

hobbit ★★★★★
()
Ответ на: комментарий от hibou

Мне вот интересно, как они виртуальные методы на Си реализовали? Есть ли такое в GTK+?

Таким трюкам лет намного больше, чем самой GTK+. :) VMT — это таблица указателей, которую вполне можно заполнять руками.

hobbit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.