oreissig's Unix-Rant

  • Häufiger werd ich gefragt, warum ich eigentlich auf Windows rumhocke, obwohl das doch weder besonders cool, noch besonders mächtig ist, und auch nicht gerade von einer besonders sympathischen Firma hergestellt wird (siehe Kooperation MS und NSA). Warum setze ich denn nicht wie die meisten Nerds mit vergleichbarer Nerdigkeit auf Linux (oder ein anderes Unix-artiges System)?

    Tja, gute Frage eigentlich. Etwas Faulheit ist dabei, aber das ist es nicht. Ich kann schon grundlegend Linux, das ist nicht das Ding. Auch meine Apps unter Windows gibts praktisch durch die Bank auch für Linux, das ist es auch nicht. Es ist eine tiefergehendere Unzufriedenheit mit dem Unix-Ökosystem, die ich gern mal detailliert darlegen will, um zu schauen, ob ich mich einfach nur in einer One-Man-Filterbubble befinde, oder vll wirklich nen validen Punkt habe. Ich fang daher mal an mit den von mir erlebten Symptomen und versuche dann darzulegen, warum ich glaube da ein viel fundamentaleres Problem zu haben.

    Symptom

    Natürlich hab ich schonmal Linux gemacht, nicht nur einmal. Meistens zwar nur in der VM, weil bequem, aber ich hatte schon etliche Linuxe. Bei manchen hab ich verrückte Dinge getan, irgendwelche krassen configs zerwurstet, krasse Kernels gebacken, aber in den allermeisten Fällen wars einfach nur ne default installation ohne viel customization und dann noch ne kleine Hand voll Allerweltstools über den Paketmanager nachgeladen. So weit, so gut. Dann geht Zeit ins Land und es gibt neuere Versionen. Also Paketmanager fuck yeah, dazu gibts das Ding ja, schön geapt-get upgradet oder gepacman -Syut. Dann gibts zwei Fälle:
    1.a) es ist eine Release Distro, dann bekomm ich das Update von foo 2.3.0.21 auf 2.3.0.22, obwohl der Rest der Welt ungefähr bei 2.5.1 oder 3.0 ist.
    1.b) beim Update des Releases geht mir das Scheißding kaputt. Paketmanager sagt "update erfolgreich", neustart, kernel panic. Bin da etwas deb-lastig unterwegs, aber konkret ist mir das exakt so schon bei Debian, Ubuntu und Mint passiert.
    2. es ist eine rolling release Distro, bei der einfach ständig immer mehr Kleinigkeiten kaputtgehen. Ich will jetzt gar nicht mit der Diskussion anfangen, ob das von Arch eine gute Idee ist oder nicht, dass der Paketmanager keine automatischen Migrationen macht, sondern mich lieber auf das zugrundeliegende Problem vertiefen:

    Warum gehen mir alle meine Linuxe kaputt, obwohl ich nichts außergewöhnliches mit ihnen mache, obwohl ich unter Windows oder auch Android immer bleeding edge bin? Aktualität (deren Mangel auch immer gern als "Stabilität" bezeichnet wird, wobei ich da eher ne andere Definition hätte) kann es nicht sein. Ich hab unter Windows immer den neusten Firefox, die neusten Windows-Updates, etc. und nie nen Kernel Panic. Selbiges am Handy unter Android.

    Hypothese

    Ich behaupte, dass das Problem ganz fundamental in der Struktur klassischer Unixsysteme begründet liegt. Unix ist gedacht als eine integrierte Umgebung, in der alles total super aufeinander abgestimmt ist, sodass sich der Entwickler dabei voll austoben kann. Das ist toll für den Nutzer (der dem Urgedanken nach praktisch immer Softwareentwickler war). Er hatte einen tollen Baukasten und jede Menge Flexibilität, aus den Bausteinen Sachen zusammenzustecken.

    Das Dateisystem sieht genau so aus: ein integrierter Baukasten. Alles ist perfekt miteinander verwoben. Alles liegt an seinem Ort: Konfigs in /etc, binaries in /usr/bin (oder einem der anderen bins), Programmdaten unter /var, Nutzerdaten im /home und temporärer Krams im /tmp. Toll, alle temporären Dateien liegen unter /tmp, alle binaries in (einem der vielen) .../bin. Zwischen Programmen muss man ja nicht trennen, ist ja schließlich alles ein integriertes System. Da ists egal, ob man sh, grep oder firefox hat, liegt alles in den selben Verzeichnissen. Gut integriert also.

    Oder andersgesagt: der reinste Alptraum, der Paketmanager unter Linux managt alles mögliche, aber keine Pakete, weil Pakete sowas wie nen Karton haben, der sie abgrenzt. Das ist eher eine Gemüsesuppe, es gibt überhaupt keine Komponentisierung, alles hängt mit allem zusammen, alles ist ein globaler Namensraum. Um es nochmal mit der Analogie des Programmierens zu bringen: Angenommen man macht prinzipiell alle Variablen public, greift zünftig zum GOTO, und fängt dann an seine 10 Mio Lines of Code-App zu schreiben. Kann man machen, vll klappts sogar, aber nach all den Jahren der Computerei hat sich halt herausgestellt, dass ein sowas wie Abstraktion und Information Hiding durchaus ganz hilfreich sein können. Dass man Komponenten entwickelt, die man größtmöglich voneinander abgrenzt. Warum sollte das bei der Betriebssystemstruktur nicht auch so sein?

    Ist bisschen wie LISP: klassische LISP-Systeme hatten als unheimlichen Vorteil ihre Integriertheit und die Flexibilität des Entwicklers. Da gab es auch keine störende Trennung zwischen App und OS, jeder Entwickler konnte Basisroutinen nach seinen Belieben verändern optimieren, wodurch man schnell Dinge programmiert bekommen konnte. Genau darum gings, schnell Dinge tun, deswegen waren LISP-Machines so unglaublich beliebt bei den großen Hackern der Zeit (Stallman). Der Nachteil ist natürlich, dass man die App nicht einzeln irgendwie weitergeben kann, sondern nur die sog. World, d.h. quasi einen gesamten Plattendump. Aus dem General Purpose Computer wurde damit quasi ein Single Function Device...

    Die Offenheit

    Linux-Systeme sind ja offen und so. Und kompatibel, weil POSIX. Und überhaupt. Tja, finde ich irgendwie nicht so. Eigentlich ist man seinem Distributor ziemlich ausgeliefert, weil man standardmäßig alle seine Software ausschließlich von ihm bekommt.
    Pakete anderer Distros installieren? nope
    Selbst wenn sie den selben Paketmanager verwenden? hell no

    Klar kann man sich alternative Repos in seinen Paketmanager reinladen, und dann? Tendenziell ist das ja kein völlig isoliertes Ökosystem, bei dem man unabhängige Komponenten zusammenstecken kann, wie man will. Der große Vorteil von Paketmanagern unter Linux ist ja, dass er Abhängigkeiten auflöst, die die Komponenten in dem perfekt integrierten System Unix untereinander haben. Nur leider ist die Deklaration nur die halbe Wahrheit. Die Abhängigkeit heißt vll "libsqlite, Version >=3.8 <4.0", aber mehr als ein String ist das nicht. Wenn der Krams doch nicht zusammenpasst (z.B. weil in zwei Paketquellen das selbe Paket doppelt drin liegt, nur mit anderen Flags compiliert wurde), dann rumpelt der Karton. Jede zusätzliche Paketquelle im Paketmanager ist eine zusätzliche Gefahr, sich sein Basissystem (und damit insbesondere auch alle Apps, die man gar nicht aus dem neuen Repo geladen hat) zu zerschießen.

    Mal kurz ein Blick zu Windows:
    Man könnte wahrheitsgemäß sagen, dass Windows kacke ist, weils keinen Paketmanager hat. Man könnte aber auch sagen, dass Windows das dezentralisierteste Softwaremanagement überhaupt hat. Wenn ich nen Firefox will, dann geh ich dafür nich zu Microsoft. Natürlich nich, MS kann vll Betriebssysteme bauen, aber beim Browser traue ich denen nicht, erst Recht traue ich denen nicht zu die Mozilla-Codebasis zu warten. Deswegen hol ich mir den Firefox von Mozilla direkt. Das finde ich ehrlichgesagt sehr vernünftig.
    Warum sollte das woanders jetzt anders sein, nur weil da vll nen anderer Kernel druntersteckt? Ändert an dem Grundprinzip überhaupt nichts, trotzdem pflegen alle klassischen Linuxdistributionen ihren größtenwahnsinnigen Allmachtsanspruch, dass sie das Software-Ökosystem bereitstellen.

    Die Konzequenzen

    Abgesehen davon, dass mit die Linuxe wie Fliegen bei der Bruzzellampe weggestorben sind, waren die meisten Probleme, die ich beschrieben habe bisher eher konzepzioneller Art. Schauen wir doch mal, was das wirklich bedeutet:

    Die Pakete werden beim Distributor betreut. Erstmal ganz unabhängig davon, wie gut der seinen Job macht, selbst wenn da die brilliantesten Brainiacs sitzen, ist es immer ein weiteres Glied in der Kette von der Tastatur des (eigentlichen) Entwicklers zu meinem Bildschirm, und damit eine weitere potenzielle Fehlerquelle. Das mit den brillianten Brainiacs ist natürlich geschönt, die wirklich guten Leute entwickeln natürlich selbst Software oder betreuen zumindest die lustigen Sachen wie den Kernel, und machen nicht so was langweiliges wie Commits einer mäßig verbreiteten Software zwischen zwei Repositories zu mergen. Das ist die langweiligste Aufgabe, die ich mir überhaupt nur vorstellen. Und diese Langeweile schlägt sich natürlich auch auf die Qualität nieder. Bei Monotonem trott rutschen nunmal schnell Flüchtigkeitsfehler durch, und plötzlich ist Debians OpenSSL ein offenes Scheunentor. Das war kein versehen, das Problem hat systematische Ursachen.

    Viel besser als langweilige, sinnlose und repetitive Tätigenkeiten von einer Heerschaar an Freiwilligen machen zu lassen wäre einfach, den Krams nicht zu machen. Krams zwischen Repos mergen ist so aufwändig, und das macht man für jedes Scheiß Paket in jeder Scheiß Version, und exakt das selbe macht jede Scheiß Distro. Diese unfassbare Verschwendung menschlicher Energie macht mich einfach fassungslos. Stellt euch nur mal vor, diese Leute würden was richtiges machen? Das entsprechende Projekt wirklich mal nach vorn statt mit der n+1ten Rückportierung immer nur zurück zu bringen. Was könnte man da alles machen...

    Aber stattdessen versucht man weiterhin, dem Abhängigkeitswirrwar des integrierten Systems Unix Herr zu werden, indem man 50000 Pakete zueinander kompatibel hält, und hofft, dass der Nutzer keine weitere Paketquelle nachlädt, weil eine einzige anders compilierte glibc den gesamten Turm sofort einstürzen lassen könnte. Das Unix-Paradigma hat gut funktioniert, als der Entwickler sich einmal sein eines Unix-System installiert hat, und dann angefangen hat, seine eigenen Sachen drauf zu entwickeln. So viele Änderungen hat er nicht geschafft, und sie waren auch immer aus seiner Hand. Diese Illusion, dass man eine so große Softwarelandschaft wie die von heute nach wie vor mit der hemdsärmeligen Einstellung bewältigen kann, hält sich jedoch hartnäckig.
    Das treibt dann solche Blüten wie die o.g. Definition von "Stabilität". Stabilität heißt "kein Ärger für den Distributor", und nicht etwa "keine Probleme für den Nutzer". Systeme wie Debian mit sowas wie 50k Paketen können garnicht anders, als nie irgendwas signifikant zu Updaten, weil das wollknäulartige Netz der Abhängigkeiten eine unüberschaubare Kaskade weiterer Updates nach sich ziehen würde. Genau dies: Dass man nicht mal Änderungen an einer Stelle macht und dabei ausschließen kann, dass komplett andere Teile des Systems nicht in Flammen aufgehen, das ist ein charakteristisches Merkmal von schlechter Architektur. Von Legacy-Software mit viel GOTO.

    Und dabei ist es so unnötig...

    Eigentlich gibt es zwei Probleme. Das eine ist wie schon erwähnt die Unordnung im Dateisystem. Klar, ist Kacke, aber das kann man vll sogar irgendwie noch gemanagt bekommen.

    Das größere Problem sind die Abhängigkeiten der Pakete untereinander, vor allem dieses gesamte Konzept der shared library. Anfangs gabs das ja in Unix gar nicht, da waren alle binaries static. Als Unix dann populärer wurde und zunehmend dafür eingesetzt wurde, eine große Anzahl von Leuten auf völlig unterdimensionierten Kisten arbeiten zu lassen, musste man Zwangsweise optimierungen vornehmen, so weit, so klar. Wenn man 20MB Plattenplatz hat, will man seine libs mit nicht für jedes Programm neu rumliegen haben, da nutzt man Synergien.

    Heute ist das ein Relikt aus einer längst vergangenen Zeit. Ich hab ne 500GB-Platte in meinem Notebook, das ist mir so egal ob libjpeg 1x oder 500x rumliegt, wenn das Ding nur paar k groß ist. Letztens für mein T61 ne SSD gekauft und hab üppige 256 dieser verflucht schnellen GBs für deutlich unter 100€ bekommen. Wozu das rumgeknauser bei den libs? Die Platzfresser sind eh andere Sachen auf dem System...

    Vor allem: die Unix-Familie ist das einzige fucking OS auf dem gesamten Erdball, bei dem Abhängigkeiten zwischen jeder Art von Komponenten auftreten können. Bei allen anderen gibts 1x das OS und X-fach die Apps. Die Apps dürfen alle das OS nutzen und dagegen linken und whatnot, aber nicht untereinander. Wenn sie was brauchen, was nicht vom OS kommt, dann bringen sie das i.a.R. selbst mit (von paar Frameworks wie der JVM oder so mal abgesehen).
    Windows macht das so.
    MacOS macht das so.
    MacOS X macht das so.
    iOS macht das so.
    Android macht das so.
    Windows Phone macht das so.
    WebOS macht das so.
    Fucking OpenVMS macht das so.

    Nur Linux bildet sich ein, dass der Linuxkernel, die glibc, xeyes und Firefox alles uniform behandelt werden kann. Kann man machen, ja, genauso wie man auch alle Variablen in einem 10 Mio LOC-Prog uniform public machen kann und alle Kontrollflüsse uniform mit GOTO machen kann. Kann man machen, ja. Die daraus resultierende Komplexität beherrscht keiner.

    Meine Utopie

    Stellt euch mal vor, es würde anders gehen. Sowas wie die PBIs bei PC-BSD (von denen es viel zu wenige gibt, als dass das ne ernstzunehmende alternative wäre): Ein Paket, bei dem das Programm alle seine Libs selbst mitbringt. Firefox 31 nutzt libjpeg-08.15? fein. GIMP hingegen die libjpeg-08.15 mit 1337-hacks? okay. und KDE braucht libjpeg-47.11? ist mir soo egal. wenn einfach jede App nen eigenes root hat, in dem es sich austoben kann wie es will, is mir das alles rille. dann kann ich mir auch bei einem Ökosystem aus 50k Paketen mal eben ne neue Major Version glibc bauen, weil ich weiß, dass ich keine 49999 anderen Pakete überprüfen muss.
    Man käme mal aus der Schockstarre raus, wenn man die panische Angst vor unkontrollierbaren Seiteneffekten überwunden hätte, und könnte anfangen aktuelle Software auszuliefern, so schwierig ist das nämlich gar nicht. Stellt sich raus: Mozilla macht auch Qualitätssicherung, und wenn man den neuen Firefox 2h nach dem Release zieht, wird er nicht die ganze Zeit wild rumcrashen.
    Noch ein kleiner Nebeneffekt: Pakete zwischen Distros zu portieren wäre deutlich einfacher. Ggf. nicht völlig ohne Arbeit, aber mit ein paar Verzweigungen dürfte es ein leichtes sein, ein Paket zu bauen, welches sowohl auf den debian-artigen, als auch den Redhatigen und SUSigen läuft. Dann wäre es vll auch für Mozilla mal möglich, selbst den Firefox zu machen, weils nur noch ein Paket und keine 9001 mehr wären. Und dann könnten die tausenden Paketmaintainer der großen Distros entweder Eier schaukeln (was ich ihnen gönnen würde) oder vll sogar sinnvolle Dinge tun, und nich nur um die hausgemachten Probleme schlecht komponentisierter Legacy-Software workarounden...

    Einmal editiert, zuletzt von oreissig (26. August 2014 um 22:05)

  • Kann dir insofern zustimmen, dass gerade Library-Inkompatibilitäten ne Welt für sich sind. Imho sollte man heute nur noch statisch linken, um genau sowas zu vermeiden. Oder halt entsprechend für jedes Programm nen eigenes Verzeichnis wo es seine Library-Versionen ablegt (gibts mit /opt ja quasi schon)

  • Wahre Worte.

    Dass das Unix-Design inzwischen bereits als quasi-religiöses Argument ("Unix-Philosophie" was fürn dummes Gelaber) gegen jegliche Umstrukturierungsversuche unternommen wird, ist das beste Symptom dass hier Dinge verkrustet sind. Wie du sagtest, das Unix-Design mag die Probleme der damaligen Welt elegant gelöst haben - aber die Welt hat sich inzwischen weiterbewegt und hat andere Probleme. Du hast dich vor allem auf Datei/Programmamangement fokusiert, sieht man aber auch am Beispiel vom Mulituser-Konzept. Auf den damaligen Grossrechnern eine grossartige Lösung, dass alle Programme mit den Rechten der User lief. Dass heutzutage aber mein PDF-Reader Zugriff auf meine SSH-Keys hat nur weil er mit meinem Userrechten läuft ergibt keinen Sinn.

    Die desaströse Situation mit den Paketmanagern lässt sich auch schön daran festmachen, dass praktisch alle Programmiersprachen für ihre Bibliotheken inzwischen ihre eigenen Manager für Bibliotheken mitbringen, weil die Distros bestenfalls für die Endbenutzer, aber nicht für die Entwickler packetieren (Punkt "Offenheit", my ass). cpan, pip, npm, maven, pear, cabal, cargo et all. Keine Distribution hat es bisher geschafft mit diesem dualen System auch nur ansatzweise klarzukommen.

    Auch haben praktisch alle neueren nativen Compiler ausser die für C/C++ aufgehört dynamisch zu linken, sondern machen es gleich statisch. Go linkt standardmässig die ganze Runtime statisch mit rein. Rust ebenso. Damit hat man gar nicht erst das Theater mit inkompatiblen Versionen. Der dynamische Ansatz hat zu viele Nachteile.

    Um doch mal kurz den Linux-Fanboy rauszuhängen:

    Wobei ich den Linuxen wenigstens hoch anrechne, dass wenigstens nach wie vor versuchen eine kohärente Architektur zu haben. Sie scheitern grösstenteils daran, eben weil sie glaube ich zu fest am alten Unix-Design festhalten (siehe auch: systemd die das explizit zum Non-Goal erklärt haben und dafür heftigst kritisiert werden). Aber sie haben wenigstens noch so etwas wie eine Vision von Design, dafür gibts zumindest Sympathiepunkte.
    Die Architektur Windows hingegen ist ja nur noch getrieben vom Constraint dass Legacy-Software laufen muss. Bedeutet in der Praxis DLL-, Registry- und Dateisystemvirtualisierung: System32 DLL-Fehler und C:\Programme\Foo\config.ini-Konflikte haben moderne Windowsen nur deswegne nicht mehr, weil der ganze Dreck von Schichten über Schichten wegvirtualisiert wurde.

    Es funktioniert zugegebenermassen verdammt gut, definitiv besser als die ganzen Linux-Distros, da ist der in Windows gut umgesetzte pragmatische Ansatz dem verrotteten Idealismus der Linux-Distros überlegen. Aber Design hat Windows wirklich keines da, dass der Hersteller die Software paketiert bedeutet nicht nur dass der Firefox sauber läuft weil Mozilla das sagen hat, sondern es bedeutet auch Toolbars und andere Adware. Dass keiner weiss, was Windows 9 denn jetzt wird zeigt ja auch, dass es keine klare Designrichtung gibt.

    Trotzdem, Windows läuft momentan besser, weil sie eben tatsächlich echte Probleme mit Ducttape wie Virtualisierung lösen, anstatt die Probleme gar nicht zu Lösen und stattdessen auf die Unix-Philosophie verweisen ("Worse is better"), was momentan gerade die Distros tun.

    Trotzdem glaube ich ist die Lage nicht aussichtslos. Der "Fuck Unix"-Ansatz von systemd (die inzwischen im Idealfall komplett ohne die dummen Unix-Configfiles auskommen, also stateless sein können) hat einiges inspiriert.

    Docker und CoreOS gehen gerade das Paketierungs/Management für Server an. Ob es der richtige Ansatz ist weiss noch keiner, aber es ist zumindest mal ein anderer als Tarballs auf / loszulassen.

    Und Fedora Workstation, obwohl deren Vision fast so schwammig ist wie deine obige Utopie versprechen auch neue Ansätze für den Desktop ("Workstation"): Isolierte "Apps", weniger bewegbare Teile, Abkehr vom klassischen Unix-"Design".. aber wie gut und wie radikal das ist, weiss momentan noch niemand, vermutlich nicht mal die Devs selber. Und Erfolg ist auch nicht einfach, Gobo Linux ist ja auch in der Nische geblieben.

    Nachtrag: Hier die schöne Vision von Fedora Workstation als länglicher Blogpost: http://blogs.gnome.org/uraeus/2014/04…ra-workstation/

    Einmal editiert, zuletzt von gandro (26. August 2014 um 23:02)


  • Oder halt entsprechend für jedes Programm nen eigenes Verzeichnis wo es seine Library-Versionen ablegt (gibts mit /opt ja quasi schon)

    Was dann nur noch ein Schritt (nämlich die Paketierung) vom Appkonzept auf Mobilplattformen entfernt ist. Aber auch das hat oreissig in einem früheren Beitrag schon mal erwähnt.


  • Es funktioniert zugegebenermassen verdammt gut, definitiv besser als die ganzen Linux-Distros, da ist der in Windows gut umgesetzte pragmatische Ansatz dem verrotteten Idealismus der Linux-Distros überlegen. Aber Design hat Windows wirklich keines da, dass der Hersteller die Software paketiert bedeutet nicht nur dass der Firefox sauber läuft weil Mozilla das sagen hat, sondern es bedeutet auch Toolbars und andere Adware. Dass keiner weiss, was Windows 9 denn jetzt wird zeigt ja auch, dass es keine klare Designrichtung gibt.

    ich glaub die Vision von MS war mal Windows 8, so touch und jetzt auch mit store, aber nachdem metro niemand nutzt und in dem store außer fakes auch nichts ist, stehen die in der tat sehr kopflos da...


    Trotzdem glaube ich ist die Lage nicht aussichtslos. Der "Fuck Unix"-Ansatz von systemd (die inzwischen im Idealfall komplett ohne die dummen Unix-Configfiles auskommen, also stateless sein können) hat einiges inspiriert.

    klar, Android ist das beste Beispiel wie man mit nem Linux-Kernel nen relativ nutzerfreundliches OS machen kann (die usability-probleme von android sind größtenteils nicht der Architektur geschuldet)


    Docker und CoreOS gehen gerade das Paketierungs/Management für Server an.

    stimmt, Docker ist wirklich interessant

    Fedora Workstation kannte ich bis jetzt nicht mal, gleich mal lesen...:)

  • Das Problem bei Paketmanagern ist ja auch die Nutzerfreundlichkeit. Bisher schafft nur Ubuntu ein Appstore-ähnliches Konzept in Form des Software Centers. Heutzutage kann man auch Screenshots, Nutzerbewertungen, Bezahlmöglichkeiten und sowas erwarten. Das fehlt den meisten Paketmanagern leider völlig. Der Schritt Richtung Appstore muss halt getan werden.

  • Das Konzept von Containern mag ich sehr. Ich werde das bei neuen Apps und Servern auf jeden Fall immer nutzen, da das Gejaule mit Ruby1.8 vs. Ruby1.9 vs Python-Sonderwurscht-v2.7.3-gitrev92ad02ee oder watweesisch mir mega auf den Sack geht. Dieses Dependency Management ist echt ätzend. Auch wenn man shared Hosting für sich und paar Kumpels betreibt. Einer von denen "schreibt" oder deployt dann wieder PHP Code, der nur mit 5.2 funktioniert. (Alles erlebt..)

  • Einer der längsten Threads die ich je gelesen habe. Ja Linux macht wohl einiges anders. Als Linux Noob scheiter ich öfters mal daran. Ich habe noch nie verstanden was der Vorteil der millionen Konfigdatein ist, die dann meist mit einem Versionssprung plötzlich weg sind. Ich habe nie Verstanden, dass Programme irgendwo im Dschungel des Dateisystems verschwinden sollen. Bei einfachen Paketmanagern hab ich nie verstanden, wie ich wissen soll, was ich brauche, allerdings ohne sie bin ich dann auch aufgeschmissen. Ich habe nie geschafft den JDownloader auf nen Linux zu installieren. Ist nie in nen Repository drin. Manuell klappt es einfach nicht.

    Lasse ein Lubuntu auf einen älteren P4 laufen. Läuft super, ich bin ein Fan davon. Auf anderen Rechnern hatte ich mit der selben oder anderen Versionen, oder Distributionen nur Ärger. Kein Ruhezustand, Treiberprobleme, irgendwas war immer. Das hat man unter Windows quasi garnicht mehr. Als Anwender zählt für mich auch nur das Ergebnis.

    Was ich auch nie so recht verstanden habe, ist diese grenzenlose Energie die für Oberflächen/Distros verballert wird. Statt dass man irgendwas mal als Standard entwickelt, forkt lieber irgendwer irgendwas oder kommt wie ubuntu mal mit nen ganz tollen neuen Konzept.

  • Ich denke, die Vielfalt an Distributionen hat schon seine Vorteile. Linux ist dadurch auf jeden Einsatzzweck super anpassbar. Was will man mit einer GUI auf einem Server, der seine Dienste anbietet und über SSH aus der Ferne gewartet wird. Momentan machen wir ja in der Schule Windows Server 2012 und da sind mir Punkte aufgefallen, die mit Linux einfacher wären:

    1) Wenn Fehler auftreten, dann kann man selber versuchen, den Fehler direkt zu beheben. Bei Windows muss man sich auf Microsoft verlassen. (Beispiel: Durch Windows Server 2012 R2 wurde ein Fehler in den WDS eingebaut, dadurch failt ein Aufzeichnungsimage beim Booten. Lösung: Das Aufzeichnungimage mit dism neu mounten und wieder aushängen, dann läufts. Da denk ich mir wirklich, was ist da los? Bei Linux könnte man jetzt selber auf Fehlersuche gehen, bei Windows hat man keine Chance)

    2) Wir konfigurieren im Windows Server 2012 viel zu viel grafisch, ich habe da so meine Probleme damit, mir zu merken, wo ich was genau finde. In Textdateien kann ich besser nach einer bestimmten Einstellung suchen, als wenn ich mich durch 100 Untermenüs klicken muss

    3) Windows Server 2012 R2 hat verdammt hohe Hardwareanforderungen, man hat keine Chance, das auf einer 32 Bit CPU zum laufen zu bekommen. Mit Linux kann ich mir selbst auf einem AMD Geode oder Banana Pi noch einen kleinen Fileserver aufsetzen und es läuft.

    4) Um einen Domänencontroller einzurichten, war ein Neustart notwendig vom ganzen Server. Unter Linux starte ich einfach den Dienst neu und gut ist.

    Ich würde aber Linux nicht als Desktop OS verwenden, sondern eben nur auf Server oder für Spezialanwendungen. Einem normalen Benutzer würde ich nur ungern ein Linux oder Unix vorsetzen, vor allem, wenn ich nicht in der Nähe bin.

  • Ich nutze Linux als Desktop-OS sowie als Server-OS und bin sehr zufrieden.

    Ja, der Konfigurationsdschungle ist ein Chaos für sich. Gerade auf Distributionsebene unterscheiden sich dann noch Orte über Konfigurationsdateien für Netzwerk und sowas. Aber sonst kocht jedes Programm/Service/Daemon sein eigenes Süppchen. Einzige Standardisierung dort ist zum Beispiel: Systemweit /etc, für Benutzer ~/.config oder so.

    Bisher lösen ja Distributionen wie Ubuntu das Konfigurationsproblem ganz gut. Sie haben GUI-Tools, die die Konfigurationsdateien maskieren. So ist es für den einfachen Benutzer recht einfach 80% der Allgemeinkonfiguration abzudecken, ohne zu wissen, ob jetzt ~/.bash_rc oder /etc/environment der richtige Ort für ihre Einstellungen sind. Auch der schon genannte Ansatz mit den "App Stores" auf den Linux-Oberflächen ist ganz gut gelungen. Die auch bereits erwähnte Sehnsucht nach Standardisierung unter den Benutzeroberflächen hält Einzug. freedesktop.org dbus z.B. Es wird besser. Als ich mit Linux angefangen habe, war es ein Kampf, dass da was ging. Das war 2001/2002. Jetzt geht Linux out of the Box so gut wie noch nie zuvor.

    Was mir an Linux auch gut gefällt ist das Baukastenprinzip: Man hat eine Projektidee? Man schaut sich an, was es so gibt, was einem helfen kann und versucht die Dinger miteinander zu verknüpfen. Raspberry Pi + mpd + samba + lcd-daemon = NAS mit LC-Display und Musikabspielfunktion über Netzwerk.

    Es ist halt kein System für den 0815-Konsumenten. Dieser ist doch mit Apple iOS auf dem Handy und Mac OS X auf seiner Silberbüchse sowie seinem App Store ganz gut beraten. Da muss man nicht viel denken, einfach nur befolgen, was angezeigt wird und wenn alle Stricke reißsen, dann den Typen im blauen Hemd an der Genius Bar nerven. Selbst der Akku-Austausch bei der Hardware geht mit einschicken und machen lassen. Nichts selbst frickeln.

    Linux ist halt ein System für Leute, die gern wissen, wie ihr System funktioniert, die daran interessiert sind mal die Motorhaupe zu öffnen und reinzuschauen, was da abläuft oder mal an einem Schräubchen drehen.

  • Ich halte es ja für einen Fehler, Linux oder Unix als solches kritisieren zu wollen. Obwohl die verschiedenen Derivate und Distributionen meistens den Kernel und quasi immer das Software-Set teilen sind sie am Ende des Tages doch ziemlich verschiedene Biester, die es meiner Meinung nach verdienen als verschiedene Betriebssysteme einzeln bewertet zu werden.
    Die ganzen Paket-Manager unterscheiden sich, die Init-Systeme unterscheiden sich teilweise, selbst der Dateibaum kann sich fundamental unterscheiden (man schaue auf Gobo Linux).

    Klar, Pakete der Distributionen sind untereinander meistens eher so mäßig kompatibel, aber wenn ich ein Betriebssystem machen will, selbst wenn es quelloffene Software nimmt, die woanders schon verwurstet wurde, guck ich doch erst mal, dass die Software das tut was ich von ihr will, und nicht darauf, dass ich mit anderen Betriebssystemen kompatibel bin.
    Streng genommen sind ja auch Android, WebOS, iOS, BlackBerryOS und MeeGo Unix-Systeme, und da ist die Software noch viel weniger untereinander austauschbar. BlackBerryOS und WebOS können über Kompatiblitäts-Schichten Android-Software ausführen, aber das ist am Ende des Tages mehr Gefrickel als ein .deb-Paket auf einer RPM-Basierten Distribution zu installieren. Hier existieren wenigstens Tools zum konvertieren, die zwar alles andere als problemlos sind, weil die von oreissig beschriebenen Abhängigkeits-Fuckups durchaus existieren, aber immerhin vorhanden sind.

    Das kann man von den großen, kommerziellen Unixen nicht behaupten, nur kräht da kein Hahn nach. Vermutlich weil da kein Linux im Namen ist. Klar, da sind auch riesen Unterschiede, es wird häufig nicht der gleiche Display-Server genutzt, ein ganz anders Paket-Management, Oberfläche etc. Aber ist das eigentlich bei den verschiedenen Desktop-Linuxen so anders?
    Im Extremfall habe ich ein anderes Init-System, eine andere Desktop-Oberfläche mit anderem Toolkit und eine andere Paketverwaltung mit anderen Paket-Formaten, und da lasse ich die BSDs, die noch einen ganz anderen Kernel haben, sogar außen vor. Ich finde das sind schon ziemlich große Unterschiede, und trotzdem krieg ich Software von anderen Distributionen meistens noch irgendwie ans Laufen, das ist im Grunde genommen sogar ein Feature, kein Bug.

    Ich kann auch das "soll halt jedes Paket seine Abhängigkeiten selber mitbringen" Argument nicht ganz unterstützen. Klar, auf dem modernen Desktop-System an sich ist das gar kein Problem, da haben wir genügend Platz.
    Aber Linux läuft eben nicht nur auf modernen Desktops. Ein sehr starkes Argument für Linux ist doch grade die Flexibilität, dass ich im Zweifel auch eine Distribution bauen kann, die mit minimalsten Ressourcen läuft, für Embedded-Systeme oder Retrokisten. Hier zählen die paar MB, die ich durch dynamisch verlinkte Bibliotheken gewinne, und können den Unterschied ausmachen ob das System auf eine Floppy passt oder nicht.
    Für moderne Desktop-Systeme statisch linken und bei Embedded-Systemen nicht, kann auch kaum die Lösung sein. Hier verliere ich ja noch mehr Kompatibilität, da verstärke ich den Kritikpunkt der Nicht-Austauschbarkeit von Softwarepaketen zwischen Distributionen ja noch mehr.
    Und Innerhalb einer Distribution, die ich - wie bereits ausgeführt - eigentlich als eigenständiges Betriebssystem betrachten würde, funktioniert die Auflösung von Abhängigkeiten dann doch ganz gut. Bei Arch Linux sogar trotz dessen, dass meine Software immer aktuell ist. Ja ich weiß, hier soll es um die grundlegenden Konzepte gehen, nicht um einzelne Distributionen - aber ich finde echt nicht, dass man die Diskussion so anpacken kann, die Unterschiede sind schon groß genug, dass man sich jede Distribution einzeln ansehen sollte.

    Edit: Mir ist da grade noch eine guter Vergleich mit Windows eingefallen. Im Grunde gibt's da ja auch drei "Derivate": Normales Desktop Windows 8.1, Windows RT und Windows Phone. Gleicher Kernel, im Grunde die gleiche ModernUI-Oberfläche, trotzdem hab ich keine Chance normale Windows 8.1 Anwendungen auf meinem Telefon oder RT-Gerät zu installieren, weil die meisten nicht Open-Source sind. Und wenn doch, gibt's in den wenigsten Fällen ARM-Ports.
    Die allermeisten Linux-Pakete krieg ich sowohl auf meinem Desktop-Linux, als auch auf meinem ARM-Linux, und meistens sogar auf Meego oder WebOS installiert, weil das meiste quelloffen ist. Ich finde schon, dass das eher als Pro-Argument gelten kann.


  • 2) Wir konfigurieren im Windows Server 2012 viel zu viel grafisch, ich habe da so meine Probleme damit, mir zu merken, wo ich was genau finde. In Textdateien kann ich besser nach einer bestimmten Einstellung suchen, als wenn ich mich durch 100 Untermenüs klicken muss

    Dann versuchs mit den Core-Editionen. Das ist quasi eine Minimalinstallation bei der du nur fernwarten oder lokal (physikalisch oder RDP) per Eingabeaufforderung/Powershell arbeiten kannst. Explorer und co gibts nicht. Ist dafür auch entsprechend kleiner das Ganze.


    3) Windows Server 2012 R2 hat verdammt hohe Hardwareanforderungen, man hat keine Chance, das auf einer 32 Bit CPU zum laufen zu bekommen. Mit Linux kann ich mir selbst auf einem AMD Geode oder Banana Pi noch einen kleinen Fileserver aufsetzen und es läuft.

    Frage ist eher.. wer willl das auf ner 32Bit Maschine laufen lassen? Mal abgesehen davon das Server 2008 (= Vista) die letzte Servervariante war, die es in 32 Bit gab. Ab 2008 R2 (= Win7) gabs nurnoch 64 Bit.
    Ich hatte früher 2008 R2 (Win7) und mittlerweile seit HDD Headcrash 2012 R2 (8.1) auf meinem OVH Serverchen (Atom D425 1,8GHz Singlecore mit 2GB RAM) am laufen und kann mich performancemäßig nicht wirklich beschweren, mache damit aber auch nichts allzu ernstes. Was ich aber definitiv sagen kann ist das du nichts weniger leistungsfähigeres als so 'ne Atom Kiste willst. Will man wirklich nicht. Und x86 CPUs die merklich leistungsfähiger sind, aber nur 32 Bit können fallen mir keine (auch nur halbwegs modernen) ein..

    Und ernsthafte Einsatzzwecke für nen Geode oder RPi gibts doch auch nicht wirklich.. jetzt abgesehen von den Frickeleien zu Hause wo die Dinger zu 99% eingesetzt werden.


  • Und x86 CPUs die merklich leistungsfähiger sind, aber nur 32 Bit können fallen mir keine (auch nur halbwegs modernen) ein..


    Gibt noch eine Handvoll CPUs der Pentium 4er, die schneller sind als ein 1.8GHz Atom. Die Pentium 4EE waren dann ja auch schon 64-bit-fähig, Pentium D auch.

  • Mag sein, aber die wird ja allein schon wegen Stromverbrauch keiner mehr einsetzen wollen. Mal abgesehen davon, dass der Atom D425 ja auch aufm Stand von ~2011 ist und modernere Atoms (endlich mal) n bisschen mehr Dampf haben. Da hält dann gar kein P4 mehr mit.


  • Ja, der Konfigurationsdschungle ist ein Chaos für sich. Gerade auf Distributionsebene unterscheiden sich dann noch Orte über Konfigurationsdateien für Netzwerk und sowas. Aber sonst kocht jedes Programm/Service/Daemon sein eigenes Süppchen. Einzige Standardisierung dort ist zum Beispiel: Systemweit /etc, für Benutzer ~/.config oder so.

    Bisher lösen ja Distributionen wie Ubuntu das Konfigurationsproblem ganz gut. Sie haben GUI-Tools, die die Konfigurationsdateien maskieren. So ist es für den einfachen Benutzer recht einfach 80% der Allgemeinkonfiguration abzudecken, ohne zu wissen, ob jetzt ~/.bash_rc oder /etc/environment der richtige Ort für ihre Einstellungen sind. Auch der schon genannte Ansatz mit den "App Stores" auf den Linux-Oberflächen ist ganz gut gelungen. Die auch bereits erwähnte Sehnsucht nach Standardisierung unter den Benutzeroberflächen hält Einzug. freedesktop.org dbus z.B. Es wird besser. Als ich mit Linux angefangen habe, war es ein Kampf, dass da was ging. Das war 2001/2002. Jetzt geht Linux out of the Box so gut wie noch nie zuvor.

    kann schon sein, dass du mit der konfiguration ganz gut klarkommst, das kritisiere ich ja auch überhaupt nicht


    Die ganzen Paket-Manager unterscheiden sich, die Init-Systeme unterscheiden sich teilweise, selbst der Dateibaum kann sich fundamental unterscheiden (man schaue auf Gobo Linux).

    natürlich gibt es exoten, die dinge ganz anders machen, das finde ich ja auch gut.
    die ganzen großen distros (debian, redhat, suse, ubuntu) sind von der philisophie aber alle ähnlich genug, dass meine kritik auf sie zutrifft


    Streng genommen sind ja auch Android, WebOS, iOS, BlackBerryOS und MeeGo Unix-Systeme, und da ist die Software noch viel weniger untereinander austauschbar.

    Android hat zwar nen Linux-Kernel, aber der könnte sich auch von heut auf morgen ändern, wäre den Dalvik-Apps egal. WebOS vermutlich ebenso. Ein unix-system zeichnet sich ja nicht dadurch aus, dass da BSD oder GNU-Code irgendwo steckt, dagegen hab ich ja garnix, sondern dass es sich auf eine bestimmte Art und Weise verhält. Wie definiert man das am besten? POSIX?


    Das kann man von den großen, kommerziellen Unixen nicht behaupten

    wovon sprichst du? :D kommerzielle Unixe sind tot, die einzig relevanten sind die BSDs
    im endeffekt ist es ja auch völlig wurst, mein problem bezieht sich auf alle unix-artigen systeme, bei denen es keine isolation zwischen apps gibt, sondern engmaschige abhängigkeiten zur tugend erklärt werden.


    Aber Linux läuft eben nicht nur auf modernen Desktops. Ein sehr starkes Argument für Linux ist doch grade die Flexibilität, dass ich im Zweifel auch eine Distribution bauen kann, die mit minimalsten Ressourcen läuft, für Embedded-Systeme oder Retrokisten. Hier zählen die paar MB, die ich durch dynamisch verlinkte Bibliotheken gewinne, und können den Unterschied ausmachen ob das System auf eine Floppy passt oder nicht.

    jo, und? ich sag doch gar nicht, dass es nicht auch noch solche sachen geben kann, aber wenn mans nicht muss, warum sollte man sich dann mit diesen ganzen Problemen rumschlagen?
    Der Serveraspekt ist total super: Die Kisten sind typischerweise noch kräftiger als Desktops, und da hat der Admin noch weniger Lust irgendwie manuell was gerade biegen zu müssen.


    Für moderne Desktop-Systeme statisch linken und bei Embedded-Systemen nicht, kann auch kaum die Lösung sein. Hier verliere ich ja noch mehr Kompatibilität, da verstärke ich den Kritikpunkt der Nicht-Austauschbarkeit von Softwarepaketen zwischen Distributionen ja noch mehr.

    ist doch bisher schon nicht gegeben, was sollte noch schlechter als eine binärkompatibilität von 0 sein?
    source-kompatibel ists ja immer noch, d.h. man muss keine neue software schreiben, aber das bringt dem endanwender ja nix. software selbercompilieren will man zuhause ja nich. im embeddedbereich ist das hingegen vollkommen üblich.


    Edit: Mir ist da grade noch eine guter Vergleich mit Windows eingefallen. Im Grunde gibt's da ja auch drei "Derivate": Normales Desktop Windows 8.1, Windows RT und Windows Phone. Gleicher Kernel, im Grunde die gleiche ModernUI-Oberfläche, trotzdem hab ich keine Chance normale Windows 8.1 Anwendungen auf meinem Telefon oder RT-Gerät zu installieren, weil die meisten nicht Open-Source sind. Und wenn doch, gibt's in den wenigsten Fällen ARM-Ports.
    Die allermeisten Linux-Pakete krieg ich sowohl auf meinem Desktop-Linux, als auch auf meinem ARM-Linux, und meistens sogar auf Meego oder WebOS installiert, weil das meiste quelloffen ist. Ich finde schon, dass das eher als Pro-Argument gelten kann.

    jo schön, bestreite ich ja auch überhaupt nicht



    ach schade, warum geht 80% der diskussion völlig an meinem punkt vorbei?
    ich will euch euer GNU/Linux doch überhaupt nicht wegnehmen, und ich will auch nicht über irgendwelche anderen sachen reden, mit denen ihr total gut klarkommt. schön für euch, mir wurst, solange man nich ordentlich updaten kann ohne kernel panic

    Einmal editiert, zuletzt von oreissig (27. August 2014 um 18:01)

  • Mit "kommerzielle Unixe" meinte ich jetzt MacOS, iOS und im Grunde auch Android, war etwas verwirrend formuliert.

    Dass zwischen Distributionen für verschiedene Einsatzzwecke keine Kompatibilität besteht ist ja auch nicht wahr. Also klar, wenn es verschiedene Architekturen sind gibt's keine Binärkompatibilität, aber dadurch, dass die meiste Software quelloffen ist, findet man ja doch recht häufig für die entsprechende Architektur vorkompilierte Pakete.


  • Mit "kommerzielle Unixe" meinte ich jetzt OS X und iOS, war etwas verwirrend formuliert.

    Beide sind so non-Unix as it gets, mit ner komplett anderen Interpretation was ein OS ist, wie Tools funktionieren.


    OS X ist im Endeffekt das, wo Linux vermutlich auch hin will.

    Das OS bietet ein Standardset an wichtigen Features wie TLS, Netzwerk-Schnittstellen die heutigen Anforderungen gerecht werden. („Lade updates nur wenn kein Mobilfunk…“, „Blockiere mit Hintergrund-Updates keinen Dienst im Vordergrund“)

    Alles mal überhaupt total un-UNIX. Jedoch sind dann Dinge von oreissig oben angesprochen wie statisch gelinkte Binarys oder eben wie OS X jetzt schon verwendet App-Bundles möglich, die die Komplexität bei Anwendungsverwaltung sogar ohne inheränten Paketmanager relativ einfach Handhabbar macht und die Dinge wie „ich lad mir FOO mal von foo.de runter und führ es aus“.

    Auch OS X hat einen Paketmanager, der jedes App-Bundle (.app) als Paket registriert und somit Statistiken erzeugen kann welche Apps auf dem System sind.
    Software wie AppCleaner basiert auch darauf und lässt sich Infos ausgeben wo Anwendung $FOO überall seine Dateien abgelegt hat, die man loswerden will.


    Linux könnte da bspw. nen Schritt weiter gehen und Update-Funktionalitäten drüber anbieten.

    Solche Konzepte haben alle wenig mit Unix zu tun, funktioniern aber sehr gut wie man auf den Mobil-Systemen sieht.


  • Dass zwischen Distributionen für verschiedene Einsatzzwecke keine Kompatibilität besteht ist ja auch nicht wahr. Also klar, wenn es verschiedene Architekturen sind gibt's keine Binärkompatibilität, aber dadurch, dass die meiste Software quelloffen ist, findet man ja doch recht häufig für die entsprechende Architektur vorkompilierte Pakete.


    Nur für die großen. Die ganzen kleinen Distros haben viel kleinere Paketsammlungen, da wird man dann eben nicht mehr für praktisch alles fündig werden, und dann wird einem durch ein .deb von ubuntu oder ein .rpm von redhat auch nicht geholfen werden können.
    Pakete betreuen und ständig neu compilieren für das jeweilige Ökosystem ist halt ziemlich aufwändig, genau deswegen sind die vielen Abhängigkeiten im Fokus meiner Kritik. Je weniger Berührungspunkte es mit der Umgebung gibt, desto mehr Sachen der Umgebung können sich ändern ohne dass etwas kaputtgeht.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!