Каким будет лучшее решение для моих приложений Delphi на Linux-Delphi+Wine или Lazarus?

Мне нужно сделать мои решения Delphi доступными в Linux, и я протестировал их как на Wine, так и на Lazarus. Каковы технические соображения, которые я должен учитывать (Программирование, развертывание, обслуживание и т. д.) в долгосрочной перспективе, чтобы избежать посадки в кошмар обслуживания. Я использую свои компоненты Windows довольно стандартно, чтобы избежать сложностей, которые могут развиваться на кросс-платформенной. Я ищу некоторые твердые факты, которые должны выходить за рамки субъективности. Я не хочу рассмотрим .Net / Mono, потому что это немедленно вернет меня (огромная задержка на рынок), которую я не могу себе позволить.

Я могу придумать несколько:

  1. Lazaraus может потребовать некоторого (изменения) программирования для работы кода.
  2. вино более трудная окружающая среда для поддержания на большом основании клиентов.

Вы вклад в это были бы очень признательны.

8 ответов


во-первых, вы должны попытаться убедиться, что ваш код GUI и не-GUI back-end код четко разделены на приложение GUI и библиотеки, если они еще не. Это упрощает тестирование, а также упрощает реализацию интерфейса командной строки, web-интерфейса и т. д. Эти библиотеки (единичные файлы с объектами и процедурами) должны легко компилироваться на FreePascal в большинстве случаев, однако сначала вы должны проверить и отладить код без GUI.

Как только это из Пути, это время чтобы взглянуть на ваш GUI. Если вы используете много коммерческих компонентов с закрытым исходным кодом, вам может не повезти с простым преобразованием GUI. Если вы используете в основном фондовые компоненты и/или те, которые были портированы на Lazarus, вы действительно можете конвертировать GUI и использовать его как есть.

обратите внимание, что с Mac OS и Linux программы часто должно чтобы выглядеть по-другому, вы можете рассмотреть это, в зависимости от вашего приложения. Возможные подходы включают:: 1. Используйте Lazarus даже в Windows и используйте один и тот же код GUI для всех платформ. 2. Используйте Lazarus только на OS X и Linux и настройте GUI, чтобы он был несколько родным после преобразования. 3. Код собственного GUI для OS X (используя Cocoa и, возможно, XCode), а затем ссылку на ваш код Pascal для обработки без GUI. Такого рода вещи менее необходимы в Linux, но там у вас есть выбор наборов инструментов для LCL (VCL) back-end.

есть сильные сторонники каждого подхода, но какой из них правильный, зависит от ваших" обстоятельств " и ваших целей.

Если ваш основной интерес-OS X, подумайте о присоединении к списку MacPascal.

вино-это огромный перебор, если вам не нужно завтра получить приложение Linux/OS X почти без изменений. (В этом случае почему бы просто не использовать VMWare?)


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

Я бы начал тестирование с Лазарусом и оставил вино в качестве резервной копии на случай, если вы отчаиваетесь.

планы Codegear по-прежнему очень расплывчаты (они только "смотрят на это", но в то же время они размазывают 64-битный раскат по двум полным версиям, поэтому, даже если это сделает прогресс, это может занять довольно много времени)

быстрый timeline заставляет меня думать, что версия Apple будет использовать QT, а не собственные API.

обновление: почти 4 лет, и до сих пор нет поддержки Linux. Деревья растут быстрее.


Я должен не согласиться со всеми здесь и предложить вам использовать вино. Google отправляет Picassa с установкой вина, и вы можете сделать то же самое. Вместо того, чтобы полагаться на версию, установленную дистрибутивом, у них есть копия в каталоге программы, которая предварительно настроена и имеет известную версию, с которой вы можете протестировать.

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

и, говоря по опыту, родные порты - это не прогулка в парке:

  • любые сторонние компоненты, вероятно, не поддерживаются Lazarus.
  • если вы не переключите свою версию Windows на Lazarus, вам нужно будет поддерживать parallal .файлы lfm, и если вы переключаетесь вы потеряете Delphi IDE. Как хорошо, как Лазарь, это далеко позади последних Delphis в польском и особенности.
  • тестирование потребует гораздо больше усилий, если у вас есть совершенно отдельная программа с другим набором виджетов. Тестирование на Wine было бы ближе к тестированию существующей версии на новой версии Windows.
  • вы не сможете использовать новые функции, которые вводит компилятор Delphi (дженерики, анонимные методы), пока FPC не будет что-то аналог.
  • большинство 64-разрядных установок Linux не включают 32-разрядные версии Gtk / Qt, и их установка может быть сложной и подверженной ошибкам, поэтому вам также нужно будет скомпилировать 64-разрядные версии вашего приложения.

Я бы вообще рекомендовал использовать Лазаря. Если вы зависите от вина, то вы также на милости ошибок вина, которые могут повлиять на ваше качество продукции. Может быть даже полезно использовать Lazarus + FPC в среде Windows.

в качестве альтернативы можно использовать виртуализацию, но это зависит от типа приложения.


глядя на планы Codegear-поиск некоторых подсказок дорожной карты в DelphiLive 2009-чтобы предоставить родной Delphi на Linux и Mac, я бы сейчас пошел с Lazarus. Вы избавите себя от администрации вина, а затем можете перенести свое приложение на native. (Как кто-то выразился: Дельфы будут похожи на большой зоопарк с пингвинами, тиграми, леопардами и Снежными Барсами.)

конечно, перенос будет envolve бросить некоторую работу. Но если вы внимательно посмотрите на такие проблемы, как unicode и prevent делать самые распространенные ошибки должно быть довольно легко.

Поиск delphifeeds для unicode и дорожной карты для дальнейших подсказок.


Я думаю, что вино или Лазарь, вероятно, будут работать на вас. Я протестировал некоторые из наших довольно больших приложений Delphi (многие элементы управления 3rd party) с вином, и они работали довольно хорошо. Было несколько раздражающих проблем с шрифтом. Две вещи, которые действительно потерпели неудачу, были там, где я использовал TWebBrowser (который выглядел так, как будто он почти работал, я думаю, что он использовал движок рендеринга gecko вместо IE). Другой был сервер muli-уровня (Datasnap), который работал, но я не мог понять, как подключиться к.

Я думаю, что держаться за поддержку Mac / Linux для Delphi было бы ошибкой, тот факт, что они могут скомпилировать консольное приложение "hello world" для OS/X впечатляет, но я думаю, что перенос VCL - это другая история (если вы не написали консольное приложение).

Если у вас уже есть рабочее приложение, то дайте wine go - тестирование не повредит.

другая вещь, чтобы рассмотреть, кто ваши пользователи (и сколько)? Если они являются Linux geeks, то они у вас не будет проблем с настройкой и настройкой wine (хотя они могут найти оскорбительным использование собственного приложения windows). Если это кучка бабушек, тогда это совсем другая история.


Free Pascal Compiler / Lazarus не близок к последним функциям Delphi, но он довольно стабилен, хотя все еще есть ошибки, чтобы узнать.

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

но он делает то, что Delphi/Kylix пробовал однажды. Cross build! Используя его, вы можете скомпилировать с платформы на другую.


на самом деле мы используем вино для нашего продукта ShareTeam... У нас есть тестовая версия на Lazarus, которая является хорошим инструментом и имеет много преимуществ, но на данный момент не является полной. Я думаю, на данный момент лучше использовать wine, если работа не проста, преобразование приложения Delphi в Lazarus/FreePascal не просто. Лично я надеюсь, что Embarcadero сделает кросс-платформенную версию Delphi, а не Prism, которые имеют большую разницу с Delphi.