Eine kurze Geschichte des WIMP Interface



Mac OS X: Das wohl zur Zeit schönste WIMP Interface

Wenn Du ein WIMP Interface benutzt, mußt Du nicht unbedingt ein Wimp (WIMP engl.: Feigling, Schwächling) sein.

Die Abkürzung WIMP steht für die vier wichtigsten Konzepte heute typischer GUIs (engl. Graphical User Interface, Graphische Benutzerschnittstelle):

An dem WIMP Konzept hat sich viele Jahre hinweg nichts geändert. Eine wirkliche interessante Neuerung sind jedoch Tablett PCs oder aber dreidimensionale virtuelle Welten.

Doch nun ein (unvollständiger) Blick zurück in die Vergangenheit.

1953-1963: SAGE



SAGE: Computerinteraktion mit der Lightgun

Das Air Traffic Control System SAGE (Semi-Automatic Ground Environment) war ein Luftverteidigungssystem der USA und kostete, geschätzt, 8 bis 12 Milliarden US Dollar, wenn man den Kurs von 1964 zugrunde legt. Nicht nur ein Meilenstein und eine Quelle von Know-How in der Geschichte der Entwicklung der Computer, sondern nebenbei auch das erste System mit einer „Lightgun“, dem Vorläufer des „Lightpen“.

Hielt man die „Lightgun“ auf ein Objekt auf dem Monitor, z.B. ein Flugzeug, und drückte einen Knopf, so lieferte der Computer Informationen über dieses Objekt.

Die Graphikkarten der ersten IBM PCs unterstützten noch Lightpens, wurden aber mangels passender Software kaum genutzt.

Ausführlichere Informationen finden sich u.a. unter:

Updates:

1963: Sketchpad



Sketchpad auf der TX-2 am MIT, unten die Hand von Ivan Sutherland

1959 wurde am Lincoln Laboratory des MIT der TX-2 aufgebaut, einer der ersten Rechner mit Transistoren anstelle von Vakuumröhren. Der Speicher betrug 68K Words, wobei ein Word 38 Bit groß war. Das war etwa doppelt so viel wie damalige kommerzielle Computer zur Verfügung hatten. Es gab kein Betriebssystem und Programme wurden von Papierbändern eingelesen.

Eine Besonderheit für die damalige Zeit war, daß man die Maschine interaktiv benutzte. D.h. man ließ nicht die Programme laufen und holte sich irgendwann später das Ergebnis ab, sondern man machte etwas, der Computer reagierte sofort darauf. Dazu gab es einen Lightpen und ein 7“ Vektordisplay mit einer Auflösung von 1024x1024 Punkten.

Ivan Sutherland, Graduate Student am MIT, bekam von 3 bis 5 Uhr Morgens auf der Maschine zugewiesen. Die Zeit nutzte er für seine Ph.D. Thesis „Sketchpad: A Man-machine Graphical Communications System“, ein Programm daß er erlaubte mit dem Lightpen Zeichnungen am Bildschirm zu erstellen und zu verändern. Man konnte die Zeichnung vergrößern und verkleinern, Linien wurden wie Gummibänder gezogen.

Siehe auch: Sketchpad: A man-machine graphical communication system, von Ivan Edward Sutherland.

1968: NLS/Augment



Die erste Maus

„NLS“ (oNLine System), später „Augment“ genannt, war ein hypertextbasiertes Multiusersystem, das als Forschungsprototyp am Augmented Human Intellect Research Center der Universität Stanford entstand. Es gab die Möglichkeit Videobilder einzuspeisen und insgesamt war das System so brauchbar, das die Entwickler NLS für ihre tägliche Arbeit nutzten. Die wohl bekannteste Erfindung war die Maus.

In der frühen 70ern, als sich die Finanzierung änderte, wechselten einige Mitarbeiter zum Palo Alto Research Center (PARC) der Firma Xerox (und ein paar davon später wiederum zu Apple).

1969: Überlappende Fenster

(Dieses Kapitel fehlt noch. Zumindest gab es wohl 1969 die Idee zu sich überlappenden Fenstern. Was auf dem ersten Blick heute banal erscheint war es damals nicht. So hatte zum Beispiel Microsoft Windows 1.0 noch keine überlappenden Fenster und Siemens hatte unter dem X Windows System einen Fenstermanager entwickelt, der oft benutzte Fenster vergrößerte und andere verkleinerte.)

1974 & 81: Xerox Alto & Star

 

Seit 1972 unter der Leitung von Alan Kay am Xerox Palo Alto Research Center (PARC) enwickelt, kam 1981 der „Xerox 8010“ für 16595 US Dollar als einer der ersten kommerziellen Computer mit einem WIMP Interface auf den Markt.

Die Firma Xerox versuchte den 8010 als Maschine für Büroarbeiten zu vermarkten, hatte jedoch u.a. wegen des hohen Preises keinen Erfolg damit. Die meisten Maschinen wurden (vermutlich) an Universitäten genutzt, die zudem mit den ersten, ebenfalls bei Xerox entwickelten, Laserdruckern ausgestattet wurden.

In obiger Abbildung sieht man außer der 1968 vom „Augmented Human Intellect Research Center“ vorgestellten Maus auch das dort entwickelte klavierähnliche 5-Tasten Feld als Eingabegerät, das durch Greifen von Akkorden 32 Zustände annehmen kann. Was man damit anfangen konnte, versucht man im Moment wieder herauszufinden (www.mouse.org).

Die dem System zu Grunde liegende Programmiersprache und Entwicklungsumgebung war die eben am PARC entstandene objektorientierte Programmiersprache Smalltalk-80.

Exkurs: Smalltalk

Smalltalk war als eine einfache Sprache für den Programmieruntericht gedacht und zudem eine der ersten objekt-orientierten Computersprachen, lange bevor Objekt-Orientierung populär wurde.

Einige Smalltalk Fanatiker schimpfen gerne über Sprachen wie C++ oder Java und daß diese nicht wirklich objekt-orientiert seien, weil dort nicht alles object-orientiert ist. Ignorieren Sie gelassen dieses Geschrei einiger geistig unterbelichteter und lassen Sie sich den Spaß nicht verderben. Der Witz ist: In Smalltalk ist tatsächlich alles ein Objekt oder ein Teil davon:

Smalltalk Syntax

    * Kommentare sind in Gänsefüßchen: "Kommentar"
    * Punkte schließen eine Anweisung ab: a := a + 2.
    * Bei Methodenaufrufen mischen sich im Gegensatz zu C++/Java Methodenname und Parameter:
      Java/C++: win.set_x_y_width_height(5, 5, 120, 50);
      Smalltalk: win set_x: 5 y: 5: width: 120 height: 50.
      Dadurch lassen sich Aufrufe mit großer Parameteranzahl besser lesen.
    * Zuweisungen: a := 7.
    * Zeiger auf übergeordnete Klasse: super
    * Zeiger auf eigenes Objekt: self
    * R�ckgabe von Werten am Ende eines Methodenaufrufs: ^ result.
    * '+' oder '*' sind Methoden von 'SmallInteger', darum gilt nicht die 'Punkt vor
      Strich-Rechnung' bei Ausdrücken:

      a := 7 + 1   * 2
           ^ ^ ^ ^ ^ ^
           | | | | | |
           | | | | | Parameter mit dem Wert 2
           | | | | Methode '*'
           | | | Der Aufruf '7 + 1' liefert ein Object vom Typ 'SmallInteger'
           | | | mit dem Wert 8
           | | Parameter vom Type 'SmallInteger' mit dem Wert 1
           | Methode '+'
           Objekt vom Typ 'SmallInteger' mit dem Wert 7

      Die Variable 'a' zeigt am Ende auf ein 'SmallInteger' Objekt mit dem Wert 16.
    * Es lassen sich auch Klammern setzen:
      a := ( 7 + 1 ) * 8 .
    * Anweisungsblöcke sind Objekte: [ a := a + 1. ]
    * Bedingungen sind Methoden der Klasse 'Boolean':

      v = 10               "Ein Vergleich liefert eine Klasse vom Typ 'Boolean' zurück."
        ifTrue:            "Die Methode 'ifTrue' der Klasse Boolean bekommt einen.."
        [                  "..Anweisungsblock als Parameter übergeben.."
          'Zehn' printNl.  "..der das Wort 'Zehn' auf den Bildschirm schreibt"
        ].

    * Schleifen sind Methoden von Anweisungsblöcken (kurz Block):

      v := 0.              "Setze die Variable v auf Null"
      [ v = 10 ]           "Ein Objekt vom Typ 'Block', das vergleicht ob v gleich 10 ist"
        whileFalse:        "Methode von Block, die den Block selbst und den als Parameter.."
        [ v printNl.       "..übergebenen Block solange ausführt, bis der erste Block.."
        v := v + 1. ].     "..wahr ist."

    * Auch Klassen sind Objekte und Ableiten ist ein Methodenaufruf:
            Object subClass: #MeinObject. 

Smalltalk ist aber gleichzeitig auch eine Programmierumgebung. Man schreibt nicht ein Programm, das man anschließend ausführt, sondern kann das Programm ändern, während es läuft.

Delegation

Für GUI Bibliotheken wurden eine Reihe von Mechanismen entworfen, damit Objekte miteinander kommunizieren können, ohne dabei aufwendig neu Klassen abzuleiten.

Hier einige Beispiele:

* Callbacks (z.B. OSF/Motif, Gtk+)
* Message Maps (z.B. Microsoft Foundation Classes)
* Callback Objects (z.B. Fresco)
* Signal & Slot (z.B. Qt, TOAD)
* Anonyme Klassen (z.B. Java)

Mit dem in Smalltalk verfügbaren 'Block', auch 'Closure' genannt, waren solche Tricks jedoch nie nötig.Hier ein Beispiel mit GNU Smalltalk:

"*** create a TPushButton class ***"

Object subclass: #TPushButton
  instanceVariableNames: 'callback'
  classVariableNames: ''
  poolDictionaries: ''
  category: ''!

!TPushButton class methodsFor: 'various class methods'!
   
new
  | r |
  r := super new.
  ^r
! !

!TPushButton methodsFor: 'various instance methods'!

addCallback: aBlock
  callback := aBlock.
!
 
mouseDown
  callback value.
!
 
! ! 
    
"*** start the program ***"

Smalltalk at: #program put: (TPushButton new)!

program addCallback: [ 'button pressed' printNl. ].

program mouseDown!

Startet man das Programm, so wird der Aufruf der Methode mouseDown den Text „button pressed“ ausgeben.

Model-View-Controller (MVC)

Unter Smalltalk wurde auch die Model-View-Controller (MVC) Architektur zur GUI Programmierung eingeführt. Den Kern bilden 3 Klassen, die wie folgt zueinander in Beziehung stehen:



Model-View-Controller

* Model
Verwaltet die durch das Programm zu bearbeitenden Daten, z.B. Uhrzeit, Name einer Person.
* View
Verantwortlich für die graphische Ausgabe der im Model enthaltenen Daten. Z.B. die Darstellung der Uhrzeit als ein Kreis mit Zeigern.
* Controller
Nimmt Maus- und Tastaturereignisse entgegen und veranlaßt bei Bedarf, daß sich Modell und View ändern oder reichen die Ereignisse an andere Controller weiter.



Mehrfache Views bei MVC

Einem Model können mehrere Views zugeordnet sein. Z.B. kann ein Model, das eine Uhrzeit enthält ein View haben, das die Zeit als Kreis mit Zeigern und ein weiteres, das die Zeit mit Ziffern darstellt.
Ändert sich das Model, z.B. weil eine Minute vergangen ist, dann ändern sich auch die Views.



Beziehungen zwischen Views bei MVC

Views können weiterhin untergeordnete Views enthalten, was im Programm durch eine Baumstruktur von Views repräsentiert wird.



Pfad von Eingabeereignissen bei MVC

Eingaben werden von oben nach unten von den Controllern durch die von den Views vorgegebene Baumstruktur hindurchgereicht, bis sich ein Controller findet, der das Ereignis bearbeitet.

Eine abgspeckte Variante von MVC ist Model-View, wie es z.B. bei Java's Swing Bibliotheken Verwendung findet. Hier werden die Ereignisse nicht �ber Controller verteilt, sondern gleich �ber das zugrunde liegende Fenstersystem.

Objekt Orientierung, Delegation, Model-View-Controller, Smalltalk brachte all dies schon mit sich.

Der führende Kopf hinter der Smalltalk-Entwicklung bei Xerox, Alan Kay, finanziert seit den 90ern die Entwicklung einer frei verfügbaren Smalltalk Implementierung namens Squeak, die für die Entwicklung von Multimedia Anwendungen gedacht ist.

1983: Apple Lisa



Apple Lisa

Die Entwicklung des Lisa began 1978. Nachdem Apples CEO Steve Jobs 1979 jedoch von Xerox zu einem Rundgang durch das Xerox PARC eingeladen worden war, wurde 1980 die Zielstellung des Lisa komplett umdefiniert und 1981 parallel eine neue Entwicklung gestartet, die des Apple Macintosh.

1983 erschien der „Apple Lisa“ für 10.000 US Dollar. Technische Eckdaten waren eine mit 5 MHz getaktete Motorola 68000er CPU und 1MB RAM.

Zur GUI Programmierung stand eine speziell für den Lisa entwickelte objektorientierte Variante von Pascal namens „Clascal“ zur Verfügung, sowie eine Klassenbibliothek namens „Lisa Toolkit“.

Wie der Xerox 8010 war jedoch auch der Lisa zu teuer, um ein Erfolg zu werden. Eine Zeit lang wurde er noch unter dem Namen Macintosh XL vertrieben, diente als Entwicklungsplattform für den Macintosh und wurde ab Mitte 1985 nicht mehr produziert. Angeblich sollen gar die letzten Lagerbestände auf einer Mülldeponie verscharrt worden sein.



Lisa Desktop

1984: Apple Macintosh



Apple Macintosh

1984 erschien der ab 1981 parallel zum Lisa und unter Leitung von Steve Jobs entwickelte „Apple Macintosh“, bei dem es gelang, den Preis auf ca. 3.000 US Dollar zu drücken. Die CPU war die gleiche wie beim Lisa, nun jedoch mit 8MHz. Beim RAM wurde drastisch eingespart: 128kB statt 1MB wie beim Lisa. Zur Softwareentwicklung war das zu wenig, so daß der Lisa zunächst als Entwicklungsplattform für den Mac diente.

Im Gegensatz zum Lisa gab es für den Macintosh zun�chst keine objekt-orientierte Programmiersprache und somit auch keine Klassenbibliothek. Die dem System zu Grunde liegende Programmiersprache war Pascal und ab 1990 C.

Die GUI Bibliothek des Macintosh heißt Toolbox und bietet ein nur relativ geringes Abstraktionsniveau.
So haben die Anwendungen z.B. einen vergleichmäßig hohen Anteil an der Eventverteilung: Die Anwendung ruft Funktionen auf um sämtliche auf dem System anfallenden Nachrichten abzuholen und verteilt diese anschließend über einen Satz weitere Funktionen an andere Anwendungen oder gar das System. Gelegentlich bezeichnet man dieses auch als das Pull-Modell.



Macintosh Desktop

1985: Digital Research GEM



Atari 520 ST

Hinter der Firma Atari steckte 1985 Jack Tramiel, Gründer der Firma Commodore, die zunächst mit Taschenrechnern und später mit dem C64 den meistverkauften Computer der Welt auf den Markt brachte. Nach Streitigkeiten mit seinem Aufsichtsrat, verließ er die Firma und kaufte kurzerhand seinen ehmaligen Konkurenten Atari um den anderen zu zeigen, was eine Harke ist.

„Power Without the Price“, unter diesem Slogan erschien Mitte 1985 der Atari 520 ST mit 8MHz getakteter Motorola 68000er CPU und 512kB RAM. Das Betriebssystem war ein auf die 68000er CPU portiertes DOS names TOS (Tramiel Operating System) von Digital Research (dem Erfinder von CP/M) und der darauf aufbauende Graphics Environment Manager (GEM), dessen Entwicklung erst 1984 begonnen hatte. Der ST war mit etwa 1500 Euro unter der Hälfte des Preises des Apple Macintosh zu bekommen.

Neben dem ST war GEM u.a. auch für IBM PC Kompatible unter DOS verfügbar, wo es bis Anfang der 90er noch mit Microsoft Windows konkurrierte. GEM brachte Digital Research auch eine gerichtliche Auseinandersetzung mit Apple wegen der Ähnlichkeit mit der Oberfläche des Macintosh ein. Die Leute streiten ja gerne, Apple habe selber nur bei Xeorx geklaut, aber Apple hatte auch dafür an Xerox gezahlt und einige der dortigen Entwickler übernommen.

GEM bietet Schnittstellen zu C und Assembler an. Im Vergleich zur Apple Toolbox ist das Programmierkonzept hinter GEM noch rudimentärer. Der Sourcecode von GEM ist inzwischen unter der GNU GPL frei verfügbar.

1985: Windows 1.01


Microsofts Antwort auf den Mac ohne überlappende Fenster. 1983 angekündigt, zwei Jahre später wirklich verfügbar, wurde aber kein Erfolg und wurde komplett wieder eingestampft.

1986: Apple MacApp

1986 bringt Apple die Klassenbibliothek MacApp für den Macintosh auf den Markt und sie ist nur etwa halb so groß wie ihr Vorgänger „Lisa Toolkit“.

Wieder ist sie in einer objektorientierten Pascal-Variante implementiert, diesmal in „Object Pascal“, die aus der eigens initiierten Kooperation zwischen Pascal Erfinder Niklaus Wirth und Apples ehemaligen Clascal Entwicklern entstanden war.

Anfang der 90er kommt Apples System 7 (MacOS 7) auf den Markt, das jetzt nicht mehr in Pascal, sondern in C implementiert ist. Dazu erscheint auch eine neue Version von MacApp, entsprechend in C++ implementiert.

MacApp wurde zum Vorbild für eine Reihe anderer Bibliotheken wie z.B. ET++ oder, in Ansätzen, Borlands Object Windows Library (OWL) für Microsoft Windows.

Die Versionsnummer von MacApp ist inzwischen (Mitte 2000) bei 14, wobei jedoch ein direkter Sprung von 3.3 auf 12.0 dazwischen liegt.

1987: Windows 2.03


Komplett neu entwickelt gab es ab dieser Version einander überlappende Fenster. Außerdem gab es noch Window286 und eine zusammen mit Compaq entwickelte Version namens Windows/386 für Compaqs Computer mit 80386 CPU, die mehr an die Leistungfähigkeit der in den Macs verwendeten Motorola 68000er CPU herankamen.

Noch war nicht klar ob sich Windows oder GEM auf dem durchsetzen würden.

1988 (?): Sun NeWS

(Dieses Kapitel fehlt noch. SunView NeWS (Network-extensible Window System) war ein Client/Server Fenstersystem wie X11. Das heißt Bildschirm, Tastatur und Maus konnten auf einem Rechner laufen, das eigentlich Programm auf einem anderen Rechner. Das besondere war, daß hinter der Bildschirmausgabe ein Interpreter für die Programmiersprache Postscript stand, der um objekt-orientierte Eigenschaften erweitert wurde. Eine Klasse Idee und ich kann ersteinmal nur mutmaßen, warum daraus nichts wurde: Die Idee kam zu früh und/oder war zu mächtig um einfach beherrschbar zu sein.)

1989: NeXTStep/Mac OS X



Der NeXT Cube

Nach dem furiosen Erfolg des Macintosh zerstritt sich Apples Management 1985 jedoch mit Steve Jobs. Der beschloß den nächsten Computer nach dem Macintosh zu entwickeln, und gründete „NeXT Computer“.

1989 erschien der „NeXT Cube“ mit dem Mach/BSD basierten Betriebssystem NeXTStep. Das Kistchen war seiner Zeit mal wieder voraus: Motorola 68000 CPU 25/33MHz, serienmäßiges 250MB MO Laufwerk (ein wenig fehlerträchtig, weil es eine absolute Neuheit war), ein DSP (Motorola 56001) zur Soundgenerierung, Postscript zur Ansteurung des 1120×832 großen Bildschirms und das ganze gesteckt in einen schwarzen Würfel von frogdesign und mit einem 10.000$ Logo NeXT von Paul Rand versehen, der auch schon das IBM Logo mit den horizontalen Streifen entworfen hatte.

Eine tolle Kiste. Allerdings lag der Preis bei 6500$ und so hoffte man den NeXT Cube zunächst an Universitäten verkaufen zu können. In der Tat erblickte das World Wide Web (WWW) auf einem NeXT Computer am schweizerischen CERN das Licht der Welt.

Die Software: Wie beim Lisa und Mac wurde wieder eine neue objekt-orientierte Programmiersprache für das System entwickelt: Objective-C, eine Mischung aus Smalltalk und C.

Besonders die visuelle Entwicklungsumgebung sorgte für Aufmerksamkeit: Mit ihr war es möglich die graphischen Bedienelemente mit Hilfe der Maus zu plazieren und mit dem Programm zu verbinden. IBM kaufte die Nutzungsrechte daran für 1 Millionen Dollar, ließ es wohl aber dabei bewenden. Seltsame Leute.

Die Rechner verkauften sich jedoch nur schleppend, so daß NeXT zunächst seine Software auch auf andere Rechner portierte und die Hardwareproduktion schließlich ganz einstellte.

1994 wurde die zugehörige Klassenbibliothek in Zusammenarbeit mit Sun unter dem Namen OpenStep standardisiert. Die Entwicklergemeinde blieb jedoch weiterhin klein, da OpenStep immer noch sehr teuer war: Ca. 4480 Euro kostete die Entwicklerversion 1997. NeXT hatte sich inzwischen darauf eingerichtet ein Nischenprodukt für Großkunden zu vertreiben und mit WebObjects, einer auf Objective-C aufsetzenden Entwicklungsumgebung für Webanwendungen, ein interessantes Programm im Angebot.

1997 wurde NeXT Computer, Inc. von Apple Computer, Inc. übernommen (oder umgekehrt, wie manche meinen), um die Grundlage für Apples neues Mac OS X und der Nachfolger von MacApp zu werden. Das Erscheinungsbild wurde aufgefrischt, Rückwärtkompatiblität mit dem alten Macintosh ergänzt sowie die Möglichkeit statt Objective-C auch Java und C++ zur Entwicklung anzubieten.

1989: OSF/Motif 1.0


Den meisten Leuten dürfte OSF/Motif nichts sagen. Dieses GUI war für einige Jahre der Standard für GUIs auf UNIX Rechnern von Firmen wie DEC, IBM, HP, SGI, Sun, usw., die hauptsächlich in der Industrie und in der Forschung zum Einsatz kamen.

Die GUI Library OSF/Motif erschien 1989 und baute auf dem seit 1986 kommerziell vertriebenen X11 Window System auf. X11 hat OSF/Motif überlebt und ist heute die Grundlage für die graphischen Oberfläche von Linux basierten Betriebssystemen.

OSF/Motif nun wurde von einem Komitee entworfen. Das sagt eigentlich schon alles.

Während der Entwicklung war es wichtiger überhaupt etwas zu haben, als sich um ein gutes API Gedanken zu machen. Und so entschloß man sich auf die schon bei X11 vorhandene X Intrinsics Bibliothek aufzubauen, eine C Bibliothek mit objektorientierten Ansätzen. Heute greift man für so etwas zu C++, aber C++ war damals leider noch nicht so weit und die Programmiersprache C erweitern wollte man auch nicht.

Wer mit OSF/Motif arbeiten wollte, mußte nicht nur OSF/Motif beherrschen, sondern auch die X Intrinsics und wenn es an Dinge wie Farben ging, auch noch gleich X11. Das sind bei mir im Regal 18cm Dokumentation zu ca. 160 Euro.

Viele mit OSF/Motif geschriebene Programme sehen ausgesprochen häßlich aus und sie verdanken es der Tatsache, daß man froh sein konnte, wenn man überhaupt irgendetwas irgendwie auf die Beine stellen konnte.

Das mit Windows 2.03 verwandte Erscheinungsbild von Motif rührt übrigens daher, daß Microsoft mit in diesem Komitee war, die bis 1987 selber ein UNIX names Xenix verkauft haben und dieses dann an SCO verkauften.

Die Entstehung von X11:

Im Gegensatz dazu ist die Lebensdauer von OSF/Motif recht bescheiden:

1990: Windows 3.0


Im Mai 1990 erschien Microsoft Windows 3.0 und setzte sich als Standard GUI für den PC durch. Die Bedienelemente waren jetzt schattiert um einen 3D Effekt zu erreichen und die

In einigen Details ist Windows sehr von der Apple Macintosh Toolbox beeinflußt worden, wie z.B. die Ressourcen oder die BeginUpdate und EndUpdate Paare beim Neuzeichnen des Fensterinhalts.

Wie schon bei Digital Research mit GEM, kam es auch hier zu einer gerichtlichen Auseinandersetzung mit Apple, die sich auf alle Windows Versionen erstreckte und erst 1992 abgeschlossen wurde.

Die Ressourcen von Microsoft waren weiterhin zu sehr an das OS/2 Projekt mit IBM gebunden, so daß einige Zeit keine günstige Entwicklungsumgebung für Windows zur Verfügung stand: Zum Debuggen benötigte der Microsoft C Compiler zum Beispiel ein externes Terminal und er war zudem verhältnismäßig langsam und normalen PCs.

Objekt-orientierte Bibliotheken kamen erst 1991 ("Object Windows Library" von Borland) und 1992 (Microsoft Foundation Classes) hinzu.

Technisch betrachtet zum NeXT Cube ein Rückschritt, aber erschwinglicher. Heute, im Jahr 2007, ist Microsoft immer noch dabei Apple hinterher zu rennen. Zugegeben, auf der PC Plattform haben sie auch eine Menge Probleme, die Apple nicht hat.