.Net-Framework


.NET (gesprochen: "dot-net") ist eine Entwicklungsplattform des Softwareherstellers Microsoft, die als Gegenpol zu Sun Microsystems Java eingeführt wurde, und neben einer virtuellen Laufzeitumgebung aus einem Rahmenwerk (Framework) von Klassenbibliotheken (API) und Diensten besteht, die als Basis für Eigenentwicklungen dienen.


Entstehung

Historisch gesehen ist die Motivation für diese Initiative am besten verständlich. Durch die immer weitere Verbreitung der plattformübergreifenden Java-Technologie zu Beginn des 21. Jahrhunderts sah Microsoft seine Dominanz im Bereich der PC-Kerntechnologien in Gefahr. Microsoft überhnahm die von Sun entwickelte Java-Technologie für sich und erweiterte sie nach seinen Bedürfnissen, worunter die Plattformunabhängigkeit litt. Als Sun dies unter anderem durch Gerichtsverfügung unterband, wechselte Microsoft die Strategie. Um eine vollständige Unabhängigkeit von anderen zu erreichen wurde die .NET Plattform von Grund auf neu entwickelt.

Konzept

Anders als bei Java, kann .NET verschiedene, von der Laufzeitumgebung unterstützte Programmiersprachen ausführen. Hierzu existiert die so genannte Common Language Specification (CLS). Diese Spezifikation definiert einen vereinheitlichten Binärcode, der von der virtuellen Laufzeitumgebung (VM) interpretiert und ausgeführt werden kann. Somit ist es möglich, .NET mit verschiedenen, an die CLR angepassten Sprachen zu programmieren. Beispielsweise sind das, neben der von Microsoft für .NET favorisierten Sprache C# (gesprochen: C sharp), die Sprachen C++, das propietäre VisualBasic und das propietäre VisualJ (einer Portierung von Microsofts Javaimplementation). Weitere Sprachen werden von Drittanbietern zur Verfügung gestellt (z. B. Delphi von Borland). Hierbei sei aber anzumerken, dass lediglich die Syntax zu Teilen adaptiert wurde, bestehende Programme (z. B. VisualJ- oder C++-Quelltexte) aber ohne vorherige Anpassungen nicht kompiliert und ausgeführt werden können.

Nachdem ein Programm kompiliert wurde, liegt es gemäß der CLS in einer sprachneutralen Binärform vor. Hiermit wird gewährleistet, dass verschiedene unterstützte .NET-Programmiersprachen auf in anderen Sprachen geschriebenen Code zugreifen können. Dieser wiederverwendbare Code wird in so genannten Assemblies zusammengefasst und bereitgestellt (vgl. mit Packages/Paketen in Java oder hierarchischen APIs in C und C++).

Neben dem sprach- und plattformneutralen Binärcode stellt .NET noch eine weitere Form von Code bereit, den so genannten "unmanaged code". Dieser Code liegt in seiner kompilierten Form in einer maschinennahen Form vor und verwaltet die vom Betriebssystem bereitgestellten Ressourcen eigenverantwortlich.

Dies führt bei einer Sprache, die Sprach- und Plattformunabhängigkeit anstrebt, natürlich dazu, dass ein Programm, das "unmanaged code" verwendet, auf verschiedenen Plattformen kein vorhersagbares Laufzeitverhalten garantiert. Ein weiterer Nachteil von "unmanaged code" ist, dass ungewollte Instabilitäten oder Sicherheitslecks innerhalb des Systems entstehen können.

Die angestrebte Plattformunabhängigkeit ist unter .NET leider bisher kaum gegeben, da der Hersteller Microsoft die .NET Plattform nur für seine eigene Produktlinie Windows anbietet. Eine Laufzeitumgebung (CLR, VM) für das Betriebssystem Linux (und deren Derivate) steht aber, dank CLS, in Form des Open Source-Projektes Mono zur Verfügung, das vom Hersteller Ximian initiiert wurde. Da sich dieses Projekt aber noch in der Entwicklung befindet (Stand: September 2003) und nicht alle Komponenten von .NET zur Verfügung stehen, ist mit einer hohen Verbreitung auf Windows-fremden Systemen nicht zu rechnen. Neben der fehlenden Betriebssystem-Unterstützung von Windows-fremden Systemen seitens Microsoft, fehlender (freier) Entwicklungsumgebungen sowie lizenzrechtlicher Probleme kann man Plattformunabhängigkeit in der Praxis deshalb nicht attestieren. Unter dem Aspekt der plattformübergreifenden Verfügbarkeit dominieren hier auch weiterhin Sprachen wie Java, Perl und PHP - sowie maschinennahe Sprachen wie C und C++.

Laufzeitumgebung

"Managed code" wird im Vergleich zu "unmanaged code" von einer Laufzeitumgebung (runtime environment) verwaltet - der Common Language Runtime (CLR). Diese virtuelle Maschine (VM) übernmimmt die Anforderung und Freigabe von Ressourcen (Garbage Collection) und stellt sicher, dass geschützte Speicherbereiche nicht direkt angesprochen oder überschrieben werden können. Auch Zugriffe auf Dienste, Dateisystem-Funktionen oder Geräte werden kontrolliert und können, sofern sie gegen Sicherheitsrichtlinien verstoßen, von der CLR abgelehnt werden (Sandbox-Prinzip).

Die automatische Ressourcenverwaltung und die erhöhte Sicherheit hat dabei auch ihren Preis - die Ausführung von "managed code" benötigt geringfügig mehr Zeit und hat einen erhöhten Bedarf an Ressourcen.

Ein Grund hierfür ist die "garbage collection" (engl. für Müllsammlung bzw. Müllabfuhr), die automatische Freigabe nicht mehr benötigter Ressourcen und Referenzen. Zu beachten ist hierbei, dass nicht mehr benötigte Ressourcen nicht direkt freigegeben werden, sondern der Garbage Collector der CLR entscheidet über den Zeitpunkt.

Daher werden auch weiterhin systemnahe Programmiersprachen benötigt (C, Assembler), wenn laufzeitkritische Programme benötigt werden (Animation, Simulation, Bildverarbeitung, direkte Zugriffe auf Dateisysteme und Geräte, Treiberprogrammierung, 3D-Spieleprogrammierung, KI-Anwendungen, sicherheitsrelevante Anwendungen wie Anlagensteuerungen, usw.). Dies hat das VM-basierte .NET auch mit Sprachen wie Java gemeinsam.


Klassenbibliothek

Die Bliothek umfasst einige Tausend Klassen, die in so genannte Namespaces unterteilt sind. Die Klassen erfüllen Aufgaben wie z. B. das Formatieren eines Strings, das Verschicken von Mails, aber auch das Generieren von Code. Die Unterteilung in Namespaces dient dazu, die große Menge an Information übersichtlicher zu gestalten. Beispielsweise befinden sich Klassen zum Generieren von Code in dem Namespace System.Reflection.Emit.

Die Dokumentation der Klassen liefert der Hersteller in seinem Software Development Kit (SDK) mit (siehe unten).

Verfügbarkeit

Der Hersteller Microsoft bietet .NET in verschiedenen Formen an. Als reine Laufzeitumgebung samt benötigter Klassenbibliotheken (Framework), als kostenloses SDK für Entwickler, als kostenpflichtige integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) in Form des Microsoft Visual Studio .NET. Seit "Windows 2003 .NET" bietet Microsoft darüber hinaus Server-Betriebssysteme an, die eine bereits integrierte .NET Laufzeitumgebung bereitstellen. Bei Vorversionen muss die Laufzeitumgebung manuell installiert werden, sofern sie zu einer unterstützten Windows-Variante gehört. Unter Windows 3.1 und Windows 95 ist .NET nicht lauffähig. Auf Nicht-Windows-Systemen wird .NET von Microsoft offiziell nicht unterstützt - ist also nur in der Theorie plattformunabhängig. Allerdings existieren die bereits erwähnten Open Source Projekte, die .NET auch für andere Plattformen (z.B. Linux) eingeschränkt verfügbar machen.

Für Handhelds und Mobiltelefone, die unter Windows CE bzw. Windows Mobile 2003 laufen, existiert eine abgespeckte Version der .NET Laufzeitumgebung in Form des Compact Frameworks. Da sich aber nur unter Verwendung des kostenpflichtigen Visual Studio .NET 2003 oder neuer für diese Plattform entwickeln lässt, ist die Verbreitung auf Kleingeräten aber gering im Vergleich zu Technologien wie der Java 2 Micro Editon (J2ME).