Sunday, December 10, 2006

[OOP 2007] The Empire Strikes Back

Endlich ist was los im Blog. Stefan (Tilkov) meinte auf meine Hinweise zu HTTP:

“HTTP ist denkbar ungeeignet, um Nachrichten über das Web zu transportieren?” Michael: Nur HTTP ist geeignet, Nachrichten über das Web zu transportieren. Das Problem ist nicht HTTP und schon gar nicht REST, die HTTP und dem Web zugrunde liegende Architektur, sondern die Tatsache, dass das Verständnis derselben leider viel zu wenig verbreitet ist. Inbesondere Web Services haben dazu beigetragen, HTTP einen schlechten Ruf zu verpassen — indem sie es nicht benutzen, sondern missbrauchen.

Ja, da lasse ich mich doch gerne "provozieren" :-) Ich bleibe natürlich bei meiner Meinung, dass kein Weberfinder mit dem heutigen Wissen ein Protokoll wie HTTP entwerfen würde. Das ist nicht etwa eine despektierliche Retrospektive oder Herabwürdigung der damaligen Pioniere, sondern bedeutet schlicht: Mit dem damaligen Wissen und Anforderungen waren eben nur die damaligen Konzepte möglich. Auch heute würde es herausragender Persönlichkeiten wie Tim Berners-Lee bedürfen, um ein neues Web zu erfinden. Mit Nachrichten meine ich in diesem Kontext übrigens Nachrichten im Sinne von Transportprotokollen, also Pakete - ich beschränke mich also nicht etwa auf WebServices oder REST. Betrachten wir das heutige Web, so sehen wir eine ganze Menge an Workarounds, um Zustandslosigkeit und andere fehlenden Eigenschaften zu kompensieren. Zu erwähnen ist hier etwa HTTPS. Das betrifft natürlich nicht nur die Kommunikationsprotokolle. Nicht umsonst kämpfen wir heute mit ActiveX-Controls, Web-Server-proprietären Addons wie z.B. Filter und Interzeptoren, URL-Rewriting, Cookies, JavaScript, um nur die Spitze des Eisbergs in den Blickwinkel zu rücken. Das Web in der heutigen Form wurde Anfang bis Mitte der 90er konzipiert. Zu den Basisrequirements zählten damals u.a. die Darstellung von statischen Webseiten und deren Verlinkung über Hypercard-artige Konzepte. Siehe dazu die Dokumentation über die Historie des Web (u.a. http://infomesh.net/html/history/early/). Das heutige Web [1.0++, 2.0, ...] basiert hingegen auf der Darstellung verschiedener Arten von Information (Webseiten, Mediastreams), der interaktiven Kommunikation und Konversation von Benutzern mit Webanwendungen, der Annotation semantischer Information und dem programmatischen Zugriff auf das Web. Da liegt es klar auf der Hand, dass die ursprünglichen Web-"Middleware" auch nur die ursprünglichen Anforderungen beücksichtigt, nicht aber die neuen Herausforderungen. Gänzlich unberücksichtigt blieben damals auch die "-ilities" wie Verfügbarkeit, Skalierbarkeit, Sicherheit, Zuverlässigkeit, Erweiterbarkeit, ... Es ist also wie bei jeder Softwareentwicklung. Nach einiger Zeit nehmen die Änderungswünsche überhand und die ursprüngliche Rahmenarchitektur geht entweder dank zahlreicher Backpacks und Workarounds an "Design Erosion" zu Grunde oder muss komplett überarbeitet werden. Das gilt für Betriebssysteme, IDEs, Standards, Java, .NET und eben auch für die Web-Infrastruktur. Ich empfehle an dieser Stelle übrigens die Arbeiten von Henry Petroski: Wann immer eine Technologie erfunden wird, dann basiert sie auf den zeitgenössischen Erfahrungen und Anforderungen. Typischerweise werden Technologien aber nach einer gewissen Zeit über ihre Grenzen beansprucht und kollabieren dadurch oder weisen Probleme auf. Daher ist es wichtig aus den Fehlern zu lernen, um die Technologien entsprechend weiterzuentwickeln. Das ist sozusagen ein evolutionärer Prozess.
Wenn da nur die Kompatibilitätsaspekte nicht wären, auf deren Altar so manche Neuerung geopfert werden muss. Wer behauptet, mit den heutigen Anforderungen würde dennoch exakt die gleiche Architektur mit den selben Protokollen und Technologien entstehen wie zur Gründerzeit des Web, der muss mir schlicht erklären, wie sich die heutigen Anforderungen in der damaligen Infrastruktur berücksichtigt finden.
Über Kommentare bin ich hoch erfreut, nicht "nur" von Stefan

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?