Freitag, 23. Januar 2009

 

Postels Gesetz (Postels Law) - Robustheitsprinzip

Jonathan Postel (1943-1998), ist am besten bekannt als Herausgeber der Requests for Comments (RFC), eine Aufgabe die er fast dreißig Jahre lang ausführte. Während dieser Zeit verfasste er auch über 200 RFC, unter anderem grundlegende wie RFC 791 bis RFC 793 (IP, ICMP und TCP) und RFC 2223 (Instructions to RFC Authors).

Sein vielleicht bekanntestes Vermächtnis stammt aus RFC 793, welches das Robustheitsprinzip beinhaltet und oft als Postels Gesetz bezeichnet wird: „be conservative in what you do, be liberal in what you accept from others“ („sei konservativ in dem was Du tust, sei tolerant in dem was Du von anderen akzeptierst“, oft formuliert als „sei konservativ in dem was Du sendest, sei tolerant in dem was Du empfängst“).

Dieses Prinzip klingt ziemlich vernünftig und wurde bei der TCP/IP-Implementierung und bei der Implementierung von Webbrowsern umgesetzt. Bei Protokollen bedeutet es, "halte dich genau an die Spezifikation beim Senden, sei aber tolerant beim Parsen der empfangenen Daten". Solange sich jeder an das Prinzip hält, funktioniert das prima. Wehe aber, wenn sich die Sender nicht alle an das Prinzip halten. Eine Zeit lang wird das funktionieren, das ist ja der Sinn dieses Prinzips.

Problematisch wird die Sache jedoch, wenn es Änderungen oder Erweiterungen des Protokolls gibt. Wie gesagt, kein Problem, wenn sich alle daran halten. Wenn sich nicht alle daran halten, es dann vielleicht aufgrund des Marktes ergibt, dass sich eine nicht-Standard-konforme Software weit verbreitet, kann es passieren, dass vieles nicht mehr funktioniert.

Ein Beispiel ist das World Wide Web mit HTML (ist zwar kein Protokoll sondern eine Auszeichnungssprache, das Protokoll ist HTTP): die Webbrowser waren sehr tolerant gegenüber dem empfangenen HTML-Code und versuchten eine "möglichst gute" Darstellung des Inhalts. Manche Browser waren da sehr tolerant (IE), andere sehr viel weniger (Netscape, Mozilla).

Ein Beispiel


<b>das ist fett und das ist <i>fett-und-kursiv</b></i>

das ist für den Menschen kein Problem, es sollte etwa so aussehen:

das ist fett und das ist fett-und-kursiv

Viele Browser haben solche kleinen Fehler toleriert. Die Folge war, dass es total viele schlechte Web-Seiten gab, da sie ja "funktionierten" (im IE). Sogar WYSIWYG-Tools produzierten syntaktisch fehlerhaften Code, nicht so offensichtlich wie mein Beispiel aber doch fehlerhaft. Übrigens wird das Programmierern wesentlich seltener passieren, denn die sind ja gewöhnt, dass ein Compiler jeden kleinen falschen Punkt, Beistrich oder Strichpunkt "bemeckert".
Offensichtlich führt hier die zu große Toleranz zu großen Problemen. Diese Probleme sind für jeden Web-Entwickler ganz deutlich, er muss 23 verschiedene Browser testen, 17 verschiedene Tricks anwenden, damit die Web-Seite überall "richtig" dargestellt wird. Dabei ist natürlich dazugekommen, dass nicht nur HTML unterschiedlich tolerant interpretiert wird, sondern auch CSS und natürlich JavaScript (auf einem Browser läuft's, auf einem andern geht gar nichts, weil ein Syntaxfehler in einem Zweig drinnen ist, der praktisch nie erreicht wird).

Das Robustheitsprinzip von Postel hat uns ein Riesen-Deployment-Problem beschert - echt schade, es klingt wirklich logisch und gut, ich hätte lieber mehr positives zum Robustheitsprinzip geschrieben.

Wir hätten weniger Probleme, wenn sich die Browser nicht so tolerant gegenüber fehlerhaftem HTML-Code verhalten hätten. Vielleicht hätten schon viel früher Normungsbestrebungen einsetzen müssen. Allerdings ist es fraglich, ob sich das Web so schnell und so weit entwickelt hätte, wenn HTML von anfang an genormt gewesen wäre bzw. wenn sich die Browser intoleranter verhalten hätten. Wahrscheinlich würden dann nur Programmierer Web-Sites erstellen (können), es wären viel weniger "Kreative" auf den WWW-Zug gesprungen. Alles wäre viel einfacher - nicht?

Man kann dieses Prinzip auch (na ja ein bisschen) auf das Lernen umsetzen (bei HTML haben viele Web-Designer nie ordentlich HTML gelernt, weil es ja nie Fehler gab):
Man lernt am meisten durch Fehler, das wissen viele, wenn aber nie Fehler angezeigt werden, lernt man nichts oder man lernt etwas ganz falsches (wobei es natürlich für das Selbstwertgefühl schon sehr gut ist, wenn man auch Feedback für richtige Sachen bekommt).

Quellen: Eigene Erfahrung, Wikipedia, Joel On Software: Martian Headsets (sehr lesenswert, ich wünschte, ich könnte so schreiben)

Labels:


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

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

Abonnieren Posts [Atom]