Ich denke, es hängt sehr davon ab, wo Sie eine Grenze zwischen Anwendungen ziehen (dh wie definieren Sie eine Anwendung) und welche Anwendungsfälle Sie berücksichtigen.
Während Sie einen Webbrowser als Zusammenführung von wget
/ implementieren könnten curl
, einen HTML / XML-Parser, der eine einfache Anwendung für jeden Dokumentknoten aufruft, eine eigenständige JavaScript-Engine, die mit all dem interagiert, und einen "einfachen" Anzeiger, der "nur" Platzieren Sie die Ausgabe des oben genannten auf dem Bildschirm (und geben Sie die Eingaben an einen Kernkoordinierungsprozess zurück). Dies wäre sogar noch chaotischer als (wahrscheinlich jeder andere) heutige Browser.
Das Weiterleiten der Daten an einen externen Prozess - so hat es tatsächlich begonnen . Wenn Sie sich Sorgen über die Größe eines durchschnittlichen Webanwendungscodes machen, sind diese häufig groß (und häufig, weil sie sich über einer Plattform befinden, die in einer interpretierten Programmiersprache und nicht in einer "einfachen" Anwendung geschrieben ist), aber vergleichen Sie sie zu ihren Äquivalenten. E-Mail-Clients, Bürosuiten ... Sie nennen es. All dies ist recht komplex und verfügt über zu viele Funktionen, um als mehrere Prozesse implementiert zu werden, die über Pipes kommunizieren. Für die Aufgaben, für die Sie diese Anwendungen verwenden, sind sie häufig ebenfalls komplex. Es gibt keine guten einfachen Lösungen für komplexe Probleme.
Vielleicht ist es an der Zeit, ein wenig über die Motivation hinaus hinter das UNIX-Motto "Anwendungen, die ein wenig tun, aber gut darin sind" zu schauen. Ersetzen Sie "Anwendungen" durch "allgemeine modulare Einheiten" und Sie gelangen zu einer der grundlegenden guten Programmierpraktiken: Machen Sie die Dinge modular, damit Teile separat wiederverwendet und entwickelt werden können . Das ist wirklich wichtig, IMHO (und die Wahl der Programmiersprache hat sehr wenig damit zu tun).
ps (nach dem Kommentar) : Im strengsten Sinne haben Sie größtenteils Recht - Webanwendungen folgen nicht der UNIX-Philosophie (in mehrere kleinere eigenständige Programme aufgeteilt zu sein). Das gesamte Konzept einer Anwendung scheint jedoch eher trübe zu sein - sed
könnte in einigen Situationen wahrscheinlich als Anwendung angesehen werden , während es normalerweise nur als Filter fungiert.
Daher hängt es davon ab, wie wörtlich Sie es nehmen möchten. Wenn Sie die übliche Definition eines Prozesses verwenden - etwas, das als einzelner Prozess ausgeführt wird (im Sinne des Kernels), ist beispielsweise eine von einem Modul in httpd interpretierte PHP-Webanwendung genau das Gegenteil. Fallen geladene gemeinsam genutzte Bibliotheken immer noch in den Bereich eines einzelnen Prozesses (weil sie denselben Adressraum verwenden) oder sind sie bereits etwas getrennter (vom Standpunkt des Programmierers unveränderlich, vollständig wiederverwendbar und über eine genau definierte API kommunizierend)?
Andererseits sind die meisten Webanwendungen heutzutage in Client- und Serverteile unterteilt, die als separate Prozesse ausgeführt werden - normalerweise auf verschiedenen Systemen (und sogar physisch getrennter Hardware). Diese beiden Teile kommunizieren über eine gut definierte (normalerweise textuelle) Schnittstelle (XML / HTML / JSON über HTTP) miteinander. Oft (zumindest im Browser) gibt es mehrere Threads , die die Client-Seite der Anwendung verarbeiten (JavaScript / DOM, Eingabe / Ausgabe ...), manchmal sogar einen separaten Prozess, auf dem ein Plugin ausgeführt wird (Java, Flash, ... ). Das klingt genau wie das Original UNIX - Philosophie, vor allem auf Linux, wo Threads sind Prozesse durch (fast) jedes Konto.
Darüber hinaus sind die Serverteile so gut wie immer in mehrere Teile unterteilt. Ein separates Datenbankmodul, das angeforderte Operationen an strukturierten (oder unstrukturierten) Daten ausführt, ist ein kanonisches Beispiel. Es macht einfach nicht viel Sinn, eine Datenbank in einen Webserver zu integrieren. Es macht jedoch auch wenig Sinn, eine Datenbank in mehrere Prozesse aufzuteilen, die sich darauf spezialisiert haben, beispielsweise nur Anforderungen zu analysieren, Daten aus dem Datenspeicher abzurufen, die Daten zu filtern ... Man muss ein Gleichgewicht zwischen der Erstellung eines allmächtigen Giganten und einem Schwarm von fast nilpotenten Arbeitern, die die meiste Zeit miteinander reden.
Was die Textschnittstelle betrifft: Beachten Sie, dass das, was vor 40 Jahren für verarbeitete Daten galt, heute nicht unbedingt zutrifft - Binärformate sind sowohl hinsichtlich des für die De- / Serialisierung erforderlichen Speicherplatzes als auch der für die De- / Serialisierung erforderlichen Leistung billiger, und die Datenmenge ist immens größer.
Eine weitere wichtige Frage ist auch, was eigentlich das Ziel der UNIX-Philosophie war. Ich glaube nicht, dass numerische Simulationen, Bankensysteme oder öffentlich zugängliche Fotogalerien / soziale Netzwerke jemals gewesen sind. Die Wartung von Systemen, auf denen diese Dienste ausgeführt werden, war und ist jedoch definitiv auch in Zukunft.