Was muss ich beachten, wenn ich eine Anwendung schreiben möchte, die auf jeder Linux-Distribution läuft?

15

Ich plane, eine App zu schreiben, die ich auf jeder Linux-Installation ausführen möchte, ohne dabei den Code neu schreiben zu müssen (außer vielleicht der Schnittstelle, GNOME vs KDE usw.).

Ich bin nicht sehr erfahren in den Details der Unterschiede zwischen Distributionen und kann auch keine Details über das Projekt angeben, da es gerade erst in die Planungsphase eingetreten ist, außer dass es tief im Inneren des Kernels stöbert, um zu interagieren mit so viel von der Hardware des Computers wie möglich.


quelle
Open Source oder proprietär? kompiliert oder interpretiert?
Xenoterracide
Open Source und kompiliert.
na dann brauchst du dir keine sorgen zu machen, ob du eine kleine app / makefile oder so was schreibst, die dein programm neu verknüpft, wie es oracle tut
xenoterracide

Antworten:

10

Einige Punkte, die Sie bei der Entwicklung beachten sollten:

  1. Verwenden Sie ein Standardbuildsystem
  2. Vermeiden Sie harte Kodierung Bibliothek Pfade
  3. Verwenden Sie pkg-configstattdessen Tools , um die externen Pakete zu finden.
  4. Wenn Ihre Anwendung über eine GUI verfügt, verwenden Sie einige Frameworks, wxWidgetsdie je nach Ausführungsort native UI-Elemente rendern können.
  5. Vermeiden Sie das Erstellen von Abhängigkeiten mit Paketen, die nicht auf anderen Distributionen ausgeführt werden.

Die einzige Möglichkeit, sicherzustellen, dass Ihre Anwendung auf allen Distributionen funktioniert, besteht darin, sie tatsächlich auszuführen und zu testen. Eine Möglichkeit, dies zu tun, besteht darin, virtuelle Maschinen für jede Distribution zu erstellen. Hierfür kann VirtualBox verwendet werden. Ich habe ungefähr 8 virtuelle Maschinen auf meiner Box für diese Art von Tests.

Ich denke, Sie können nicht zu viel über die Bereitstellung der Anwendung verallgemeinern, da jede Distribution unterschiedliche Installationsmethoden für Pakete verwendet. Debian verwendet debund Fedora rpm.

Navaneeth KN
quelle
3
Vermeiden Sie einfach harte Codierungspfade, der größte Unterschied zwischen ALLEN Distributionen ist der Paket-Manager und der Ort, an dem sie Dinge ablegen. Angenommen, sie legen jede einzelne Datei und jedes Verzeichnis an einem anderen Ort als Sie ab.
Xenoterracide
2

Nur mein 2c, aber ich hatte weniger Kopfschmerzen mit Anwendungen, die entweder mit Paketen in den offiziellen Repositorys geliefert wurden oder aus dem Quellcode kompiliert wurden. Anwendungen, die als Drittanbieter-Binärdateien vertrieben werden, neigen dazu, unter Abhängigkeitsproblemen zu leiden. Normalerweise muss ich diese aufspüren und manuell beheben.

Wenn ich also eine Linux-App veröffentlichen würde, würde ich entweder daran arbeiten, sie zu packen und in die offiziellen Repositories zu bringen. Ansonsten würde ich es in Quellform verteilen und den Benutzer es für sein System kompilieren lassen.

Sybreon
quelle
2

Wenn Sie für nicht eingebettetes Linux schreiben, müssen Sie vor allem berücksichtigen, dass verschiedene Distributionen eine unterschiedliche Sammlung von Bibliotheksversionen haben. Sie sollten also eine ausreichend alte Grundlinie festlegen. Da Debian langsam aktualisiert wird, ist Debian stable (oder oldstable, wenn es existiert, in den wenigen Monaten nach einer Veröffentlichung) eine vernünftige Wahl.

Sie müssen für jede Distribution separat paketieren. Wenn Ihre Anwendung Open Source ist und überhaupt erfolgreich ist, können Sie sich darauf verlassen, dass jemand sie aufnimmt und die Verpackung beisteuert. Dies ist also keine wesentliche Fähigkeit. Anders als beim Packen wirken sich die Unterschiede zwischen den Distributionen hauptsächlich auf die Systemadministration aus, nicht auf die Entwicklung oder den täglichen Gebrauch.

Wenn Sie den Kernel patchen möchten, müssen Sie mit mehr Distributionen testen, da jede Distribution ihre eigenen Patches hat, die zu Inkompatibilitäten führen können, und jede Distribution über Userland-Einstellungen verfügt, für die möglicherweise unterschiedliche Sätze von Kernel-Schnittstellen verfügbar sind (z. B. Anforderungen) für manche Dinge nicht Module sein).

Beachten Sie, dass das, was ich oben geschrieben habe, nicht zutrifft, wenn Sie möchten, dass Ihre Anwendung auf eingebetteten Systemen funktioniert (hier bedeutet es, dass es sich nicht um einen Server, Desktop oder Laptop handelt). beginnend mit dem Verzicht auf Glibc zugunsten von µClibc , Dietlibc , Bionic usw.

Gilles 'SO - hör auf böse zu sein'
quelle
0

Distros unterscheidet sich hauptsächlich in den Standardeinstellungen / Konfigurationen für Verpackung und Anwendung. Jeder Code, der in einer bestimmten Architektur ausgeführt wird, sollte auf jeder Distribution dieser Architektur ausgeführt werden. Sie können GNOME-Apps auch problemlos in KDE ausführen und umgekehrt, sodass Sie eine auswählen können, die am besten zu Ihnen / Ihrer Nutzerbasis passt, und fertig!

Herr Shunz
quelle
0

Die Hauptsache ist die Wahl einer Sprache. In welcher Sprache wird dies ausgeführt? Wenn Sie wirklich mit einer Linux-Distribution arbeiten möchten, können Sie diese in Python schreiben. Jede Python-App, die unter Linux läuft, läuft (im Grunde genommen) auf jeder Linux-Distribution mit 0 Modifikationen.

Python hat auch sehr schöne GTK- und Qt-Ordner. Ich habe noch nie mit gtk gearbeitet, aber PyQt ist wirklich großartig, um damit zu arbeiten.

Der Vorteil von Python besteht darin, dass Sie wahrscheinlich keine Erweiterungen kompilieren müssen (dies hängt jedoch stark von dem ab, was Sie schreiben. Auch wenn dies erforderlich ist, ist dies ziemlich einfach.) Und dass Sie über Pypi eine großartige Distributionsquelle haben . Die Installation von Python-Programmen von dort aus ist in der Regel noch einfacher als das Paket-Repository der Distribution.

Falmarri
quelle