Windows 8: WinRT – Die Windows Runtime

30. November 2011

autorImgDiv”>Matthias Jauernig

Matthias Jauernig, Senior eXpert

Zur BUILD-Konferenz im September 2011 stellte Microsoft vor allem auch vor, was Windows 8 für Entwickler bedeutet. Im Fokus lag dabei die Entwicklung von (touch-fähigen) Metro-Apps, die sich in ihrem Verhalten und Aussehen durch das Metro-Design an Apps für Windows Phone anlehnen.

Dieser Artikel beschreibt das (vorläufige) Programmiermodell von Windows 8 und die Windows Runtime als wesentliche Komponente in diesem Zusammenhang.

Ein Bild und tausend Worte

Ein Bild, das auf der BUILD von Anfang an für Verwirrung sorgte, war das folgende Architektur-Schaubild, das bereits in der Keynote aufgelegt wurde.

Win8_Architecture_Overview

Wie viele Diagramme abstrahiert das Bild zu sehr von der eigentlichen Realität, .NET ist nur als kleines Kästchen mit Silverlight in der rechten unteren Ecke zu sehen. Doch ist dem wirklich so?

Zwei Welten

Ein Sachverhalt wird aus dem Architektur-Schaubild deutlich: das Programmiermodell von Windows 8 bezieht 2 Welten mit ein. Zum einen ist da die Welt der klassischen Desktop-Applikationen (Desktop Apps). Diese werden wie bisher auf Basis von .NET bzw. der Win32-API umgesetzt. Zudem sind hier weiterhin RIA-Anwendungen auf Basis von Silverlight lauffähig. In dieser klassischen Welt bleibt also alles beim Alten und für den, der klassische Applikationen schreibt, gibt es keine Neuerungen im grundlegenden Modell.

Auf der anderen Seite ist da die Welt der neuen Metro-Apps (Metro style Apps), die für Touch optimiert (trotzdem noch per Maus bedienbar) auf der neuen Metro UI im Vollbild laufen. Eine wesentliche Neuerung ist hierbei die Windows Runtime (WinRT).

WinRT – nur eine Bibliothek?

Prinzipiell ist die Windows Runtime eine objektorientierte Ablösung der Win32 API und damit mehr als eine bloße Klassenbibliothek. WinRT wurde auf Basis einer weiterentwickelten Version von COM in C++ implementiert, ist in den Windows-Kern verwoben und stellt eine Schnittstelle zur Nutzung von Windows-Funktionalität aus Programmen heraus zur Verfügung. Die WinRT APIs sind damit klassische Betriebssystem-APIs. Sie sind grundsätzlich nicht an die Metro UI gebunden, stellen aber eine Voraussetzung für die Entwicklung von Metro-Apps dar. WinRT läuft dabei als native Runtime im Gegensatz z.B. zu .NET, das sich als managed Code Layer auf einer höheren Ebene befindet.

Metro-Apps auf Basis der Windows Runtime können in verschiedenen Sprachen entwickelt werden, wie auch das obige Architektur-Schaubild zeigt. Neben XAML/C# (Managed Code) und XAML/C++ (nativ) sowie DirectX/C++ handelt es sich dabei aktuell um HTML/JavaScript. WinRT stellt dabei die gemeinsame Basis dar. WinRT APIs können aus allen unterstützten Sprachen heraus direkt angesprochen und verwendet werden, Konzepte wie P/Invoke für den Aufruf von Win32-APIs entfallen. Generell gilt, dass das WinRT zugrundeliegende erneuerte COM viele Anleihen an .NET genommen hat. Dadurch sind Konzepte wie Delegates, Events, Collections, Generics etc. auch in WinRT verfügbar. Somit können die WinRT-Datentypen und -Konzepte über einen schlanken Wrapper (Language Projection) auf die jeweilige Sprache gemappt werden, ohne großen Overhead zu erzeugen.

Das folgende Schaubild beschreibt die Laufzeit-Architektur der Windows Runtime und enthält neben der angesprochenen Language Projection auch die großen API-Blöcke von WinRT:

Win8_WinRT_Architecture

Weiterhin ist erwähnenswert, dass WinRT-Komponenten zu einem hohen Grad asynchron sind. Alle Methoden, die potentiell länger als 50ms dauern, lassen sich nur asynchron aufrufen. Somit wird der Weg hin zu mehr Asynchronität fortgesetzt, der von Microsoft vor allem mit der Einführung von Silverlight eingeschlagen wurde. Das erfordert natürlich ein gewisses Umdenken von Entwicklern, die eher synchrone Aufrufe gewöhnt sind. Andererseits machen es neue Konzepte in den unterstützten Sprachen wie z.B. async/await in C# 5.0 recht einfach, mit der erhöhten Asynchronität umzugehen.

Ausblick

Alles neu macht Windows 8 – zumindest wenn es um die Entwicklung von Metro-Apps geht. WinRT löst endlich die uralte Win32-API ab, das Programmiermodell hat das Potential, ein riesiges Ökosystem an Apps aufzubauen. Und im Gegensatz zu vielen Behauptungen kommt Microsoft hier keineswegs zu spät, sondern ist sogar Vorreiter, wenn man die Vereinigung von Desktop- und Tablet-Betriebssystem sowie die Entwicklung von Metro-Apps mit HTML5/JavaScript betrachtet.

Der nächste Artikel wird weiter auf WinRT eingehen, indem er die Auswirkungen auf das bisherige Entwickler-Ökosystem zeigt und zu klären versucht, welche Zukunft .NET und Silverlight beschert ist Zwinkerndes Smiley