Qualitätsmerkmale eines Browsers

Die Welt hat einige Internet-Browser. Vom Internet Explorer zu Safari, von Opera bis Firefox, von lynx bis w3m, und selbst exotischere Varianten wie Konequeror und Epiphany existieren, neben etlichen kleinen Handy-Browsern. Man könnte also meinen, die Welt bräuchte keinen weiteren Browser, und ein weiterer Browser wäre, als würde man das Rad neu erfinden. Ähnliche Kritik erhielt Google ja für Chrome.

Nun, ich denke, es kann nicht wirklich genug Browser geben, zumindest ist dieser Stand noch lange nicht erreicht. Jeder Browser bringt seine eigenen Konzepte mit, und hat seine eigenen Vor- und Nachteile. Und vor Allem seine eigenen Sicherheitslecks, aber eben auch seine eigenen sicheren Bereiche. Genau darin liegt der Vorteil vieler Browser – sofern diese auch einigermaßen weit verbreitet sind – eine Mischkultur sorgt dafür, dass Sicherheitslücken nicht sofort einen Großteil der Nutzer betreffen – und erschwert es damit den Crackern, Exploits zu schreiben.

Freilich erschwert es auch das Schreiben normaler Webseiten, da man seine Seite auf vielen Browsern testen müsste, und an diese anpassen. Dafür hat man sich früher eigentlich mal Webstandards ausgedacht. Aber mei, die Realität sieht nunmal anders aus. Man überlegt sich vorher nicht, was man implementiert, man implementiert immer das, was einem grade sinnvoll erscheint – setzt es dann in die Welt, und hofft, dass Andere es auch benutzen. Das macht es schwierig, eine Verteilung vieler verschiedener Browser zu realisieren, denn die meisten Nutzer von Webseiten sind … ungebildet in dieser Hinsicht … und wollen einen Webbrowser auf dem möglichst alle Seiten funktionieren, die möglichst gut aussehen. Gutes Aussehen ist damit ein Marktvorteil, weswegen die Unternehmen sehr viel Wert darauf legen, und da gutes Aussehen teuer ist, und Portabilität noch teuerer, wird auf Letztere verzichtet, und Seiten werden auf die am weitesten verbreiteten Browser optimiert. Diese wiederum sind meistens Kommerziell, entwickeln ihre eigenen Standards, und haben ein Interesse, dass sich diese durchsetzen.

Das ist alles nichts neues. Dass das kein Idealzustand ist, ist klar. Ich weiß aber nicht so recht, wie man ihn wirklich ändern könnte. Aber – ein neuer Browser, der dem Sucks-Less-Prinzip genügt, wäre vielleicht ein Anfang.

Es fällt erstmal schwer, in Worte zu Fassen, was ich an den gängigen Browsern schlecht finde. Firefox ist ein Speicherfresser, Opera hat eine seltsame UI, Epiphany hat einfach viel zu wenig features, die Lynx-Derivate sind an sich gut, unterstützen aber moderne Webinterfaces nicht – weil sie dafür wohl auch nicht gemacht worden sind – und Konqueror und der Internet Explorer stehen eh außer Konkurrenz.

Nun, ich bin kein Experte auf dem Gebiet. Jetzt trage ich vielleicht erstmal ein paar meiner Meinung nach positive Ansätze zusammen, die ich so gesehen habe.

Erstmal wichtig ist Fehlertoleranz. HTML war ursprünglich darauf ausgelegt, inzwischen will man das eigentlich nicht mehr, trotzdem schwirren im Netz noch ein Haufen schlechter Internetseiten rum. Wie man das am Besten macht, weiß ich nicht. Die aktuellen Browser machen es eigentlich alle ganz gut, finde ich. Was ich mir aber wünschen würde, wäre, dass fehlerhafte Seiten auch als solche gekennzeichnet würden – durch irgendein peripheres, aber auffallendes Symbol (so wie bei Scriptfehlern). Damit die Leute, die sich nicht an Standards halten, das auch merken, und möglichst gesagt bekommen.

UI-Technisch fände ich es schön, wenn man MessageBoxen und Password-Prompts nicht als Popup kriegen würde, das den gesamten Browser blockiert. Wäre schön, wenn man sowas MDI-Mäßig realisieren könnte, also so, dass ein Tab alle Unterfenster – auch MessageBoxes und PasswordPrompts – enthält. Den User darüber informieren, dass irgendwo so eine Box angezeigt wird, könnte man ja durch blinkende Tabs, etc. – Allgemein fände ich es gut, wenn man optional alle popup-fenster, etc., in Unterfenstern öffnen könnte. Und wenn ein Popup-Blocker vielleicht Popups intern öffnen würde, aber nur eine Miniaturansicht in einem Seitensymbol anzeigt oder sowas. Sind nur ein paar Grundkonzepte, bis auf Letzteres gibt es das Alles soweit ich weiß schon in Opera. (Ich verwende grade zum ersten mal seit langem wieder Opera. Der Browser ist ziemlich Überzeugend in Sachen Schnelligkeit.) Weiter fände ich es schön, wenn sich der Browser in möglichst viele Desktopumgebungen integrieren lassen würde.

Ein weiteres Qualitätsmerkmal wäre die Aufteilung in verschiedene Processe. Angeblich macht Google Chrome das. Es passiert – gerade bei Plugins, etc. – immer wieder, dass mal eine Webseite den ganzen Browser blockiert, oder gar zum Absturz bringt. Das klingt vielleicht am Anfang nicht besonders „Lightweight“, aber einen neuen Process erzeugen lastet das System in der Regel nicht so sehr aus. Wie man diese Aufteilung am Besten realisiert, auch im Sinne des Zusammenfügens in eine Tabbar – das weiß ich nicht. Ich würde es mit zusammengeblitteten Surfaces versuchen. Gehen sollte es jedenfalls irgendwie. Das Ultimum wäre, wenn man Teile des Browsers virtualisieren, oder gar von einem ganz anderen Rechner ausführen lassen könnte – zum Beispiel, um Exploitbehaftete Seiten in einer Sandbox zu testen. Aber ich weiß nicht, inwieweit sich das sinnvoll implementieren lässt. Ganz wichtig: Plugins sollten wenigstens als anderer User laufen gelassen werden, wenn man das will. Plugins machen den Browser potentiell unsicher, da ist es gut, wenn man deren Rechte beschränkt.

In Sachen Aufteilung fände ich auch ein besseres, „sichtbares“ Cookie-Management gut. Man sollte seine Tabs und Seiten strikt voneinander trennen können. Das könnte man zum Beispiel durch eine Baumdarstellung, die den Link-Folge-Graphen darstellt, etc., erreichen, und angibt, auf welche Cookies man zugreifen kann. Sicherlich nicht leicht, und nichts, was man innerhalb einer Browserversion zu etwas machen kann, womit man „intuitiv“ umgehen kann. Aber sicherlich letztendlich möglich.

Dann freilich die Möglichkeit, JavaScript für einzelne Webseiten zu deaktivieren bzw. zu aktivieren. Gleiches für allerlei Plugins. Dies geht unter Firefox zum Beispiel mit NoScript. Aber ich finde, das sollte schon im Browser direkt integriert sein. Alle XMLHttpRequests sollten irgendwo angezeigt werden – wenigstens in einem Symbol, das anzeigt, welche Transaktionen gerade stattfinden.

Die Ausführung von JavaScript sollte irgendwie beschleunigt werden, zum Beispiel durch einen einfachen JIT-Compiler, wenn nicht sogar einen AOT-Compiler.  Der sollte allerdings nicht zu aufgedröselt sein – fünfminütige Ladeanfälle, wie man sie von Java kennt, sollten vermieden werden. Wenn beide Compiler nicht zu sehr optimieren sollte man das aber recht schnell hinbekommen.

Dann – ganz wichtig – einen Garbage Collector  verwenden. Bei so komplexen Softwarekonstrukten wie Browsern halte ich es für weder sinnvoll noch produktiv, den Speicher manuell zu verwalten. Welcher Garbage Collector sich hier empfiehlt, nun, das muss man wohl durch Fallstudien und Erfahrung herausfinden. Trotz des Garbage Collectors sollte man sich aber bemühen, wenig Speicher zu verbrauchen, sodass der Browser „Lightweight“ bleibt.

Dann sollte ein Browser noch möglichst viele Standards von anderen Browsern übernehmen, vielleicht durch Zusatz-Plugins, etc. – die sollten nicht ewig dortbleiben, sondern man sollte sie wieder entfernen können, sofern sie sich nicht durchsetzen. Aber es sollte vielleicht – soweit das realisierbar ist – eine API geben, um Standarderweiterungen definieren zu können, die noch nicht implementiert wurden, wenigstens in gewissen Grenzen. Eine kleine Extension-API wie für Firefox wäre generell nett, allerdings weniger tief im Browser integriert vielleicht. Wie konkret man das realisieren würde – spontan fände ich Webseiten von der Festplatte, die JavaScript mit erhöhten Berechtigungen ausführen dürfen, sinnvoll, das geht in Richtung XUL, aber XUL ist ein sehr mächtiges System, ich rede eher von sowas wie Greasemonkey-Scripts.

Joa. Und dann das Letzte und wohl schwierigste: Versuchen, einen Großteil des Browsers zu verifizieren. Manches geht vielleicht nicht, oder nicht mit vertretbarem Aufwandt, gerade wenn es um Erweiterbarkeit geht, aber dann wenigstens einen großen Teil davon verifizieren.

Nun, das sind sehr hohe Anforderungen. Die stelle ich garnicht, denn die Frage ist zum Einen, ob man sie überhaupt realisieren kann (geschweigedenn ob ich das kann), zum Anderen, ob es produktiv ist. Ich weiß auch nicht, ob ich alles gesagt habe, und so deutlich gemacht habe, wie ich es meinte. Worum es mir eigentlich geht ist, ein paar Denkanstöße an die Entwickler da draußen zu geben, was ich mir wünschen würde.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: