.Net-Framework
.NET (gesprochen dott-nett) ist ein Satz von Softwaretechnologien des Softwareherstellers Microsoft, der 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. Einfach gesprochen handelt es sich also um eine umfangreiche Programmierumgebung, die eine neue Generation von Programmen und damit auch der Programmierung einläuten soll. Praktisch keine der verwendeten Technologien ist völlig neu, aber in der Gesamtheit ist .NET (auch Kritiker können dies zumindest für die "Microsoft Welt" kaum leugnen) eine Innovation.
Entstehung
Historisch gesehen ist die Motivation für diese Initiative am ehesten verständlich. Durch die immer weitere Verbreitung der plattformunabhängigen Programmiersprache Java Ende der 1990er Jahre, sah Microsoft seine Dominanz im Bereich der PC-Kerntechnologien in Gefahr. Zudem war es Microsoft bis dahin nicht gelungen, im lukrativen Markt für mobile Kleingeräte Fuß zu fassen.
Microsoft übernahm die von Sun entwickelte Java-Technologie für sich und erweiterte sie nach den eigenen 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, sollte die .NET-Plattform von Grund auf neu entwickelt werden.
Da gleichzeitig anerkanntermassen die technologische Basis der Windows-Programmierung, nämlich die Objekttechnologien COM und DCOM ihre Grenzen erreicht hatten, addierte sich der vom Marketing getriebene Wunsch nach einer konkurrenzfähigen Technologie "gegen" Java und nicht zuletzt Linux mit technisch notwendiger (bis hin zu stellenweise "technikverliebter") Innovation zu einem gemeinsamen Projekt.
Eher untypisch für Microsoft wurden nämlich auch eine Reihe der prominentesten externen Fachleute, die sich in der Windows Welt einen Namen gemacht hatten, zu Microsoft geholt, was sich an vielen Stellen in der technischer Qualität und Innovation niederschlug und auch die Akzeptanz in der Entwicklergemeinde erhöhte. So wurde die neue .NET Sprache C# federführend von dem Turbo Pascal Erfinder Anders_Hejlsberg entwickelt. Die verschiedenen Teiltechnologien wurden in mehreren weitgehend unabhängigen Gruppen entwickelt, wodurch die Entwicklungsgeschwindigkeit wohl erhöht, die Durchgängigkeit des Konzepts an vielen Stellen aber verschlechtert oder verhindert wurde.
2000, Juni - Bill Gates stellte erstmals die .NET "Vision", zunächst unter dem Codenamen "Whistler
2000, Juli - Auf der Entwicklerkonferenz PDC gab es erstmals CDs mit lauffähigen Vorabversionen des Frameworks und von Visual Studio .NET
2000, Oktober - C# und die [CLI] (s.u.) wurden (von MS, HP und Intel) bei der Europäischen Standardisierungorganisation European Computer Manufacturers Association ECMA eingereicht, was für Microsoft einen ungewöhnlichen Schritt der Öffnung darstellte.
2002, Januar - .NET (V1.0) wurde offiziell mit der zugehörigen Entwicklungsumgebung SDK (und Visual Studio 2002) vorgestellt.
2001-2002 Verwirrung: Im Zuge des Marketings wurde nach Microsofts Gewohnheit versucht, alle anstehenden Neuentwicklungen unter einen, den .NET Begriff zu fassen, wodurch selbst Fachleute inkl. Microsoft Mitarbeitern nicht mehr verstanden, worum es eigentlich ging. Die Programmiertechnologie und Entwicklungsumgebung wurde erstens in Verbindung gestellt zu konkreten Webdiensten, die Microsoft anbot (Codename "Hailstorm" wurde zu ".Net My Services" und später vom Marketing wieder von .NET entkoppelt). Auch die nächste Betriebssystem Generation von "Windows wurde als Bestandteil von ".NET" angekündigt.
Interessant ist hier die Begriffs-Historie beim Server:
2000, Januar: Codename "Whistler Server"
2001, 30. April: Windows 2002 Server
2001, 19. Juni: Windows .NET Server
2002, 27. August: Windows .NET Server 2003
2003, 9. Januar: Windows Server 2003 (wieder ohne .NET)
--Philip Erdös 20:37, 26. Jul 2004 (CEST) (Kann man später auslagern, finde ich aber ganz nützlich für das Verständnis der Entwicklung des und Verwirrung um den Begriff. Wer das knapper formatieren kann, auch willkommen)
2003 Vorstellung von .NET 1.1 und Visual Studio 2003 mit im wesentlichen geringfügigen Verbesserungen und Erweiterungen.
2004 Obwohl technisch schon einige Jahre alt, steht der Marktanteil an .NET Programmen steht immer noch in keinem Verhältnis zur Aufmerksamkeit in Medien und Entwicklergemeinde. Insbesondere auch Microsoft selbst hat keine, in der Breite bekannten, komplett mit .NET programmierten Anwendungen veröffentlicht, was sicherlich auch Zeit und Aufwand demonstriert, die technische Umstellungen benötigen.
2004 Betaversionen von .NET V2.0 und Visual Studio 2005 erhältlich.
Ausblick:
Für 2005 ist die nächste Version, .NET V2.0 und Visual Studio 2005 angekündigt, die neben starken Erweiterungen der Klassenbibliothek einige Vereinfachungen des Programmiermodells mit sich bringen soll.
2006-2007 Nachfolgetechnologien als Bestandteil des Windows XP Nachfolgers mit Codenamen "Longhorn" sollen die Redundanzen in aktuellen .NET Teiltechnologien beseitigen, insbesondere die APIs zur Web- und Windows-Oberflächenprogrammierung vereinheitlichen und ein einheitliches Konzept für verteilte und insbesondere Serviceorientierte Architekturen bereitstellen und damit das weithehend unstrukturierte Nebenher von "Web Services", ".NET Enterprise Services" und ".NET Remoting Services" beseitigen.
Konzept
Die .NET-Plattform stellt mit der Common Language Infrastructure (CLI) eine Basis zur Ausführung von Programmen, die mit unterschiedlichen Programmiersprachen erstellt wurden, her. Dies wird durch die Framework Class Library (FCL) - eine gemeinsame Klassenbibliothek - und die Verwendung einer virtuellen Maschine erreicht.
Die Common Language Runtime (CLR) ist die virtuelle Maschine von .NET und stellt somit die Laufzeitumgebung für verschiedene an .NET angepasste Hochsprachen zur Verfügung. Die VM führt den standardisierten Bytecode der Microsoft Intermediate Language (MSIL), aus. Hierfür wurde ein sprachübergreifendes System von objektbasierten Datentypen definiert, so dass auch in unterschiedlichen Sprachen geschriebene Programmteile auf gemeinsame Ressourcen zugreifen können. Dies unterscheidet .NET von anderen auf Bytecode basierenden Laufzeitumgebungen (z.B. Java Virtual Machine), so genannten virtuellen Maschinen.
Die Common Language Specification (CLS) definiert einen vereinheitlichten Binärcode, der von der virtuellen Laufzeitumgebung (VM) in den Maschinencode der Zielmaschine übersetzt 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 eingeführten Sprache C#, die Sprachen C++, das proprietäre Visual Basic und das proprietäre J# (Aussprache: dschäi-scharp; eine Portierung von Microsofts Java-Implementierung).
Weitere Sprachen werden von Drittanbietern zur Verfügung gestellt (z.B. Delphi von Borland).
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++).
Plattformunabhängigkeit
Die angestrebte Plattformunabhängigkeit ist unter .NET 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. Daneben wird noch im Rahmen des dotGNU-Projekts an einer Portable.NET genannten Laufzeitumgebung gearbeitet.
Wegen der fehlenden Betriebssystem-Unterstützung von Windows-fremden Systemen seitens Microsoft, fehlender (freier) Entwicklungsumgebungen, fehlender Normierung der Klassenbibliothek 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 Java-Programme, Umsetzungen mit Sprachen wie Perl und PHP - sowie maschinennahe Produkte, die typischerweise mit Sprachen wie C und C++ erstellt werden.
Laufzeitumgebung
"Managed code" wird im Vergleich zu "unmanaged code" von einer Laufzeitumgebung (runtime environment) verwaltet - der Common Language Runtime (CLR). Diese virtuelle Maschine (VM) übernimmt die Anforderung und Freigabe von Speicher und anderen 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 verbesserte Sicherheit haben dabei auch ihren Preis - die Ausführung von "managed code" hat einen erhöhten Bedarf an Ressourcen und benötigt geringfügig mehr Zeit. Außerdem sind die Antwortzeiten auf Programm-Ereignisse wesentlich schwieriger zu kalkulieren und zum Teil deutlich größer, was die Anwendbarkeit für Echtzeitaufgaben stark einschränkt.
Ein Grund hierfür ist die "Garbage-Collection" (englisch für Müllsammlung bzw. Müllabfuhr), die automatische Freigabe nicht mehr benötigten Speichers und anderer Ressourcen. Zu beachten ist hierbei, dass die Freigabe nicht direkt erfolgt, sondern der Garbage-Collector der CLR über den Zeitpunkt entscheidet. Während dies einerseits, durch die Zusammenfassung der Freigabeoperationen, die Ausführungsdauer von Programmläufen verringern kann, können andererseits die Antwortzeiten auf Ereignisse dadurch in Mitleidenschaft gezogen werden. Durch die zeitverzögerte Freigabe entsteht auch ein erhöhter Ressourcenbedarf. Dies ist natürlich besonders für kleinere Maschinen nachteilig, und stellt deshalb, im Hinblick auf die Marktausrichtung zu mobilen Kleingeräten, ein Problem dar. Es gibt daher Überlegungen, das System in eine Richtung weiter zu entwickeln, die den Betrieb von .NET-Programmen auch ohne die Verwendung einer Garbage-Collection ermöglicht.
Stand der Dinge ist jedenfalls, dass weiterhin außerhalb der CLR betriebene Anwendungen benötigt werden, wenn es um die Erstellung laufzeitkritischer Anwendungen geht (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 Systemen wie der Java-Plattform gemeinsam.
Klassenbibliothek
Die Framework Class Library (FCL) umfasst einige Tausend Klassen, die in so genannte Namensräume (Namespaces) unterteilt sind. Die Klassen erfüllen Aufgaben wie z.B. das Formatieren von Text, das Verschicken von Mails, aber auch das Generieren von Code. Die Unterteilung in Namensräume dient dazu, die große Menge an Informationen übersichtlicher zu gestalten. Beispielsweise befinden sich Klassen zum Generieren von Code in dem Namensraum 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 Server 2003" 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. ASP.NET für die Webseitengestaltung läuft nur auf Windows 2000 Professional/Server, Windows XP Professional und Windows Server 2003.
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).