eierl.Wollmilchsau
Anmeldungsdatum: 24. Juli 2014
Beiträge: 144
|
Zunächst einmal hoffe ich, dass ich diesen Thread im richtigen Unterforum "versenkt" habe(ich habe meine Threads schon oft genug im falschen Forum "versenkt" und es war mir immer sehr peinlich)
Dieser Thread soll in keinster Weise irgendwie provozierend wirken, schon gar nicht nach dem Motto „Linux ist scheiße“, es ist schlich und ergreifend eine prinzipielle Frage:
Mir fällt auf, dass einige Pakete viele, manchmal sehrviele Abhängigkeiten haben. Der Sinn sollte klar sein; das benötigte Paket wird von der Paketverwaltung automatisch mitinstalliert. Viele dieser Abhängigkeiten sind je nach Distribution schon standardmäßig installiert, andere nicht.
Manchmal frage ich mich mich aber ernsthaft nach der Sinnhaftigkeit. Es gibt Programme beziehungsweise Software, wie z.B. GIMP; da gibt Gimp Gimp-data und noch irgendetwas, was auch Gimp im Namen hat. Oder bei OpenTTD sind opnttd, openttd-data und openttd-opengfx essentiell, um das Programm überhaupt benutzen zu können und openttd-openmsx und openttd-opensfx sind sehr sinnvoll zu installieren. Das sind bei weitem nicht die einzigen Beispiele; ich habe jetzt aber keine Lust, noch unzählige weitere zu nennnen. Warum packt man das nicht in ein Paket? Nun gibt es noch eine zweite Art von Abhängigkeiten; Abhängigkeiten, die nichts mit der Software selber zu tun haben, aber benötigt werden. Diese automatisch zu installieren ist ebenfalls sinnvoll.
Aber nun wollen wir und mal von GNU/Linux abwenden und auf andere Betriebssysteme schauen. Unter OS X und Windows gibt es keine Paketverwaltung, geschweige denn ein automatisches Auflösen von Abhängigkeiten. Sicherlich muss man auch hier mal das eine oder andere extra installieren aber es ist doch sehr selten.
Meine Frage daher:
Auch wenn es nicht direkt mit GNU/Linux zu tun hat, wie wird das Problem denn unter den eben genannten Betriebssystemen gelöst?
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
eierl.Wollmilchsau schrieb: Manchmal frage ich mich mich aber ernsthaft nach der Sinnhaftigkeit. Es gibt Programme beziehungsweise Software, wie z.B. GIMP; da gibt Gimp Gimp-data und noch irgendetwas, was auch Gimp im Namen hat. Oder bei OpenTTD sind opnttd, openttd-data und openttd-opengfx essentiell, um das Programm überhaupt benutzen zu können und openttd-openmsx und openttd-opensfx sind sehr sinnvoll zu installieren. Das sind bei weitem nicht die einzigen Beispiele; ich habe jetzt aber keine Lust, noch unzählige weitere zu nennnen. Warum packt man das nicht in ein Paket?
Weil das Paket dann unnötig groß würde. Nehmen wir mal OpenTTD als Beispiel. *-opengfx enthält zum Beispiel ein Grafikpaket, *-opensfx Sound-Dateien (Musik und Effekte). Jetzt gibt es einen Fehler im Programm, ein Patch wird veröffentlicht. Ton und Bilder werden von dem Patch überhaupt nicht beeinflusst. Ähnlich ist es bei dem Beispiel Gimp. In gimp-data sind die Brushes, Texturen usw. Daten die sich eher selten verändern. Anstatt den Anwender jetzt zu zwingen Megabyte/Gigabyte weise Daten runter zu laden, die sich überhaupt nicht verändert haben, teilt man das Paket auf und aktualisiert nur den Teil, der sich tatsächlich verändert hat.
Aber nun wollen wir und mal von GNU/Linux abwenden und auf andere Betriebssysteme schauen. Unter OS X und Windows gibt es keine Paketverwaltung, geschweige denn ein automatisches Auflösen von Abhängigkeiten. Sicherlich muss man auch hier mal das eine oder andere extra installieren aber es ist doch sehr selten.
Meine Frage daher:
Auch wenn es nicht direkt mit GNU/Linux zu tun hat, wie wird das Problem denn unter den eben genannten Betriebssystemen gelöst?
Mit einer DLL_Hell. Entweder man baut jede Bibliothek und Abhängigkeit direkt in die Programmdatei ein (statisches Linken) – das resultat sind vergleichsweise riesige Binärdateien, oder man liefert die benötigten Abhängigkeiten in Bibliotheken (DLLs unter Windows) mit und installiert diese – was dann zu Konflikten mit anderen Anwendungen führen kann die die selbe Bibliothek aber in einer anderen Versionsnummer benötigen. ~jug
|
eierl.Wollmilchsau
(Themenstarter)
Anmeldungsdatum: 24. Juli 2014
Beiträge: 144
|
Diese Konflikte kann es unter Linux dann aber auch geben, weil ja auch nur eine Version der Bibliothek installiert sein kann, da sich sonst die beiden Versionen gegenseitig die Pfade im Dateisystem wegnehmen würden. Hier wäre es deutlich sinnvoller, wenn jede Software ihre Bibliotheken als eigenständige Kopie selbst mitbringt und an einen Ort im Dateisystem setzt, an dem andere Programme nichts verloren haben. Z.B. legt Softare X alle benötigten Biliotheken unter z.B. & /usr/X/lib/ ab. Softare Y hat unter /usr/X/lib/ nichts verloren.
So würden Konflikte vermieden, wie sie zur Zeit schnell auftreten können und nervige Abhängigkeiten würden vermieden und die ganze Paktverwaltung würde flexibler werden und es würde zu weniger Problemen kommen. Dein Argument mit den unnötig großen Paketen kann ich nicht nachvollziehen: Teilen wird das Paket doch gleich in 1000 Stücke! Wär bestimmt 'ne gute Idee!
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
eierl.Wollmilchsau schrieb: Diese Konflikte kann es unter Linux dann aber auch geben, weil ja auch nur eine Version der Bibliothek installiert sein kann, da sich sonst die beiden Versionen gegenseitig die Pfade im Dateisystem wegnehmen würden.
Ja, aber dazu gibt es die Paketverwaltung und da kümmern sich die Maintainer der Pakete drum, dass es da keine Konflikte gibt! Hast du den verlinkten Artikel nicht gelesen?
Hier wäre es deutlich sinnvoller, wenn jede Software ihre Bibliotheken als eigenständige Kopie selbst mitbringt und an einen Ort im Dateisystem setzt, an dem andere Programme nichts verloren haben.
Ja, so machen das viele Windows-Programme, und es ist eine mittlere Katastrophe sowas zu pflegen und zu aktualisieren.
So würden Konflikte vermieden, wie sie zur Zeit schnell auftreten können und nervige Abhängigkeiten würden vermieden und die ganze Paktverwaltung würde flexibler werden und es würde zu weniger Problemen kommen.
Und du willst wirklich niemanden provozieren?
Teilen wird das Paket doch gleich in 1000 Stücke! Wär bestimmt 'ne gute Idee!
Ok, ich bin raus. Natürlich wird in sinnvolle Pakete geteilt. Traust du den Maintainern der Distributionen und der Pakete denn überhaupt nichts zu? ~jug
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Ich möchte Jugs Aussagen um 2 ergänzen: Dass man überhaupt mit dynamisch gelinkten Bibliotheken arbeitet hat noch 2 weitere Gründe: a) Wenn mehrere Programme die die gleiche Bibliothek benötigen, dann muss sie meines Wissens auch nur einmal in den Speicher geladen werden.
b) Wenn es ein Update einer solchen Bibliothek gibt muss sie nur einmal upgedated werden. Man muss nicht warten bis jedes einzelne Programm ein Update bietet und man muss den Patch nur einmal runterladen. Unter Mac und Windows ist es wegen des kommerziellen Charakters, bei dem jeder Softwareverkäufer sein eigenes Süppchen kocht, anders. Die Basisbibliotheken sind zum großen Teil nicht frei. Man will aber auch keine zentrale Windowsinstanz die den Zugang ins Repository regelt - das würde Microsoft noch mehr Marktmacht verschaffen. Müsste man sich in das Repository erst einkaufen? Wie wäre die Verantwortlichkeit geregelt? Hier steht dann schnell wieder die Kartellbehörde vor der Tür.
|
eierl.Wollmilchsau
(Themenstarter)
Anmeldungsdatum: 24. Juli 2014
Beiträge: 144
|
Ich sehe aber auch die Vorteile, wenn jedes Programm einfach mitbringt, was es so braucht. Ich entwickle ein Programm und muss mich nicht darum kümmern, ob und welche Version der von mir benötigten Bibliotheken in den Quellen welcher Distributionen enthalten sind. Mein Programm funktioniert unabhängig von der Distribution und ist damit auch flexibler. jug schrieb: jug schrieb:
Ja, so machen das viele Windows-Programme, und es ist eine mittlere Katastrophe sowas zu pflegen und zu aktualisieren.
Was soll daran bitte kathastrophal zu pflegen sein? Im Gegenteil: Ich aktualisiere die Libs in meinem Programm und es funktioniert einfach. Ich bin nicht erst darauf angewiesen, dass die Maintainer von Distribution X eine neue Lib einführen. Aber was soll die ganze Disskussion eigentlich? Das hat ja eigentlich mit GNU/Linux nichts zu tun, sondern vielmehr damit, was der Entwickler der Software für besser hält.
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
eierl.Wollmilchsau schrieb: Ich sehe aber auch die Vorteile, wenn jedes Programm einfach mitbringt, was es so braucht.
Du siehst … ja, und seit etlichen Jahren gibt es Linux und Paketverwaltungen, daran arbeiten hunderte, tausende von Menschen als Entwickler der Paketverwaltungssoftware und als Maintainer der Pakete für die verschiedenen Distributionen. Meinst du nicht, wenn das tatsächlich besser wäre, dass es dann so gemacht würde?
Ich entwickle ein Programm und muss mich nicht darum kümmern, ob und welche Version der von mir benötigten Bibliotheken in den Quellen welcher Distributionen enthalten sind.
Darum musst du dich gar nicht kümmern, das macht die Distribution beziehungsweise die Maintainer, die die Pakete für die jeweilige Paketverwaltung bauen. Zweitens definierst du welche Schnittstellen deine Software anspricht (API/ABI) die müssen vom System bereit gestellt werden. (Anmerkung: die Möglichkeit hast du trotzdem, ich glaube Steam macht sowas, es gilt nur als schlechter Stil in der Linux-Welt.) Software spricht dutzende, manchmal hunderte von Bibliotheken an – willst du die einzeln selbst pflegen? Für jede einzelne Bibliothek Sicherheitsupdates einpflegen und ein neues Paket bauen? Damit sich die Nutzer den kompletten Download antun müssen, weil du und hunderte von Programmen die jeweils ihre Kopie der libc aktualisiert haben? Was ist, wenn dir dazu mal die Zeit fehlt und alle anderen Programme sicher sind, nur deines hat noch kein Update der unsicheren Bibliothek durchgeführt?
Aber was soll die ganze Disskussion eigentlich?
Du hast damit angefangen das Konzept der Paketverwtungen und ihrer Abhängigkeiten zu hinterfragen und wenn man dir jetzt Argumente liefert, dann passt dir die Diskussion nicht? Hmm … ~jug
|
Benno-007
Anmeldungsdatum: 28. August 2007
Beiträge: 29240
Wohnort: Germany
|
Es gibt viele kommerzielle Pakete, die alles mitbringen. Und das sind oft GB-große Installationsordner, auf die man unter Linux nun wirklich wenig Bock hat. Aber ja, wenn es sein muss, mach es. Wenn es vermeidbar ist und andere Software mit einem Bruchteil auskommt, wird eben deine Software nicht so häufig genutzt. 😉 Man muss eben abwägen, ob man Robustheit oder Schlankheit haben will - und selbst Win mit dem "Robustheitskonzept alles in 1 Ordner je Programm" höhlt sich selber aus, indem es zu viele Dateien doch wieder als DLL-Hölle mixt. Da ist Linux mit seinem "Schlankheitskonzept" wesentlich strenger mit sich selbst. Und bei weitem nicht unrobust - das wird es fast nur, wenn du es mit Fremdquellen zumüllst. 😛 Der Pflegeaufwand der x Kopien unter Win ist auch einfach zu groß, also werden Bugfixes zur Stabilitätserhöhung gar nicht in jeder Kopie ankommen...und dann gibt es neue Programmierfehler durch diese unterschiedlichen Versionskopien... Ubuntu Core „Snappy“ bietet aber genau das, was du möchtest - und geht sogar noch darüber hinaus, indem es je Anwendung riesige Systemteile+Anwendungs-Container anlegen kann. Für Server ist das ok, da darauf eher weniger Anwendungen laufen, diese aber sehr stabil laufen sollen. Auf einem Desktop dagegen würde es zu unnötigem Platzverbrauch und Trägheit führen, Stabilität im Sinne von "Programm darf nieee abstürzen" ist hier unnötig übertrieben hoch, also extra dafür Container anzulegen. Aber da Snappy auch auf dem neuen Raspberry Pi B 2 läuft und dort auch einen Desktop kann, ist es trotz begrenztem Platz natürlich auch möglich. Vielleicht ist das dort (als Dekstop statt Server) aber gar nicht der Sinn, sondern nur die ARM-Architektur-Unterstützung erwünscht... Toll ist ja auch, dass man bei Ubuntu schnell ein Tool nachinstallieren kann und es ist nur paar KB groß. Ja, warum wohl? Weil nicht Kopien mitgeschleift werden, die eh schon wegen 10 andren Programmen auf dem System rumliegen. Vorteil auch für Ubuntu Phone, wenn man unterwegs schnell mit wenig Volumen und Geschwindigkeit einen Befehl nachinstallieren will. ☺ Windows braucht ja etwa 10 mal soviel Platz wie Ubuntu, sei es Grundinstallation oder mit vielen Programmen. Also bräuchte Ubuntu dann ja schon 11 statt 1,1 GB - und damit 3 normale DVD. Ne danke, muss nicht sein, Disk-Jockey-Zeiten für Betriebssysteme sind eigentlich vorbei. 😉 Und nicht auszudenken, wie groß dann die Downloads würden...statt vielleicht 400 MB Updates auf einer etwas abgehangenen 14.04.0-er Scheibe dann 4 GB und dann statt 10 min Installation 100 min (über 1,5h)?? Ne danke - dann kann ich auch Win nehmen - oder zu ReactOS wechseln, weil das dann schlanker als Linux wäre. Noch. 😉 Grüße, Benno Edit: 2 6 Absätze dazu. War erst zu faul. 😛
|
V_for_Vortex
Anmeldungsdatum: 1. Februar 2007
Beiträge: 12085
Wohnort: Berlin
|
Benno-007 schrieb: Toll ist ja auch, dass man bei Ubuntu schnell ein Tool nachinstallieren kann und es ist nur paar KB groß.
Und die Paketverwaltung entfernt auf Wunsch (apt-get autoremove) bzw. automatisch (aptitude (Abschnitt „System-auf-ueberfluessige-Pakete-untersuchen“)) Abhängigkeiten, die von keinem installierten Paket mehr benötigt werden.
Windows braucht ja etwa 10 mal soviel Platz wie Ubuntu, sei es Grundinstallation oder mit vielen Programmen.
Und dass, obwohl Windows in der Grundinstallation kaum Anwendungen mitbringt, während Ubuntu eine solide Standardauswahl an vielen Anwendungen mit installiert. Klar ist das in gewisser Weise Glaubensfrage (Stabilität gegen Platzersparnis und Wartbarkeit), aber ich bevorzuge nach fast zwanzig Jahren Windows-LeidErfahrung definitiv das Linuxmodell. 👍 Und als Entwickler sollte man sich möglichst an die Standards des Systems halten, für das man entwickelt – wenn nicht wirklich triftige Gründe im Einzelfall dagegen sprechen.
|
Cruiz
Anmeldungsdatum: 6. März 2014
Beiträge: 5557
Wohnort: Freiburg i. Brsg.
|
Zudem ist es teilweise einfach überflüssig. Ein gutes Beispiel dafür ist Qt, eine Bibliothek, die auch unter Windows oft von Programmen verwendet wird. Unter Linux ist sie einmal im System vorhanden (gesplittet in einige Pakete, weil man nicht alle benötigt). Unter Windows bringt sie jedes Programm mit. Das führt dazu, dass man x Kopien von Qt auf seinem System hat. Jetzt kann man argumentieren, dass Festplattenplatz billig ist, aber in Zeiten von Mobilgeräten und SSDs ist das auch nicht mehr unbedingt wahr. Windows kennt sowas theoretisch übrigens auch. Viele Programme hängen von .NET ab, das zentral im System installiert wird.
|
glasenisback
Anmeldungsdatum: 20. November 2011
Beiträge: 1603
Wohnort: Fernwald (Gießen)
|
jug schrieb: eierl.Wollmilchsau schrieb:
Anstatt den Anwender jetzt zu zwingen Megabyte/Gigabyte weise Daten runter zu laden, die sich überhaupt nicht verändert haben, teilt man das Paket auf und aktualisiert nur den Teil, der sich tatsächlich verändert hat.
Das stimmt leider nur zum Teil. Im Fall von "gimp-data" und "gimp" werden immer beide zusammen heruntergeladen, da "gimp" von ersterem abhängt. Richtiger wäre zu sagen, dass in den "data"-Paketen plattformunabhängige Dateien vorhanden sind, welche sich auf allen unterstützen Plattformen installieren lassen. Dadurch reicht es nur die plattformspezifischen Pakete in ein Paket zu verpacken, was am Ende sehr viel Serverplatz spart. Der Anwender merkt davon aber nichts, da in der Regel immer beide Pakete installiert und auch aktualisiert werden. Nur wenn es um optionale Pakete geht (Wie z.B. die Sprachspezifischen Hilfepakete von GIMP), spart der Anwender Zeit und Downloadvolumen.
|
Tids
Anmeldungsdatum: 29. Oktober 2008
Beiträge: 3065
Wohnort: Naumburg (Saale)
|
Übrigens nerven mich ständig Programme die eigenen Libs mit bringen. Nehmen wir Steam und dessen Spiele, welche fast durchweg die libstdc++.so.6
find ~ -iname "*libstdc++*.so*6*" | wc -l
mit bringen, welche ich nach jedem Update suchen und löschen muss, weil diese inkompatibel zu Mesa zu sein scheint und ich somit keines der Spiele, oder gar Steam zu starten bekommen. Ähnliches dazu habe ich mit teamspeak3, welches ein eigenes Qt mit bringt, was inkompetibel zum im System vorhandenen zu sein scheint. Auch hier muss ich bei jedem Update (Und da nervt es echt, weils nicht einfach mit find getan ist) die Libs löschen damit er die direkt vom System nimmt. Den einzigen wirklichen Nachteil den ich beim Paketsystem sehe ist, die Abhängigkeit vom Internet. Mal eben ein Paket mit Freunden tauschen ist, weil kompliziert, schwer möglich. Eine einfachere Möglichkeit Pakete überhaupt (und debian konform) zu bauen, das würde ich mir allerdings wünschen. Warum sich hier niemand ran gesetzt hat die letzten Jahre verstehe ich nicht.
|
eierl.Wollmilchsau
(Themenstarter)
Anmeldungsdatum: 24. Juli 2014
Beiträge: 144
|
Was auch manchmal nervig sein kann, sind die zig verschiedenen Ubunbtu-Derivate, die inter Standardinstallation teils unerschiedliche Pakete mitbringen, weshalb sich die tatsächlich zu installierenden Abhängigkeiten teils unterscheiden;
Für bcmwl-kernel-source muss ich unter dem inoffiziellen Linux Mint z.B. ganz andere Abhängigkeiten nachinstallieren, als unter Standard-Ubuntu, unter Ubuntu Mate muss man dann wieder andere nachinstallieren. Das Bekloppteste wäre aber, die Abhängigkeiten, ohne sie an eine andere Stelle zu schieben, in das Paket zu integrieren. Dann würden sich Pakete bei der Deinstallation gegenseitig die Abhängigkeiten wegnehmen. Oder gibt es da irgendeine Möglichkeit?
|
ChemicalBrother
Ehemaliger
Anmeldungsdatum: 17. Mai 2007
Beiträge: 3136
|
Es gibt Gründe, warum Linux Mint und Ubuntu 2 verschiedene Distributionen sind.
|
eierl.Wollmilchsau
(Themenstarter)
Anmeldungsdatum: 24. Juli 2014
Beiträge: 144
|
Klar aber es gibt da auch unter den offiziellen Derivaten Unterschiede.
|