Was Apple richtig macht
Ich rege mich ja gern über Apple und deren Produkte auf. Eins bekommt man dort aber gut hin: Integration - sowohl APIs, als auch Services.
Bei Services ist Netzwerk wohl das eindrücklichste Beispiel (wobei, das bekommt sogar Windows halbwegs hin - bloß das “Netzwerk-Betriebssystem” UNIX, von dem der ganze Kram stammt, nicht): Auf Solaris gibts “Network Autoconfig Magic” und klassische Konfiguration. Das fällt auch jedem Nutzer von OpenSolaris 2008.05 (alias “Indiana”) auf, es ist eins der häufigsten genannten Probleme im #opensolaris Chat in der letzten Zeit.
Auf Linux gibt es neuerdings den “NetworkManager”, eine mehrteilige Architektur mit Backenddaemon und Frontend-Tools (GUI und CLI). Soweit, so gut. Es gibt aber auch weiterhin den Direktzugriff auf, beispielweise wpa_supplicant/wpa_cli - oder Konfigurationsdateien in /etc, die unabhängig am Netzwerk rumkonfigurieren. Und die Frontends werden unabhängig vom Backend entwickelt. Es könnte also passieren, dass das GNOME-Frontend andere Funktionen bietet, als das KDE-Frontend. Und wer will, kann sich via D-BUS direkt am Backend austoben.
Bei Apple werden alle Tools am Stück entwickelt. Zwar auch mehrteilig, aber “aus einem Guss”. Irgendwelche Daemons, die im Hintergrund die Arbeit leisten (auf Linux etwa wpa_supplicant) werden dabei so gut es geht mit einem Frontend im Backend versehen.
Mit APIs ist es ähnlich: die String-Klasse hat direkt Möglichkeiten, mit der URL-Klasse (“Highlevel Networking”) zu interagieren. Bei vielen Linux/UNIX-APIs muss man sich dann erst einmal die Typen in das jeweilige Äquivalent der anderen Library (separat zu beziehen, separater Entwicklungszyklus, andere Handhabung von so nervigen Geschichten wie API-Stabilität, …) konvertieren.
Linux (oder Solaris, oder *BSD), gut und schön. Apple hats begriffen: Das System basiert auf einem UNIX-artigen Unterbau, und bietet den auch an, wenn man ihn haben will (etwa im Terminal, wo er gute Dienste leistet). Desktop-Anwendungen kommen aber fast ohne UNIX aus, und müssen sich dementsprechend nicht damit rumschlagen, dass man es 1970 sinnvoll fand, Zeichenketten mit “0” abzuschließen.
Diese Freiheit, “UNIX” auch mal links liegen zu lassen, und “UNIX-Prinzipien” auch mal zu hinterfragen (ach übrigens: “Everything is a file” stimmt seit der Einführung von BSD Sockets nicht mehr - oder wie öffnet man einen Socket per fopen?), fehlt mir im Linux/UNIX-Umfeld…