Кроссплатформенность на практике

Модератор: Модераторы разделов

Аватара пользователя
xtron
Сообщения: 31

Кроссплатформенность на практике

Сообщение xtron »

Здравствуйте уважаемые знатоки.

Есть у меня один проект довольно успешный который работает да и проработал еще бы лет 10 если бы не одно "НО". Ввиду "недавних" событий относительно лицензионности мелкомякгих продуктов некоторые заказчики изъявили видеть мое творение под Linux. Но все дело в том что проект довольно развирающийся и я не могу бросить Win-версию и начать писать Linux-версию так как довольно часто приходиться выпускать обновления и тп. Физически я не смогу параллельно вести две версии системы, если это будет на разных языках программирования.

По разработано с использованием Borland Delphi Studio и Firebird 2.0. В отношении Firebird перенос базы под nix-платформу труда не составил, а вот на счет клиентской части встал вопрос.

Хотелось бы писать на чем то одном, то есть для версий под разные платформы иметь одни и те же исходники (возможна даже раздельная компиляция под win и nix). Также хотелось бы иметь приличный пользовательский интерфейс на основе Qt (3, а лучше 4).

Имеется ли Qt(3,4) для Windows?

Как я думаю оптимальный вариант - C++ и QT4 возможно ли это чтобы компилировалось и под lin и под Win одни и те же исходники.

Web-технологию не рассматриваю так как интерфейс довольно специфический и на вебе практически не реализуемый + скорость.

Если у кого либо имеется опыт разработки кросплатформенных приложений (хотя бы на уровне компиляции под каждую систему одних исходников) поделитесь пожалуйста.
Mandrake 10 -> Mandriva 2007 -> Debian Sarge ->Kubuntu 6.10 Edgy -> Kubuntu 7.04 Feisty -> Debian Lenny (testing)
Спасибо сказали:
divenvrsk
Сообщения: 379
ОС: Ubuntu, openSuSE

Re: Кроссплатформенность на практике

Сообщение divenvrsk »

опыт есть и опыт говорит, что писать надо следуя парадигме ООП.
т.е. разделять представление и функционал. насчет Delphi - в linux есть lazarus и в принципе очень даже не плохой fpc, но у меня как то не очень вяжется скорость и delphi, вполне возможно что в вашем случае проще будет переписать на java и вопрос о кроссплатформенности просто отпадет, тем более что по времени это будет сопоставимо с адаптацией программы под linux, с учетом той же специфики графических приложений.
qt библиотека кроссплатформенная, но опять же на практике получается так, что приходится отдельно адаптировать windows и linux версию и соответственно поддерживать две версии исходных кодов, каких бы уровней абстракции в функционале вы не достигли.
хотя если функционал упирается лишь в интерфейс и особо не завязан на API системы и иже с ними - то C++ & Qt вполне хорошее решение.
насчет биндингов для qt на delphi ничего сказать не могу, ибо не компетентен в этом вопросе.
Спасибо сказали:
Аватара пользователя
xtron
Сообщения: 31

Re: Кроссплатформенность на практике

Сообщение xtron »

divenvrsk писал(а):
10.12.2007 10:30
опыт есть и опыт говорит, что писать надо следуя парадигме ООП.
т.е. разделять представление и функционал. насчет Delphi - в linux есть lazarus и в принципе очень даже не плохой fpc, но у меня как то не очень вяжется скорость и delphi, вполне возможно что в вашем случае проще будет переписать на java и вопрос о кроссплатформенности просто отпадет, тем более что по времени это будет сопоставимо с адаптацией программы под linux, с учетом той же специфики графических приложений.
qt библиотека кроссплатформенная, но опять же на практике получается так, что приходится отдельно адаптировать windows и linux версию и соответственно поддерживать две версии исходных кодов, каких бы уровней абстракции в функционале вы не достигли.
хотя если функционал упирается лишь в интерфейс и особо не завязан на API системы и иже с ними - то C++ & Qt вполне хорошее решение.
насчет биндингов для qt на delphi ничего сказать не могу, ибо не компетентен в этом вопросе.


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

Я вот тоже больше склоняюсь к C++ и QT4. С сями я почти на "ты" а вот яву придется учить. Да и модули завязаные на специфические функции вынести в отдельнные dll / so. Их всего 1% от исходного кода (а исходников в чистом pas только на 70 MB :) ).
Mandrake 10 -> Mandriva 2007 -> Debian Sarge ->Kubuntu 6.10 Edgy -> Kubuntu 7.04 Feisty -> Debian Lenny (testing)
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Кроссплатформенность на практике

Сообщение Uncle_Theodore »

QT небесплатна для коммерческих продуктов.
Спасибо сказали:
divenvrsk
Сообщения: 379
ОС: Ubuntu, openSuSE

Re: Кроссплатформенность на практике

Сообщение divenvrsk »

я бы на вашем месте все переписал на java, гарантированная кроссплатформенность + легкость формирования интерфейся. да и мне кажется быстрее будет приглядется к java чем переписывать на с++ \ qt.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Кроссплатформенность на практике

Сообщение serzh-z »

Uncle_Theodore писал(а):
10.12.2007 13:53
QT небесплатна для коммерческих продуктов.
Кстати, очень даже ощутимо небесплатная... Припоминаю, что нам лицензия стоила что-то в районе $4000.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Кроссплатформенность на практике

Сообщение v04bvs »

Самый разумный вариант - использовать Lazarus. Адаптировать исходники под него можно за разумные сроки.

Переписывать на другом языке.. Потенциально выигрыш конечно есть, переписывание всегда улучшает код. Но это очень рискованно.

Если решитесь переписывать, и позволяют требования к производительности - Java. Если не позволяют - C/C++ и Gtk.
Спасибо сказали:
Аватара пользователя
xtron
Сообщения: 31

Re: Кроссплатформенность на практике

Сообщение xtron »

Спасибо всем за различные мнения. Да, то что Qt для коммерческих проектов денег просит я уже выяснил.
И вообще нормально ли работает gtk-runtime в Windows - среде?

PS: Пропробую седня скомпилить HelloWord на gtk+-2.0 + gtkmm-2.4 + C++ под linux и под Windows (вроде нашел все библиотеки для обоих осей + компилер бесплатный для виндов) :)
Mandrake 10 -> Mandriva 2007 -> Debian Sarge ->Kubuntu 6.10 Edgy -> Kubuntu 7.04 Feisty -> Debian Lenny (testing)
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Кроссплатформенность на практике

Сообщение d_n_k »

gtk нормально работает,
если хочешь убедится посмотри на
http://www.pidgin.im/
http://evolution-win32.sourceforge.net/
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
nrg
Сообщения: 219
Статус: Энерджайзер :)
ОС: OpenSuSe 10.3

Re: Кроссплатформенность на практике

Сообщение nrg »

serzh-z писал(а):
10.12.2007 14:03
Uncle_Theodore писал(а):
10.12.2007 13:53
QT небесплатна для коммерческих продуктов.
Кстати, очень даже ощутимо небесплатная... Припоминаю, что нам лицензия стоила что-то в районе $4000.


Если не изменяет память, то базовая лицензия на 1 платформу стоит в районе $ 1500, причём есть значительные скидки для предприятий Small Business с доходом менее $ 200 000 per year. Так что, если прога правда продаётся и пользуется спросом, то лицензия на две платформы уложится в 50-60 тыс рублей, что вполне нормально для такого продукта.
OpenSuSe 10.3 на Dell Inspiron 1501 и Семпрон-3000/1024ДДР2-800/120+60+300/NVidia 8500GT.
Участник Sun Open Source User Group, Самара.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Кроссплатформенность на практике

Сообщение serzh-z »

nrg писал(а):
12.12.2007 12:32
Если не изменяет память, то базовая лицензия на 1 платформу стоит в районе $ 1500
Да, точно. У нас просто на 3 платформы - за 4500 евро.
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Кроссплатформенность на практике

Сообщение yaleks »

Зачем переписывать? Lazarus посмотрите, он вполне совместим с Delphi.
Спасибо сказали:
Аватара пользователя
indie
Сообщения: 87

Re: Кроссплатформенность на практике

Сообщение indie »

Мб лучше обойтись вайном?
Например на сайте uTorrent в разделе закачки (http://www.utorrent.com/download.php) разработчики пишут For Wine, Windows 95 (Winsock2), 98/ME, NT/2000, XP, 2003, and Vista.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Кроссплатформенность на практике

Сообщение Denjs »

а собственно может пойти "по пути наименьшего сопротивления"? отладить что бы под wine запускался корректно?
(сейчас в меня начнут швырять помидоры, но хоть на "уровне идеи мозгового штурма" рассмотрите )

тем более wine умеет делать "типа-линукс-программу" - пакет готовый к исполнению в линуксе ? (где-то в описаниях было, сам так не делал) )
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Кроссплатформенность на практике

Сообщение serzh-z »

Denjs писал(а):
13.12.2007 07:26
тем более wine умеет делать "типа-линукс-программу" - пакет готовый к исполнению в линуксе ? (где-то в описаниях было, сам так не делал) )
Да, проект Winelib.
Спасибо сказали:
Аватара пользователя
indie
Сообщения: 87

Re: Кроссплатформенность на практике

Сообщение indie »

serzh-z писал(а):
13.12.2007 12:57
Denjs писал(а):
13.12.2007 07:26
тем более wine умеет делать "типа-линукс-программу" - пакет готовый к исполнению в линуксе ? (где-то в описаниях было, сам так не делал) )
Да, проект Winelib.

winelib бывает под паскаль?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Кроссплатформенность на практике

Сообщение serzh-z »

indie писал(а):
13.12.2007 16:16
winelib бывает под паскаль?
Увы:
Project cannot be ported using Winelib, as it is written in Pascal/Delphi. It should be possible to port it to Linux using Kylix relatively easily.
http://www.winehq.org/site/winelib
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Кроссплатформенность на практике

Сообщение Denjs »

indie писал(а):
13.12.2007 16:16
serzh-z писал(а):
13.12.2007 12:57
Denjs писал(а):
13.12.2007 07:26
тем более wine умеет делать "типа-линукс-программу" - пакет готовый к исполнению в линуксе ? (где-то в описаниях было, сам так не делал) )
Да, проект Winelib.

winelib бывает под паскаль?

стоп-стоп-стоп... я говорил про то что из бинарника.exe и wine делается "типа нормальная линукс программа".
какой нафиг паскаль-не-паскаль?...
блин видимо придется самому ссылки искать.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Кроссплатформенность на практике

Сообщение /dev/random »

Denjs писал(а):
13.12.2007 17:06
...из бинарника.exe и wine делается "типа нормальная линукс программа".

Это в смысле как сделано с якобы-линуксовским клиентом EVE Online?

А можно просто написать bash-скрипт, который будет содержать внутри себя экзешник, распаковывать его в /tmp и запускать "внешним" вайном, который прописать как зависимость.
Правда, от необходимости переделывать вручную код программы так, чтобы она не глючила под вайном не избавит (а она, как я понял из предыдущих постов, глючит)... Но от этого избавит только переписывание программы с нуля :)
Спасибо сказали:
vantaker
Сообщения: 166

Re: Кроссплатформенность на практике

Сообщение vantaker »

Есть мнение, что http://wxwidgets.org - хорошая бесплатная (и для коммерческого использования) альтернатива Qt. Есть порты под кучу платформ (даже под смартфоны), под кучу языков (можно быстро прототипировать на wxPython). Развивается стремительно, сообщество большое, реюзабельного кода - куча. Одного из главных разработчиков зовут Вадим :)

Собственно вот неплохой сравнительный обзор тулкитов: http://www.wxwidgets.org/wiki/index.php/Wx..._Other_Toolkits
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кроссплатформенность на практике

Сообщение drBatty »

vantaker писал(а):
16.12.2007 16:15
Есть мнение, что http://wxwidgets.org - хорошая бесплатная (и для коммерческого использования) альтернатива Qt
Ага, есть конкретная реализация программы с использованием этой библиотеки - aMule, собирается под win,nix, и mac. Доступны исходники. Как недостаток, замечу что многим не нравятся wx-окошки.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
vantaker
Сообщения: 166

Re: Кроссплатформенность на практике

Сообщение vantaker »

Как недостаток, замечу что многим не нравятся wx-окошки.

Это те, кому GTK+ не нравится - под Linux wxWidgets работает через эту библиотеку. Вобще wxWidgets на каждой платформе использует нативные для платформы виджеты, а не прорисовывает (читай-эмулирует) их сама в отличие от других тулкитов (той же Qt) - соответственно тормозов в гуе меньше. Но главное, что wxWidgets - не только удобный ГУИ, она - нормальный такой фреймворк с вводом/выводом, сокетами, http, html, базами, графикой, интернационализацией (млин, i18n и правда короче :)), и еще кучей всего.
И известных приложений на wxWidgets - тоже море: http://www.wxcommunity.com/modules.php?op=...nload&cid=5
Kicad, Voxel3D, aMule, Juice, Bacula, Audacity, DVDStyler, Amaya, VLC, Wired - все wxWidgets
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Кроссплатформенность на практике

Сообщение eduard_pustobaev »

Да, wxwidgets - как раз таки явный крнкурент Qt. И вполне достойный, хотя мне не нравится...:)
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кроссплатформенность на практике

Сообщение drBatty »

vantaker писал(а):
19.12.2007 19:53
Вобще wxWidgets на каждой платформе использует нативные для платформы виджеты, а не прорисовывает (читай-эмулирует) их сама в отличие от других тулкитов (той же Qt) - соответственно тормозов в гуе меньше.

Это конечно правильно, но почему-то в той-же WindowsXP виджеты почемуто получаются от win3.x :(
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Кроссплатформенность на практике

Сообщение Liksys »

Если нет сложного обсчета физики или математики (ну уж совсем сложного), то можно было бы взять Python + Qt4. Если программа клозе-сорсная и впадлу покупать лицензии, то вместо Qt4 можно взять GTK или wxWidgets. И то и то позволяет нахаляву закрывать софт, насколько я знаю.
Спасибо сказали:
vantaker
Сообщения: 166

Re: Кроссплатформенность на практике

Сообщение vantaker »

Это конечно правильно, но почему-то в той-же WindowsXP виджеты почемуто получаются от win3.x

Быть этого не может в принципе, и именно потому, что виджеты нативные (из родных виндовых библиотек, установленных в системе) - те же, что используются всеми другими приложениями
Если нет тем оформления (theme) на виджетах, разбирайтесь почему у вас не подключенился манифест (.manifest) или сами создайте его и киньте в папку с экзешником программы. Можете взять от любой другой установленной проги (или найти в сети) и переименовать: если ваш exe имеет вид app.exe, файл манифеста должен быть app.exe.manifest
И собирайте с wxMSW, а не с wxUniversal.

Прочитайте "Cross-Platform GUI Programming with wxWidgets". В сети есть в pdf (причем это не варез), ~ 7 МБ.
В русском Linux Format с 11.2007 идет цикл статей по wxWidgets. В Системном администраторе тоже вроде бы что-то было
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кроссплатформенность на практике

Сообщение drBatty »

vantaker писал(а):
24.12.2007 21:05
Прочитайте "Cross-Platform GUI Programming with wxWidgets". В сети есть в pdf (причем это не варез), ~ 7 МБ.
В русском Linux Format с 11.2007 идет цикл статей по wxWidgets. В Системном администраторе тоже вроде бы что-то было
Спасибо за ссылки и за информацию. Всё это очень полезно, однако я не свои программы имел ввиду, а чужие. Возможно они были старые и не знали о том, где запускались.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
ozone baby
Сообщения: 221
ОС: Ubuntu i386/Ubuntu amd64

Re: Кроссплатформенность на практике

Сообщение ozone baby »

А почему Mono никто даже не рассматривает? С анонсом полной поддержки winForms mono становится фреймворком подходящим для написания большинства приложений
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: Кроссплатформенность на практике

Сообщение cy6erGn0m »

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

Что касается wxwidgets - это действительно неплохая штука, но то что она работает через gtk+ это правда большой недостаток.


Что касается прикручивания winelib это правда неплохой вариант..
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали:
ozone baby
Сообщения: 221
ОС: Ubuntu i386/Ubuntu amd64

Re: Кроссплатформенность на практике

Сообщение ozone baby »

почему-то от wxWidgets многие плюются. Лично мне C# больше нравится. Да и mono это все-таки open source изначально, в отличие от java.
Спасибо сказали: