{"id":4383,"date":"2016-08-21T15:36:05","date_gmt":"2016-08-21T14:36:05","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=4383"},"modified":"2016-08-21T15:36:05","modified_gmt":"2016-08-21T14:36:05","slug":"microsoft-und-windows-im-wandel-was-ist-asp-net-core","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/microsoft-und-windows-im-wandel-was-ist-asp-net-core\/","title":{"rendered":"Microsoft und Windows im Wandel: Was ist (ASP).NET Core?"},"content":{"rendered":"<p>ASP.NET d\u00fcrfte auch vielen\u00a0Entwicklern au\u00dferhalb von Windows ein Begriff sein: Schlie\u00dflich 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\u00fcrfte darin liegen, dass ASP.NET offiziell nur auf Servern mit Windows l\u00e4uft &#8211; und die schlagen mit hohen Lizenzkosten zu Buche. Insbesondere in Kombination mit der hauseigenen Datenbank MSSQL, die zus\u00e4tzlich lizenziert werden muss. PHP weist dagegen ein paar Nachteile auf, ist jedoch kostenfrei.<\/p>\n<h4><strong>Microsoft \u00f6ffnet sich immer weiter<\/strong><\/h4>\n<p>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\u00fcber anderen Plattformen und Betriebssystemen \u00f6ffnet &#8211; 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.<\/p>\n<p>Doch nun kommt der Wandel: Die Linux-Bash wird auf Windows portiert, die PowerShell l\u00e4uft seit neuestens auch unter Linux, und sogar der seit bald Jahrzehnten unter Verschluss gehaltene Quellcode des .NET Framework wird gro\u00dfteils 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 &#8211; je nachdem, was f\u00fcr einen bestimmten Zweck besser funktioniert.<\/p>\n<p>Auch die Softwareentwicklung hat sich ver\u00e4ndert: 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\u00dfen seitens Microsoft vor diesen Entwicklungen\u00a0w\u00fcrde Microsoft Gefahr laufen, hier langfristig den Anschluss zu verlieren. Denn warum sollte man \u00fcberhaupt noch viel Geld f\u00fcr Windows nutzen, wenn andere Plattformen kostenfrei sind und die besseren Funktionen bieten?<\/p>\n<h4><strong>.NET wird endlich plattformunabh\u00e4ngig<\/strong><\/h4>\n<p>Bei dieser Wandlung ist nun auch das .NET Framework dran. Es ist m\u00e4chtig 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\u00e4t gew\u00e4hrleistet und der Entwickler muss Abstriche machen &#8211; beispielsweise hinkt Mono den .NET Releases hinterher und unterst\u00fctzt nicht alle Funktionen.<\/p>\n<p>Microsoft will (noch) nicht das vollst\u00e4ndige .NET Framework portieren, und hat daher f\u00fcr diesen Zweck .NET Core erschaffen. Hierbei handelt es sich um eine etwas abgespeckte Version des vollst\u00e4ndigen .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.<\/p>\n<h4><strong>Wieso auf einmal Version 1.0?<\/strong><\/h4>\n<p>Obwohl .NET Core noch recht jung ist, wurde es schon mehrfach umbenannt: Ganz am Anfang stellte Microsoft es als <em>ASP.NET<\/em>\u00a0vNext vor. Sp\u00e4ter wurde daraus\u00a0<em>.NET Core 5<\/em>. Eine klare Abgrenzung zum vollwertigen .NET Framework gab es nur noch \u00fcber die Versionsnummer &#8211; Bei allen Versionen bis 4.6 handelt es sich um das vollwertige Framework, ab V5 um Core. Sp\u00e4testens wenn das vollwertige Framework irgendwann von 4.6 zu 5.0 wandern w\u00fcrde, ist die Verwirrung vollendet.<\/p>\n<p>Um dies zu verhindern, hat sich Microsoft Anfang 2016 f\u00fcr eine sinnvollere\u00a0L\u00f6sung entschieden: .NET Core beginnt bei Versionsnummer 1.0 und nicht 5. Dies betrifft auch alle Komponenten, die in beiden Frameworks stecken \u00a0&#8211; etwa dem Entity Framework f\u00fcr ASP.NET. Statt in 7 wurde die Version ebenfalls in 1.0 ge\u00e4ndert. Hier gab es das gleiche Problem, da Entity Framework bis Version 6 nur im vollwertigen .NET Framework genutzt werden konnte.\u00a0Aktuell sind wir bei Version 1.0.1, was .NET Core angeht.<\/p>\n<p>Wir m\u00fcssen also zuk\u00fcnftig zwischen .NET und .NET Core unterscheiden, denn .NET Code ist nicht automatisch zu .NET Core kompatibel. In unseren Artikeln\u00a0wird daher fortan die Bezeichnung .NET f\u00fcr das vollwertige klassische Framework genutzt, wogegen .NET Core das neue Core-Framework kennzeichnet.<\/p>\n<h4><strong>Wie genau kann man sich\u00a0.NET Core vorstellen?\u00a0<\/strong><\/h4>\n<p>Im Prinzip \u00e4hnlich wie andere plattformunabh\u00e4ngige Frameworks, beispielsweise Java: Es gibt ein auf den Namen <em>dotnet<\/em> getauftes\u00a0Kommandozeilenwerkzeug f\u00fcr alle g\u00e4ngigen Betriebssysteme (Windows, Linux und OS X). Damit l\u00e4sst sich C# Code kompilieren und ausf\u00fchren. Der Entwickler ist somit auch nicht mehr an Windows oder Visual Studio gebunden, wobei diese Kombination nat\u00fcrlich weiterhin durchaus Sinn macht. Prinzipiell kann er aber wie in Java auch mit Notepad seinen Code schreiben, und diesen \u00fcber die Kommandozeile ausf\u00fchren.<\/p>\n<p>Interessant f\u00fcr den Web-Bereich ist die Tatsache, dass dies nicht nur Desktop-Anwendungen Betrifft &#8211; Denn zusammen mit .NET Core wird auch ASP.NET Core entwickelt. Dies ist ein vollwertiger Stack f\u00fcr die serverseitige Ebene, mit dem sich dynamische Webseiten generieren lassen. Er \u00e4hnelt 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\u00fcr Datenbankzugriffe. Damit sagt Microsoft PHP den Kampf an.<\/p>\n<p>Aus technischer Sicht haben .NET und .NET Core eine gemeinsame Basis, die von beiden Frameworks genutzt wird. Neben dem Compiler geh\u00f6rt dazu beispielsweise der Garbage-Collector. Und auch Teile der Framework-Komponenten stehen in beiden Produkten zur Verf\u00fcgung &#8211; etwa generische Listen oder Klassen wie DateTime. Dieser Code kann zuk\u00fcnftig auf allen Betriebssystemen und auch leistungsschwachen PCs wie dem Raspberry laufen. Das vollst\u00e4ndige .NET Framework wird auf diesem Kern aufbauen, und zus\u00e4tzliche Funktionen bereitstellen. Um diese zu Nutzen, wird wie bisher auch ein Windows-System ben\u00f6tigt.<\/p>\n<h4><strong>Wird der IIS auch portiert?<\/strong><\/h4>\n<p>Diese Frage stellt sich im Hinblick auf ASP.NET Core nat\u00fcrlich &#8211; Schlie\u00dflich m\u00fcssen diese Anwendungen mit einem Webserver bereitgestellt werden. Aktuell gibt es daf\u00fcr jedoch keine Pl\u00e4ne.\u00a0In Anbetracht der engen Verzahnung des IIS mit Windows ist dies auch verst\u00e4ndlich, soll das neue ASP.NET Core doch m\u00f6glichst schlank gehalten werden. Was liegt also n\u00e4her, als einen schlanken Webserver zu entwickeln? Das dachte sich Microsoft ebenfalls, so entstand der\u00a0Kestrel HTTP-Server.<\/p>\n<p>Im Vergleich mit dem m\u00e4chtigen IIS handelt es sich bei Kestrel um einen wirklich sehr minimalistischen Webserver.\u00a0Er bietet kaum Konfigurationsm\u00f6glichkeiten und ist im Prinzip nur daf\u00fcr vorgesehen, dynamische ASP.NET Core Webseiten auszuliefern. Aus diesem Grund empfiehlt Microsoft auch, Kestrel nicht eigenst\u00e4ndig zu betreiben. Stattdessen sollte ein vollwertiger Webserver wie nginx oder alternativ Apache als Reverse Proxy genutzt werden,\u00a0um umfangreiche Konfigurationsm\u00f6glichkeiten zu erhalten. Dieser Webserver leitet die Anfragen dann an Kestrel weiter und kann beispielsweise die Ladezeiten durch Caching beschleunigen.<\/p>\n<h4><\/h4>\n<h4><strong>Fazit: Positive Entwicklung<\/strong><\/h4>\n<p>Microsoft wurde und wird viel kritisiert, vor allem f\u00fcr die Verletzung der Nutzer-Privatsph\u00e4re in Windows 10 &#8211; zugegeben zu Recht.\u00a0Hinsichtlich anderen Plattformen hat Microsoft jedoch die Zeichen der Zeit erkannt, und \u00f6ffnet sich gegen\u00fcber diesen, anstatt wie bisher auf das eigene \u00d6kosystem zu pochen. Da .NET Core seit kurzem die Beta- bzw RC-Phase verlassen hat und als finale Version 1.0 zur Verf\u00fcgung steht, lohnt es sich diesen neuen Stack f\u00fcr den produktiven Einsatz n\u00e4her zu betrachten. Langfristig hat .NET Core damit das Potenzial, zu einer ernsten PHP-Konkurrenz zu werden &#8211; Was die Kosten und plattformunabh\u00e4ngigkeit angeht, befinden sich beide nun auf Augenh\u00f6he.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ASP.NET d\u00fcrfte auch vielen\u00a0Entwicklern au\u00dferhalb von Windows ein Begriff sein: Schlie\u00dflich 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\u00fcrfte darin liegen, dass ASP.NET offiziell nur auf Servern mit Windows l\u00e4uft &#8211; und die schlagen mit hohen Lizenzkosten &#8230;<\/p>\n","protected":false},"author":5,"featured_media":4432,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[336,522],"class_list":["post-4383","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-softwareentwicklung","tag-asp-net","tag-asp-net-core"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=4383"}],"version-history":[{"count":52,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4383\/revisions"}],"predecessor-version":[{"id":4436,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4383\/revisions\/4436"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/4432"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=4383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=4383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=4383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}