Laden...

OS unabhängige Programmierung

Erstellt von DarsVaeda vor 17 Jahren Letzter Beitrag vor 16 Jahren 7.189 Views
DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren
OS unabhängige Programmierung

Hallöchen,

ich möchte ein Programm schreiben, dass auf möglichst vielen Betriebssystemen läuft.
Also wenigstens Windows (XP, Vista), Linux und Mac.
Es soll eine integrierte Datenbank enthalten, wofür ich Firebird favorisieren wollte.

Nun suche ich Tutorials, Bücher, Webseiten die einen Einstieg in das Betriebsystem übergreifende Programmieren unter C# erleichtern.

Bin für jegliche sachdienliche Hinweise dankbar 😁

"Die Zeit ist das Feuer in dem wir verbrennen."

21 Beiträge seit 2006
vor 17 Jahren

ähmmm... da wäre aber Java besser geeignet

oder Mono, aber Java ist glaub ich für so einen Anwendungsfall besser geeignet.

just my 2 cents

R
494 Beiträge seit 2006
vor 17 Jahren

Wirkliche Plattformunabhängigkeit gibt es nicht.

Kommt drauf an was du genauer vorhast.

6.862 Beiträge seit 2003
vor 17 Jahren

Mono ist an sich schon das richtige Stichwort, unterstützt alle Systeme. Nur mit der GUI musst mal schaun was sich auf allen Betriebssystemen anbietet. Wahrscheinlich GTK oder sowas.

Baka wa shinanakya naoranai.

Mein XING Profil.

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Ja hab da mal vor ner Weile gefragt und mir wurde Java und C# empfohlen.
Java gefällt mir nicht so und zudem hab ich auch mittlerweile C++ von der Uni aus.
Daher hab ich mit C# angefangen.
Mittlerweile hab ich mich eingelesen, jedoch kaum was praktisches erstellt.

Ich hatte als Anfänger irgendwie Probleme das um zusetzten was ich gelesen hatte.
Daher dümpelte ich mit meinem Wissen eigentlich nur dumm rum.
Dann hab ich mich einfach mal hingesetzt und versucht das mit der embedded-Datenbank hinzu bekommen.
Das hab ich dann auf Anhieb hinbekommen, das gab schon ne gute Portion Optimismus 😉

Ich denke die kommenden Semesterferien hab ich hoffentlich was mehr Zeit.
Also dachte ich, ich probier dann einfach das mit den verschiedenen Betriebssystemen mal aus.
Nur habe ich als Anfänger gar keine Vorstellung was ich genau beachten, machen muss.

Das Programm soll ein Verwaltungstool für bestimmte Tierarten sein.
Quasi sowas wie Größe, Gewicht, Nachkommen usw. Das kommt dann also in die Datenbank.
Das Ganze nett gestaltet, möglichst einfach zu bedienen und mit Diagrammen und so.
Aufgrund der "Klientel" muss es wirklich so einfach wie möglich sein, daher hatte ich an die embedded-Datenbank gedacht.
Für die meisten ist es schon eine Herausforderung ein Programm zu starten, geschweige denn Herunter zu laden 😉

Von Mono und GTK habe ich schon gelesen, hatte hier glaub ich auch schon mal gefragt, aber so eine richtige Vorstellung wie das funktionieren soll, habe ich nicht.
Auch habe ich vom "selber zeichnen der Oberfläche" gelesen, aber auch da habe ich keine Vorstellung wie das funktioniert. ("Zeichnet" man wirklich die Oberfläche selbst...)

Tja für sowas such ich halt ne nette Einführung zum durcharbeiten in den Ferien.

"Die Zeit ist das Feuer in dem wir verbrennen."

6.862 Beiträge seit 2003
vor 17 Jahren

Ist diese Plattformunabhängigkeit wirklich ein wichtiges Requirement oder einfach ein "nice to have" Feature? Bei vielen Programmen ist es nämlich zweiteres und Entwickler brechen sich nen Ast ab um da Plattformunabhängigkeit zu erreichen und rauskommen tut nen extrem kastriertes Programm nur weil es unter vielen Plattformen laufen soll, in Wirklichkeit läuft es dann aber eh nur auf einer Plattform, meist Windows - gerade bei unbedarften Usern wie du es annimmst denke ich kaum das dort Linux oder Mac arg vertreten sein werden.

Wie dem auch sei. Des mit dem GTK Toolkit ist eigentlich nicht schwer zu verstehen. Normal würde man ja einfach Windows.Forms benutzen, auf die verzichtet man halt weil die Windows abhängig sind und benutzt stattdessen ein Toolkit das es auf allen Zielplatformen gibt, GTK war hier nur von mir geraten, musst mal auf der MONO Seite schaun, da steht mehr dazu was auf welchen Plattformen unterstützt wird.

Die Mono Implementierung der Windows Forms hat aber auch große Fortschritte gemacht in letzter Zeit, so das du eventl. auch damit zum Ziel kommst.

Des selber Zeichen ist nen Thema für sich. Rein theoretisch könntest du ne Lib zum Zeichen benutzen die auf verschiedenen Systeme existiert, z.b. Cairo für Vektorgrafiken, aber das würde dann am Ende bald daraus hinauslaufen das du dir dein eigenes GUI Toolkit bastelst. Davon würde ich abraten bei plattformübergreifende Programmierung weil du ja zig verschiedene Subsysteme bedienen musst(XWindow unter Unix, Win32 unter Windows usw.).

Selber zeichen tut man oft wenn einen das Aussehen eines Controls nicht gefällt oder eine Oberfläche benötigt die Standardcontrols nicht bieten. Aber dann gehts wirklich so das du sagst, zeichne Linie so und so an der Position, schreibe Text so und so dorthin, male dort nen Kreis ... Also ne Menge Arbeit.

Hoffe nen paar Fragen konnt ich beantworten. Plattformunabhängigkeit würd ich nur anstreben wenn es nötig ist, sonst ists nur unnötiger Ballast. Ansonsten müsstest du mit Mono gut vorrankommen.

Baka wa shinanakya naoranai.

Mein XING Profil.

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Naja ich bin dabei die Wunschliste zu schreiben und die Vorraussetzungen dafür zu ergründen.
Also geht das und mit welchem Aufwand ist es verbunden.

Das Programm existiert schon.
Es hat ein Freund in Visual Basic geschrieben.
Das Programm ist recht beliebt bei der Klientel, da es recht einzigartig und kostenlos ist.
Ich denke aber mit einer gut geplanten Oberfläche ließe sich da noch einiges machen und vor allem noch mehr User vom Programm überzeugen.
Momentan ist die Oberfläche eher kompliziert und darüber gibt es auch die meisten Useranfragen. Auch so Sachen wie: "Wie installiere ich das Programm?"
Lustigerweise haben natürlich die meisten Windows-Versionen, aber ein nicht zu unterschätzender Anteil der potentiellen Nutzer hat Linux oder Mac.
(hab mal gelesen, dass neue User es viel leichter mit Windows-Alternativen haben, weil sie eben ganz neu dran gehen, da ist es egal ob Windows oder Mac oder... vielleicht liegts daran?)
Sind jedenfalls definitiv mehr als 20% der "User". Und da es davon eh nicht so viele gibt, lohnt es sich dann schon möglichst jeden User einzufangen 🙂
Natürlich nur wenn ich es hinkriege und es nicht überdimensional aufwendig ist.
(mache das ja auch in meiner Freizeit)

Nunja jedenfalls hat der Entwickler keine Zeit mehr das Programm fort zuführen.
Und da ich schon immer gern mit dem Programmieren anfangen wollte, es ja nun auch an der Uni mache und ich viele Ideen für das Programm habe, versuche ich das Projekt weiter zu führen.

Das mit dem selber zeichnen hatte ich mir ja schon gedacht.
Naja wenn ich dann für jedes System wieder alles eigens anpassen muss, dann hab ich auch nix gewonnen.
Somit wäre das wohl gegessen 😉 aber nice to know.

Als nächstes kommt GTK.
Ich denke das habe ich auch verstanden, hoffentlich...

Nur was ich mit Mono anfange, wird mir noch nicht ganz klar.

"Die Zeit ist das Feuer in dem wir verbrennen."

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Trotz wenig Zeit habe ich mich mal etwas durch mono-project.org geschlängelt.
Da habe ich auch ein Beispielprogramm für Mono/GTK# gefunden.
Habe mir also mal Mono installiert und das Programm compiliert.
Ausführen geht per "mono text.exe" oder auch einfach "test.exe", genauso wie per Doppelklick im Explorer.
Allerdings öffnet sich dann erstmal ein Kommandozeilenfenster, kann man dies irgendwie verstecken/unterdrücken?
Schlechter sah es dann schon auf einem zweiten Windowssystem aus.
Dort kam nur eine Ausnahme beim Start, wohl wegen der fehlenden GTK#-runtime.
Das ist schon wieder so ne Sache, weil die runtime wiegt mal eben 45MB im Download.
Und das kann ich den Usern nicht antun, die surfen zu grossen Teilen noch mit Modem.

Kann man also irgendwie alle benötigten Teile mit ins Programm einbinden? Oder wenigstens einen Installer generieren? So das die Installation bzw. das Programm selbst so schlank wie möglich wird.
Schon Firebird-embedded allein hat ja was bei 2MB...über 10MB sollte eigentlich der Download nicht wiegen.

Dann habe ich noch versucht das Programm unter Linux zu starten, aber da tut sich leider rein garnix.
Was habe ich da noch zu beachten?

Ich habe etwas gesucht nur leider wenig gefunden.
Nur einen Foreneintrag der besagte, dass man wohl "später" das Programm so "linken" könne, dass es sich unter Windows und Linux ausführen lässt.
Das wäre auch garnicht nötig, ich hätte kein Problem mehrere Versionen zum Download anzubieten.
Hauptsache ich muss den Code nicht x-mal schreiben und anpassen.

"Die Zeit ist das Feuer in dem wir verbrennen."

F
10.010 Beiträge seit 2004
vor 17 Jahren

Mono hat das gleiche Problem wie .NET.

Du benötigst zwingend das installierte Framework.
Ohne das geht garnichts.

Das gesammte Mono mit GTK# hat 45MB, und um das kommst Du nicht herum.

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Das kann ich nicht ganz nachvollziehen.
Wenn ich ein reines Konsolenprogramm schreibe (das einfach "Hello, World!" ausgibt)
dann läuft dieses Programm unter beiden Windows-Test-Systemen.
Nur eine GTK-Anwendung startet auf dem System ohne installiertem Mono nicht.
Hier fehlt scheinbar GTK.
Wenn ich jetzt weiterdenke, dann ist Firefox soweit ich weiß eine der bekanntesten Anwendungen die GTK verwendet, ist aber nur 5.4MB groß und läuft bei mir auf beiden Systemen tadellos.
🤔

"Die Zeit ist das Feuer in dem wir verbrennen."

1.457 Beiträge seit 2004
vor 17 Jahren

Ich glaube nicht das Firefox auf GTK basiert, zumindest habe ich es bis heute nicht gehört.

Kannst du das irgendwie belegen?

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Ich meine es gelesen zu haben, kann es aber nicht belegen.
Hab jetzt soviel gelesen, mir raucht schon der Kopf 😁

Also wenn ich immer die 45MB bei tun muss, dann kann ich es vergessen.
Das ist definitiv zu viel!

🙁

Unter Linux hab ich es auch noch nicht zum laufen gebracht.
Muss man das auch nochmal für/unter Linux compilieren damit es unter Linux läuft?

"Die Zeit ist das Feuer in dem wir verbrennen."

1.457 Beiträge seit 2004
vor 17 Jahren

Du musst sowohl unter Linux und auch unter Windows das Mono Framework mitliefern. Das ist auch beim .NET Framework so. Deswegen verstehe ich deine Ansicht bezüglich 45 MB sind zuviel nicht.

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Und warum läuft dann ein Monoprogramm unter Windows ohne Framework?

45MB sind zuviel für die User des Programms, die kriegste nicht davon überzeugt wegen dem Programm 45MB herunter zu laden.
Vorallem weil das aktuelle Programm 2MB gross ist!

"Die Zeit ist das Feuer in dem wir verbrennen."

6.862 Beiträge seit 2003
vor 17 Jahren

Es ist ja kein Mono Programm. Es ist ein CLI Programm und Mono und das Microsoft .Net Framework sind zwei Implementationen der CLI.

Wenn du unter Windows das Programm ausführst hast du die Wahl zwischen Mono und MS .Net, wenn kein Mono vorhanden ist, nimmt er auch das MS Framework. Du musst Mono deshlab nicht unter Windows installieren. Unter Linux dagegen ist Mono die einzig verfügbare Implementation und muss deshalb installiert sein.

Irgend eine Runtime muss daher auf jeder Plattform vorhanden sein.

Baka wa shinanakya naoranai.

Mein XING Profil.

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Achso, aber man kann nicht nur Teile davon beim Programm mit hinzufügen oder per Installer mit installieren, sondern muss immer das komplette Mono dabeigeben?
Weil wenn ich da so zusammen rechne:
Mono - 45MB
Firebird - 2MB
der eigene Programmcode - ?

Da wird das Programm ja mal eben über 50MB gross 8o

Edit:
Also so wie sich das entwickelt kann ichs wohl vergessen 🙁
Der Download wird viel zu gross, der Aufwand auch und jetzt hab ich gelesen mit Firebird auf Linux siehts auch nicht so toll aus, wills lieber garnicht erst probieren...

Tja schade für die Linux-Mac-User X(

"Die Zeit ist das Feuer in dem wir verbrennen."

R
494 Beiträge seit 2006
vor 17 Jahren

Gibt da zwei möglichkeiten:
Virtualisierung oder eben was andres als winforms verwenden. QT sieht recht interesant aus, inwiefern man da mit c# was machen kann weiß ich aber nicht. Alternativen wie eben Gtk+, oder java eclipse usw sehen nicht wirklich schön aus, ums mal nett zu formulieren.

D
368 Beiträge seit 2005
vor 17 Jahren

Ich denke die C#-Linie ist für deine Vorstellungen vielleicht noch unangebracht. Wenn ich eine Applikation bauen müsste die wirklich unter Win, Linux, Mac laufen muss würde ich entweder Jave nehmen, einfach weil das Java Framework eher auf den meisten Maschinen installiert ist als Mono. Oder aber das ganze in C/C++ realisieren wobei man dort sicherlich für jedes OS einen eigenen Code pflegen muss. Der großteil des Codes sollte aber gleich sein.

Gruß

Dragi

6.862 Beiträge seit 2003
vor 17 Jahren

Naja, jetzt hast mal am eigenen Leib erfahren was ich in meinem Anfangspost meinte von wegen es ist eine riesige Arbeit ein Programm auf mehreren Plattformen anzubieten und das es sich aus rein ideologischen Gründen kaum lohnt.

Da es das jetzige Programm deiner Aussage nach ja nur für Windows gibt, wäre eine Linuxversion, selbst mit 50 MB immer noch besser als gar keine Version 🙂
Ob der Aufwand sich lohnt ist wieder die ganz andere Frage.

Wie Dragi sagt ist der Großteil des Codes für alle Plattformen gleich. Die ganze Logik im Prinzip. Was sich unterscheidet ist nur der GUI Code. Da hast du dann die Wahl, entweder unterschiedliche GUIs wo du für jede Plattform eigenen Code schreibst und so z.B. für Linux GTK und für Windows Windows Form benutzt. Oder eine einheitliche GUI z.B. mit GTK, wo du dann aber die benötigten Dateien mitliefern musst, was wieder die Größe erhöht der Installation.

Baka wa shinanakya naoranai.

Mein XING Profil.

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 17 Jahren

Ich denke ich bleibe doch erstmal bei einer reinen Windows Version.
Dort kann ich Firebird embedded mit Sicherheit nutzen, so bleibt das Programm klein.
Wer Linux oder Mac nutzt und auf das Programm nicht verzichten will, kann vielleicht eine VM benutzen oder Windows auf ne zweite Partition setzten.
Sollte die Nachfrage trotzdem noch sehr groß sein, dann setzt ich mich vielleicht in späteren Semesterferien daran 😉
Erstmal muss ich das Programm ja überhaupt hinbekommen, bin ja selbst bei C# noch blutiger Anfänger!
(ich seh das schon Sachen auf mich zukommen, z.B. würde ich gern ein Plugin-System einbauen...)

Möglich wäre es also schon, aber mit Schwierigkeiten und der Tatsache, dass der Download wohl sehr groß werden würde.
Aber ich geh lieber auf Nummer sicher bei der Klientel...
Weil dann hab ich mir die Mühe gemacht, es läuft auf allen Systemen aber es lädt sich keiner runter, weil es so groß ist.
Das wäre ja dann auch doof 😜

Ich danke euch jedenfalls für die Hilfe, vielleicht komme ich auf den Thread zu einem späteren Zeitpunkt nochmal zurück =)

Wenn der Code wie ihr sagt nicht so unterschiedlich ist, dann ist es vielleicht auch nicht so schwer das Ganze später mal auf Mono/Gtk zu portieren.
Evtl. sieht die Situation dann auch schon deutlich anders aus...

"Die Zeit ist das Feuer in dem wir verbrennen."

R
494 Beiträge seit 2006
vor 17 Jahren

Naja, wenn ich ein Programm sehe, was mir was bringt, besser ist als nen andres das ich benutze, lad ich mir das runter egal ob jetzt 1, 10 oder 100mb. Wenn ich nen Modem hab frag ich eben jemand der irgendwas > Modem hat um an das Programm zu kommen, das sollte das gerinste Problem darstellen.

L
15 Beiträge seit 2007
vor 17 Jahren

Ich benutze QT für multiplattform Programme

O
778 Beiträge seit 2007
vor 17 Jahren

Hallo,

da mich das Thema auch interessiert (auch wenn nur für zukünftige Projekte), wollte ich da auch mal gleich eine Frage zum Thema stellen (geht in genau die gleiche Richtung, deswegen auch in diesem Thread): kann man eigentlich auch Bibliotheken von MS.NET, die keinen UI-Code enthalten unter Linux oder MacOS benutzen? Beziehungsweise, was müsste man tun, damit die Bibliotheken unter allen Plattformen verfügbar sind?

3.728 Beiträge seit 2005
vor 16 Jahren
mono

Das mono Framework ist ein kompletter Nachbau des Original Microsoft .NET Framework und enthält schon alle .NET Bibliotheken. Die Notwendigkeit MS Bibliotheken dort laufen zu lassen besteht also nicht.

Einige Bibliotheken sind noch nicht fertig portiert (z.B. System.Windows.Forms) aber bis Ende des Jahres dürfte sich da einiges tun. Bestimmte Features werden unter mono allerdings nicht funktionieren, da sie Bestandteile des Windows-Betriebssystems sind oder auf Betriebssystem-Funktionen zugreifen, die unter Linux nicht nachbildbar sind. Dazu gehören:*COM-Interop (COM ist eine properitäre unmanaged Microsoft Technologie) *Enterprise Services/COM+ (Den Windows eigenen Applikationsserver gibt es natürlich auch nicht unter Linux) *Code Access Security

DarsVaeda Themenstarter:in
43 Beiträge seit 2006
vor 16 Jahren

Original von lightningdotnet
Ich benutze QT für multiplattform Programme

hi,
danke für deine antwort.
zieht sich momentan bei mir alles ganz schön durch andere verpflichtungen 🙁

QT sieht wirklich recht interessant aus.
man kann mit firebird embedded arbeiten wenn ich das recht sehe und hat linux, mac und windows?
allerdings scheint die zusammenarbeit c# - qt noch nicht so recht weit entwickelt?
wie schaut das da aus?
c++ wird ja scheinbar von hause aus supported.

obwohl ich mittlerweile recht viel mit c++ arbeite, dank uni, würde ich trotzdem lieber mit c# programmieren.

"Die Zeit ist das Feuer in dem wir verbrennen."

D
386 Beiträge seit 2007
vor 16 Jahren

Ich wuerde bei Windows.Forms bleiben. Die Wahrscheinlichkeit, dass das was du brauchst bei mono nicht vorhanden oder fehlerbehaftet ist halte ich fuer sehr gering und fuer vernachlaessigbar.

Mono braucht man im Gegensatz zum .Net Framework nicht "installieren", nur mit ausliefern. Das macht fuer dein Problem mit der Groesse keinen Unterschied ist aber interessant beim Deployment ggf..

Datenbanken: Was haelst du von SQLite? Duerfte klein sein, gibt es fuer Windows und Linux (bei Mac wuerd ich es fast unterschreiben, hab es aber nicht nachgeschaut) und ist fuer kleinere Projekte wie dieses einfach zu nutzen.

GTK vs. QT koennte zwar zu einem netten Flame fuehren, grundsaetzlich sind aber beides "nur" andere Window Toolkits. Wenn du GTK# nicht nutzen willst weil es extra mitgeliefert werden muss, dann musst du auch auf QT verzichten.
Der Rest ist dann wohl reine Geschmackssache.

Pound for pound, plutonium is about as toxic as caffeine when eaten.