Microsoft und Windows im Wandel: Was ist (ASP).NET Core?

Microsoft und Windows im Wandel: Was ist (ASP).NET Core?

ASP.NET dürfte auch vielen Entwicklern außerhalb von Windows ein Begriff sein: Schließlich ist der Microsoft-Stack bei den serverseitigen Technologien im Web aktuell auf Platz 2 nach PHP. Dennoch liegt PHP mit recht weitem Abstand vorne. Der Hauptgrund dürfte darin liegen, dass ASP.NET offiziell nur auf Servern mit Windows läuft – und die schlagen mit hohen Lizenzkosten zu Buche. Insbesondere in Kombination mit der hauseigenen Datenbank MSSQL, die zusätzlich lizenziert werden muss. PHP weist dagegen ein paar Nachteile auf, ist jedoch kostenfrei.

Microsoft öffnet sich immer weiter

Geht es nach Microsoft, soll damit bald Schluss sein. Seit kurzem ist ja auch aus anderen Bereichen bekannt, dass sich der Software-Konzern immer mehr gegenüber anderen Plattformen und Betriebssystemen öffnet – ein Szenario, das bis vor wenigen Jahren noch undenkbar war. Damals hat sich Microsoft teils sogar aktiv dagegen gewehrt, dass ihre Technologie von Dritten auf andere Plattformen portiert wird. Frei nach dem Motto: Entweder mit uns, oder gar nicht.

Doch nun kommt der Wandel: Die Linux-Bash wird auf Windows portiert, die PowerShell läuft seit neuestens auch unter Linux, und sogar der seit bald Jahrzehnten unter Verschluss gehaltene Quellcode des .NET Framework wird großteils Open Source. Und diese Entscheidung scheint klug, wenn man sich den technischen Wandel der letzten Jahre anschaut: Dank Virtualisierung gibt es kaum noch rein heterogene Umgebungen, da man auf der gleichen Maschine problemlos Windows und Linux betreiben kann – je nachdem, was für einen bestimmten Zweck besser funktioniert.

Auch die Softwareentwicklung hat sich verändert: Container wie Docker erleichtern die Entwicklung und vor allem den Deployment-Prozess. Nicht mehr der Nutzer sondern der Entwickler kann die Umgebung inklusive Betriebssystem bestimmen, und seine Software dementsprechend optimieren. Das reduziert Fehler und Support. Durch das Verschließen seitens Microsoft vor diesen Entwicklungen würde Microsoft Gefahr laufen, hier langfristig den Anschluss zu verlieren. Denn warum sollte man überhaupt noch viel Geld für Windows nutzen, wenn andere Plattformen kostenfrei sind und die besseren Funktionen bieten?

.NET wird endlich plattformunabhängig

Bei dieser Wandlung ist nun auch das .NET Framework dran. Es ist mächtig und sehr gut strukturiert, lief aber offiziell bisher nur auf Windows. Sicher versuchen Projekte wie Mono, es auf Windows zu portieren. Hier ist aber keine 100%tige Kompatibilität gewährleistet und der Entwickler muss Abstriche machen – beispielsweise hinkt Mono den .NET Releases hinterher und unterstützt nicht alle Funktionen.

Microsoft will (noch) nicht das vollständige .NET Framework portieren, und hat daher für diesen Zweck .NET Core erschaffen. Hierbei handelt es sich um eine etwas abgespeckte Version des vollständigen .NET Frameworks, in dem nicht alle Komponenten und Funktionen enthalten sind. Dadurch soll das Framework noch schlanker werden, und auch auf Einplatinencomputern mit begrenzten Ressourcen problemlos nutzen lassen. Das bekannteste Beispiel ist wohl der Raspberry Pi.

Wieso auf einmal Version 1.0?

Obwohl .NET Core noch recht jung ist, wurde es schon mehrfach umbenannt: Ganz am Anfang stellte Microsoft es als ASP.NET vNext vor. Später wurde daraus .NET Core 5. Eine klare Abgrenzung zum vollwertigen .NET Framework gab es nur noch über die Versionsnummer – Bei allen Versionen bis 4.6 handelt es sich um das vollwertige Framework, ab V5 um Core. Spätestens wenn das vollwertige Framework irgendwann von 4.6 zu 5.0 wandern würde, ist die Verwirrung vollendet.

Um dies zu verhindern, hat sich Microsoft Anfang 2016 für eine sinnvollere Lösung entschieden: .NET Core beginnt bei Versionsnummer 1.0 und nicht 5. Dies betrifft auch alle Komponenten, die in beiden Frameworks stecken  – etwa dem Entity Framework für ASP.NET. Statt in 7 wurde die Version ebenfalls in 1.0 geändert. Hier gab es das gleiche Problem, da Entity Framework bis Version 6 nur im vollwertigen .NET Framework genutzt werden konnte. Aktuell sind wir bei Version 1.0.1, was .NET Core angeht.

Wir müssen also zukünftig zwischen .NET und .NET Core unterscheiden, denn .NET Code ist nicht automatisch zu .NET Core kompatibel. In unseren Artikeln wird daher fortan die Bezeichnung .NET für das vollwertige klassische Framework genutzt, wogegen .NET Core das neue Core-Framework kennzeichnet.

Wie genau kann man sich .NET Core vorstellen? 

Im Prinzip ähnlich wie andere plattformunabhängige Frameworks, beispielsweise Java: Es gibt ein auf den Namen dotnet getauftes Kommandozeilenwerkzeug für alle gängigen Betriebssysteme (Windows, Linux und OS X). Damit lässt sich C# Code kompilieren und ausführen. Der Entwickler ist somit auch nicht mehr an Windows oder Visual Studio gebunden, wobei diese Kombination natürlich weiterhin durchaus Sinn macht. Prinzipiell kann er aber wie in Java auch mit Notepad seinen Code schreiben, und diesen über die Kommandozeile ausführen.

Interessant für den Web-Bereich ist die Tatsache, dass dies nicht nur Desktop-Anwendungen Betrifft – Denn zusammen mit .NET Core wird auch ASP.NET Core entwickelt. Dies ist ein vollwertiger Stack für die serverseitige Ebene, mit dem sich dynamische Webseiten generieren lassen. Er ähnelt stark dem vom vollwertigen .NET Framework bekannten ASP.NET MVC-Stack und beinhaltet bereits jetzt einige Features daraus wie etwa das Entity Framework als vollwertiges ORM für Datenbankzugriffe. Damit sagt Microsoft PHP den Kampf an.

Aus technischer Sicht haben .NET und .NET Core eine gemeinsame Basis, die von beiden Frameworks genutzt wird. Neben dem Compiler gehört dazu beispielsweise der Garbage-Collector. Und auch Teile der Framework-Komponenten stehen in beiden Produkten zur Verfügung – etwa generische Listen oder Klassen wie DateTime. Dieser Code kann zukünftig auf allen Betriebssystemen und auch leistungsschwachen PCs wie dem Raspberry laufen. Das vollständige .NET Framework wird auf diesem Kern aufbauen, und zusätzliche Funktionen bereitstellen. Um diese zu Nutzen, wird wie bisher auch ein Windows-System benötigt.

Wird der IIS auch portiert?

Diese Frage stellt sich im Hinblick auf ASP.NET Core natürlich – Schließlich müssen diese Anwendungen mit einem Webserver bereitgestellt werden. Aktuell gibt es dafür jedoch keine Pläne. In Anbetracht der engen Verzahnung des IIS mit Windows ist dies auch verständlich, soll das neue ASP.NET Core doch möglichst schlank gehalten werden. Was liegt also näher, als einen schlanken Webserver zu entwickeln? Das dachte sich Microsoft ebenfalls, so entstand der Kestrel HTTP-Server.

Im Vergleich mit dem mächtigen IIS handelt es sich bei Kestrel um einen wirklich sehr minimalistischen Webserver. Er bietet kaum Konfigurationsmöglichkeiten und ist im Prinzip nur dafür vorgesehen, dynamische ASP.NET Core Webseiten auszuliefern. Aus diesem Grund empfiehlt Microsoft auch, Kestrel nicht eigenständig zu betreiben. Stattdessen sollte ein vollwertiger Webserver wie nginx oder alternativ Apache als Reverse Proxy genutzt werden, um umfangreiche Konfigurationsmöglichkeiten zu erhalten. Dieser Webserver leitet die Anfragen dann an Kestrel weiter und kann beispielsweise die Ladezeiten durch Caching beschleunigen.

Fazit: Positive Entwicklung

Microsoft wurde und wird viel kritisiert, vor allem für die Verletzung der Nutzer-Privatsphäre in Windows 10 – zugegeben zu Recht. Hinsichtlich anderen Plattformen hat Microsoft jedoch die Zeichen der Zeit erkannt, und öffnet sich gegenüber diesen, anstatt wie bisher auf das eigene Ökosystem zu pochen. Da .NET Core seit kurzem die Beta- bzw RC-Phase verlassen hat und als finale Version 1.0 zur Verfügung steht, lohnt es sich diesen neuen Stack für den produktiven Einsatz näher zu betrachten. Langfristig hat .NET Core damit das Potenzial, zu einer ernsten PHP-Konkurrenz zu werden – Was die Kosten und plattformunabhängigkeit angeht, befinden sich beide nun auf Augenhöhe.

Leave a Reply