Windows ConfidentialKompatibilitäts-Hacks in der Praxis

Raymond Chen

ES GAB EIN PROGRAMM , entwickelt für Windows® 3.1, das die Druckersteuerung öffnete, wenn Sie im Fenster der Systemsteuerung aus dem Menü „Datei“ den Befehl „Drucker“ aufriefen. Unter Windows 95 gab es in der Systemsteuerung im Menü „Datei“ keinen Eintrag „Drucker“ mehr. Daraus folgt, dass dieses Programm unter Windows 95 eine unsinnige Befehlsmeldung an die Systemsteuerung senden würde. Um dieses Problem zu beheben, erstellt Windows 95 ein Scheinfenster für die Systemsteuerung, das dieses Programm findet. Wenn das Programm die Meldung an das Scheinfenster sendet, öffnet sich der Ordner „Drucker“.

Einige Leute sind der Meinung, dass Windows 3.1 erkennen sollte, dass das Programm eine falsche Annahme über die Systemsteuerung anstellt, und eine Warnung ausgeben sollte. Auf diese Weise hätte der Autor des Programms die Warnung gesehen und vor Veröffentlichung des Produkts den Fehler beheben können. Doch um die Absicht eines Codeabschnitts zu erkennen, ist ein gewisses Maß an Analyse erforderlich, die bis in die Bereiche der künstlichen Intelligenz vordringt. Im Wesentlichen hätte Windows 3.1 erkennen müssen, dass das Programm einen strcmp für Drucker durchführte. Dieser strcmp hätte analysiert werden müssen und dann hätte man entscheiden müssen, ob ein Fehler vorlag. Aber das würde nur den Druckerfall abdecken. Wie viele Kompatibilitätsprüfungen soll das Programm Ihrer Meinung nach ausführen? Und wie sieht es mit falschen Positiva aus?

Es wird außerdem argumentiert, dass Windows 95 auf diese falsche Annahme mit einem Warndialogfeld „Programm XYZ macht etwas falsch“ antworten sollte. Doch damit die Systemsteuerung wissen kann, woher die unsinnige Nachricht kommt, müsste die Erkennung in das Fenstermanager verschoben werden. Dies führt zu einer anfälligen Kombination von zwei Komponenten, der Systemsteuerung und dem Fenstermanager. Auch hier ist die Lösung nur für diesen einen Fall geeignet. Möchten Sie, dass der Fenstermanager mit allen anderen Komponenten im System brüchig verbunden ist?

Die Bereitstellung einer generischen Meldung ohne Benennen der spezifischen Anwendung wäre leichter. Jedoch ist auch dies keine gute Lösung. Eine vage Fehlermeldung ist keineswegs besser als gar keine Fehlermeldung. Außerdem würde dieses Dialogfeld aller Wahrscheinlichkeit nach vom Benutzer ignoriert werden, vor allem weil keine entsprechende Maßnahme empfohlen wird. Die Benutzer würden dieses Dialogfeld als ein Ärgernis ansehen. Das ist ein sehr wichtiger Punkt. Es ist wesentlich, dass jede Fehlermeldung einen Maßnahmenvorschlag enthält. Wenn der Benutzer weiß, wie er/sie auf die Warnung reagieren kann, wird das Dialogfeld nützlich.

  

Ein weiteres Problem besteht darin, dass ein Dialogfeld aufgrund der Dialogfeldschleife eine eintrittsinvariante Stelle erzeugt. Dies ist ein technisches Problem. Unerwartete Eintrittsinvarianz ist eine der Hauptursachen für Bugs bei der UI-Programmierung. Darüber hinaus befindet sich die Systemsteuerung u. U. selbst in einem modalen Zustand, und durch das Anzeigen des Dialogfeldes fällt die modale Struktur auseinander.

Ein Dialogfeld erzeugt außerdem eine neue Lokalisierungsbelastung. Wenn für jeden Kompatibilitäts-Hack ein Dialogfeld geschrieben worden wäre, gäbe es hunderte von ihnen, die im gesamten System verstreut wären. Jedes Dialogfeld müsste in die 33 Sprachen übersetzt werden, für die Windows vollständige Übersetzungen bereitstellt.

Bedenken Sie abschließend die Reaktionen der Mitbewerber, wenn deren Produkt ein solches Dialogfeld auslöst. Wahrscheinlich würden sie sagen: „Microsoft macht andere für das eigene fehlerhafte Betriebssystem verantwortlich“ und „Microsoft sorgt mit Absicht dafür, dass unser Programm schlecht aussieht“. Ich übertreibe nicht. Es gab Unternehmen, die sich beim Kongress beschwert haben, dass Microsoft in arglistiger Art und Weise gegen das Fremdprodukt vorgeht und es deaktiviert. Bei einer weiteren Untersuchung wurde dann festgestellt, dass es deren Programme waren, die Fehler enthielten. Offen gesagt ist es besser, die Fehler für diese Firmen zu beheben, als sich auf eine langwierige Untersuchung vor dem Kongress einzulassen.

Aus diesem Grund zeigen die aktuellen Versionen von Windows nur dann eine Warnmeldung an, wenn ein Programm so inkompatibel mit Windows ist, dass es überhaupt nicht oder nur mit erheblichen Einschränkungen ausgeführt werden kann. Selbst in diesem Fall versucht Microsoft mit dem Hersteller zusammenzuarbeiten, damit kein Kunde auf der Strecke bleibt. Letzten Endes möchten die Benutzer Programme auf dem gekauften Betriebssystem ausführen. Wenn ein Programm nicht funktioniert, ist es unwesentlich, wer dafür verantwortlich ist – wichtig ist, dass die Arbeit damit erledigt werden kann.

Raymond Chen, The Old New Thing, beschreibt die Geschichte von Windows und die Win32-Programmierung. Er arbeitet an einem Buch, das zufälligerweise denselben Titel The Old New Thing (Addison-Wesley, 2007) trägt.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.