2009-05-21 12 views
10

Ich muss meine Delphi-Lösungen unter Linux verfügbar machen und habe sie sowohl auf Wine als auch auf Lazarus getestet. Welche technischen Aspekte sollte ich längerfristig berücksichtigen (Programmierung, Einsatz, Wartung etc.), um nicht in einen Wartungsalarm zu geraten? Ich verwende meine Windows-Komponenten als Standard, um die Komplexität zu vermeiden, die sich plattformübergreifend ergeben könnte. Ich suche nach einigen harten Fakten, die über das subjektive hinausgehen sollten. Ich denke nicht an .Net/Mono, denn das wird mich sofort zurückbringen (Huge Delay auf den Markt), was ich mir nicht leisten kann.Was wäre die beste Lösung für meine Delphi-Anwendungen unter Linux - Delphi + Wine oder Lazarus?

kann ich einige denken:

  1. Lazaraus kann einige (Änderungen) erfordern Programmiercode Arbeit zu machen.
  2. Wein ist eine schwierigere Umgebung für eine große Kundenbasis.

Ihr Beitrag zu diesem würde sehr geschätzt werden.

Antwort

1

Zuerst sollten Sie versuchen, sicherzustellen, dass Ihr GUI-Code und nicht GUI-Back-End-Code sauber in die GUI-App und Bibliotheken getrennt sind, wenn sie nicht bereits vorhanden sind. Dies erleichtert das Testen und vereinfacht die Implementierung der Befehlszeilenschnittstelle, der Webschnittstelle usw. Diese Bibliotheken (Unit-Dateien mit Objekten und Prozeduren) sollten in den meisten Fällen problemlos auf FreePascal kompiliert werden. Sie sollten jedoch den nicht GUI-Code überprüfen und debuggen zuerst.

Sobald das nicht mehr im Weg ist, ist es Zeit, sich die GUI anzusehen. Wenn Sie viele handelsübliche kommerzielle Komponenten von Drittanbietern verwenden, kann es passieren, dass Sie die GUI nicht einfach konvertieren können. Wenn Sie hauptsächlich Bestandskomponenten und/oder Komponenten verwenden, die nach Lazarus portiert wurden, können Sie die GUI tatsächlich konvertieren und unverändert verwenden.

Beachten Sie, dass, da Mac OS und Linux-Programme sind oft angenommen, dass anders aussehen, möchten Sie vielleicht, je nach Ihrer Anwendung berücksichtigen. Mögliche Ansätze sind: 1. Verwenden Sie Lazarus auch unter Windows und verwenden Sie denselben GUI-Code für alle Plattformen. 2. Verwenden Sie Lazarus nur unter OS X und Linux, und passen Sie die GUI an, um nach der Konvertierung etwas nativ zu werden. 3. Codieren Sie eine native GUI für OS X (mit Cocoa und vielleicht XCode), und verknüpfen Sie dann mit Ihrem Pascal-Code für die nicht-GUI-Behandlung. Dies ist unter Linux weniger notwendig, aber Sie haben die Wahl zwischen Toolkits für das zu erstellende LCL (VCL) Backend.

Es gibt starke Befürworter jedes Ansatzes, aber welche davon richtig ist, hängt von Ihren "Umständen" und Ihren Zielen ab.

Wenn Ihr Hauptinteresse OS X ist, sollten Sie der MacPascal-Liste beitreten.

Wine ist ein riesiger Overkill, es sei denn, Sie müssen morgen eine Linux/OS X-App fast ohne Modifikationen herausbringen. (In diesem Fall, warum nicht einfach VMWare?)

+0

Lazarus auf Mac unterstützt QT und Carbon. In der Vergangenheit sogar GTK (habe das seit Jahren nicht mehr versucht). Kakao ist geplant, schreitet aber langsam voran. Ich nehme an, es hängt alles davon ab, wie begierig Sie sind, Ihre App neu zu gestalten, und welche Anforderungen an die GUI Sie haben. –

5

Ich würde im Allgemeinen empfehlen, Lazarus zu verwenden. Wenn Sie auf WINE angewiesen sind, sind Sie auch WEIN-Fehlern ausgeliefert, die Ihre Produktqualität beeinträchtigen können. Es kann sogar nützlich sein, Lazarus + FPC in der Windows-Umgebung zu verwenden.

Eine Alternative wäre die Verwendung der Virtualisierung, aber dies hängt von der Art der Anwendung ab, die Sie schreiben.

+0

Vielen Dank für Ihren Beitrag. Ich bin mir bewusst, dass die Vitalisierung unerwünschte Auswirkungen auf die Leistung und andere technische Komplexitäten haben wird, wahrscheinlich schlimmer, als ich bei der Verwendung von Wine begegne. –

+1

Lazarus hat viele Bugs und AV-Probleme, aber gegen Wein? Ich würde 1+ für Lazarus sagen. – avar

+0

Für die Wartbarkeit kann die Virtualisierung jedoch hilfreich sein, da alles innerhalb der virtuellen Maschine eigenständig ist. – sybreon

4

Mit Blick auf die Pläne von Codegear - suchen Sie nach einigen der Roadmap Hinweise auf DelphiLive 2009 - um native Delphi auf Linux und Mac zu bieten, würde ich jetzt mit Lazarus gehen. Sie sparen sich die Weinverwaltung und können später Ihre App auf native portieren. (Wie jemand es ausdrückte: Delphi wird wie ein großer Zoo mit Pinguinen, Tigern, Leoparden und Schneeleoparden sein.)

Natürlich wird die Portierung einige Arbeit beenden. Aber wenn Sie Probleme wie Unicode sorgfältig untersuchen und die häufigsten Fehler vermeiden, sollte es ziemlich einfach sein.

Suchen Sie nach delphifeeds für Unicode und Roadmap für weitere Hinweise.

17

Ich würde sagen, dass es dort keine goldene Regel gibt. Es hängt wirklich davon ab, wie viele der von Ihnen verwendeten Komponenten von Lazarus unterstützt werden.

Ich würde mit Lazarus testen und Wine als Backup für den Fall behalten, dass Sie verzweifelt werden.

Die Codegear-Pläne sind immer noch sehr vage (sie sehen es nur "an"), aber gleichzeitig verwischen sie den 64-Bit-Rollout über zwei Vollversionen, und selbst wenn dies Fortschritte macht, könnte dies eine ganze Weile dauern)

Die schnelle Zeitleiste lässt mich denken, dass die Apple-Version QT, nicht native API verwenden wird.

Update: fast 4 Jahre, und immer noch keine Linux-Unterstützung. Bäume wachsen schneller.

+2

Danke für eine Stimme der Vernunft unter den aktuellen Sternenäugigen glauben, dass (eine der) Delphi-Versionen wird es ermöglichen, nur einen Knopf drücken und all diese wunderbaren Linux- und Mac OS X-Anwendungen. – mghie

+0

Nun, ich möchte auch nicht negativ sein, sie haben zumindest die Kylix-Codebasis und einen überarbeiteten (und hoffentlich portablen) Compiler als Teil des 64-Bit-Aufwands. FPC/Lazarus ging über denselben Weg auch Multi-Plattform und später-Architektur. Allerdings gibt es einfach nicht genug Fleisch, um tatsächlich zu kommentieren. –

+0

mghie: Es stellt sich heraus, dass der Knopf nach der Umgestaltung auf eine andere GUI-Bibliothek gedrückt wird :-) –

16

Ich muss mit allen anderen hier widersprechen und vorschlagen, dass Sie Wein verwenden. Google liefert Picassa mit einer Wine-Installation aus, und Sie könnten dasselbe tun. Anstatt sich auf die von der Distro installierte Version zu verlassen, haben sie eine Kopie im Programmverzeichnis, die vorkonfiguriert ist und eine bekannte Version hat, gegen die Sie testen können.

Im Grunde müssen Sie nur fragen, was ein nativer Port bieten würde, dass ein Wine Wrapper nicht würde.Bei den meisten Delphi-Apps lautet die Antwort wahrscheinlich Theme und sonst wenig. Wir haben einen nativen Port eingerichtet, so dass wir auf das Dateisystem auf einer niedrigeren Ebene zugreifen konnten, aber vorher hat unser Produkt über Jahre hinweg fast perfekt an Wine gearbeitet.

Und aus Erfahrung, nativen Ports ist kein Spaziergang im Park:

  • Alle sind Komponenten von Drittanbietern wahrscheinlich nicht von Lazarus unterstützt.
  • Wenn Sie Ihre Windows-Version nicht auch auf Lazarus umstellen, müssen Sie parallele .lfm-Dateien verwalten, und wenn Sie wechseln, verlieren Sie die Delphi-IDE. So schön wie Lazarus ist, ist es weit hinter dem neuesten Delphis in Polnisch und Funktionen.
  • Das Testen erfordert viel mehr Aufwand, wenn Sie ein völlig separates Programm mit einem anderen Widget-Set haben. Das Testen auf Wine wäre näher am Testen Ihrer vorhandenen Version in einer neuen Windows-Version.
  • Sie können keine neuen Funktionen verwenden, die der Delphi-Compiler einführt (Generika, anonyme Methoden), bis FPC etwas Ähnliches hat.
  • Die meisten 64-Bit-Linux-Installationen enthalten keine 32-Bit-Versionen von Gtk/Qt, und ihre Installation kann kompliziert und fehleranfällig sein. Daher müssen Sie auch 64-Bit-Versionen Ihrer Anwendung kompilieren.
+0

Danke dafür - Sie werden sicherlich Denkanstöße geben. –

+2

Ich stimme nicht den Komponenten von Drittanbietern zu. Ziemlich viele der Kernkomponenten werden unterstützt, wie Socket-Suites, ZeOS, VST, Comport, TeeChart und die Liste geht weiter. Der zweite Punkt stimme ich zu, zumindest der erste Teil, die doppelte Wartung ist ein Schmerz, wenn Sie eine Menge GUI haben.(Ich habe die meisten meiner Lazarus-Projekte auf Lazarus auf Windows umgestellt, ich hatte sowieso wegen win64) FPC veröffentlichte Generika vor D2009. Aber leider implementiert CG sie inkompatibel Der letzte Punkt hängt davon ab, wie weit Sie gehen werden. Linux/PPC Sparc, ARM, Wince? Sehen Sie zuerst, ob 64-Bit-Linux zu diesem Zeitpunkt sinnvoll ist. –

+4

Wie viele der TMS- und DevExpress-Komponenten werden unterstützt? Ich habe auch die Ribbon-Steuerelemente, Bildgebungsbibliotheken, ZipForge/Ziptv, VirtualShellTree, Skinning/Theme, QuickReports und mehr vermisst. Vielleicht ist das Wiki nicht mehr aktuell ... –

3

Ich denke, entweder Wein oder Lazarus würde wahrscheinlich für Sie arbeiten. Ich habe einige unserer ziemlich großen Delphi Apps (viele 3rd Party Controls) mit Wein getestet und sie haben ziemlich gut funktioniert. Es gab ein paar nervige Schriftprobleme. Die zwei Sachen, die wirklich hauptsächlich fehlschlugen, waren, wo ich TWebBrowser verwendete (das aussah, als ob es fast gearbeitet hat, ich denke, dass es die Gecko-Darstellungsmaschine anstelle von IE verwendete). Der andere war ein Multi-Tier (Datasnap) -Server, der lief, aber ich konnte nicht herausfinden, wie ich mich verbinden sollte.

Ich denke, für Mac/Linux-Unterstützung für Delphi zu halten wäre ein Fehler, die Tatsache, dass sie eine Konsole "Hallo Welt" -Anwendung für OS/X kompilieren können, ist beeindruckend - aber ich denke, Portieren der VCL ist eine andere Geschichte (es sei denn, Sie haben eine Konsolen-App geschrieben).

Wenn Sie bereits eine funktionierende Anwendung haben, dann geben Sie dem Wein eine Chance - Testen kann nicht schaden.

Die andere Sache zu prüfen ist, wer Ihre Benutzer sind (und wie viele)? Wenn sie Linux-Geeks sind, werden sie keine Probleme haben, Wein zu konfigurieren und zu optimieren (obwohl sie es vielleicht als anstößig empfinden könnten, eine native Windows-App zu verwenden). Wenn es eine Gruppe von Großmüttern ist, dann ist das eine andere Geschichte.

+0

Die Tatsache, dass sie "Hallo Welt" für Mac OS X kompilieren können, ist nicht beeindruckend, es ist das absolute Minimum. Ich meine, wir sprechen über ein Unternehmen, das seit über 20 Jahren x86-Entwicklungstools entwickelt! (Ich denke, sie würden nicht auf PPC zielen, nicht viel Sinn darin, das mehr zu tun.) Ansonsten ist deine Antwort gut, +1. – mghie

+0

(OS X ABI ist ein bisschen funky, mit Ausrichtung Bytes, kleine Datensätze in Registern Stapelausrichtung in jeder Funktion usw. So ist es nicht ganz trivial) –

+0

@Marco: Es kann nicht trivial sein, aber es gibt Tonnen von Stand der Technik zu sehen beim. Sie sollten ihre Sachen nach all der Zeit kennen. Und heutzutage wird es viel mehr als nur ein "nicht ganz triviales" Problem lösen müssen, um die Leute davon zu überzeugen, für ein Entwicklungstool zu bezahlen. – mghie

2

Free Pascal Compiler/Lazarus ist nicht in der Nähe der neuesten Delphi-Funktionen, aber es ist ziemlich stabil, obwohl es noch Fehler zu finden sind.

Außerdem scheinen die ausführbaren Dateien größer zu sein, aber sie sind definitiv kleiner als die Verwendung einer VM oder die Bereitstellung mit Wine selbst.

Aber es tut etwas, das Delphi/Kylix einmal versuchte. Cross build! Indem Sie es verwenden, können Sie von einer Plattform zu einer anderen kompilieren.

1

Eigentlich verwenden wir Wine für unser ShareTeam Produkt ... Wir haben eine Testversion auf Lazarus, die ein gutes Werkzeug ist und viele Vorteile hat, aber im Moment nicht wirklich komplett ist. Ich denke, im Moment ist besser Wein zu verwenden, wenn die Arbeit nicht einfach ist, ist die Konvertierung einer Delphi-Anwendung zu Lazarus/FreePascal nicht einfach. Persönlich hoffe ich, dass Embarcadero eine plattformübergreifende Version von Delphi macht, nicht wie Prism, die einen großen Unterschied zu Delphi haben.

+0

Ich denke, die gleichen Komponenten, die das Problem mit Lazarus (wie RTF, Berichtspakete, TWebBrowser (IE), XML (MSXML, aber das ist möglich zu emulieren), ADO usw.) wird ein Problem mit Multiplattform Delphi auch sein. –