Microsoft přišel kolem roku dva tisíce s prostředím .NET Runtime a nástrojem .NET Frameworks (nyní je ve verzi 1.1). Nejlépe jde tyto produkty porovnat s Java Runtime a Java SDK. .NET má s Javou společnou tu ideu, že výsledkem kompilování našich programů není kód přímo pro určený procesor, ale jakýsi mezikód, který není závislý ani na procesoru ani na operačním systému. Tento mezikód je pak spouštěn nejčastěji nějakým virtuálním strojem, který převádí instrukce mezikódu na instrukce procesoru. Jeho silnou stránkou je také garbage kolektor, který umožňuje, že při psaní kódu se nemusíme starat o odstraňování již nepotřebných objektů, garbage kolektor to dělá při běhu virtuálního stroje za nás. .NET šel na rozdíl od Javy ještě dále v tom, že byl navržen na to, aby se mezikód dal vytvářet kompilováním z různých programovacích jazyků. V balíku .NET Frameworks jsou kompilátory pro C#, Visual Basic .NET, C, C++ a později přibyl i J#. Je také poměrně dost kompilátorů od třetích stran pro jiné jazyky, které jako výstup mají mezikód .NETu (dále CLI Common Language Infrastructure).
Mimo jiné Microsoft také vytvořil nástroj pro tvorbu a běh internetových aplikací nad prostedím .NET ASP.NET. Jedná se o relativně silné prostředí na tvorbu internetových stránek, i když podle mě obsahuje návrh ASP.NET drobné myšlenkové chyby připadá mi, jako by ASP.NET navrhovali lidi co sice umí programovat a myslet,ale neměli moc zkušeností s tvorbou nějaké větší internetové aplikace. ASP.NET 2 by to snad mělo opravit.
Pro C#, knihovny tříd i CLI jsou ECMA standardy, které vycházejí z daných produktů Microsoftu. Nicméně ne vše, co Microsoft udělal pro .NET je ECMA standardem. Napříklat není ECMA standard pro knihovnu tříd System.Windows.Forms
Existují dva projekty, které se snaží implementovat .NET Runtime (nebo lépe řečeno CLR Common Language Runtime) nejen pod Linuxem. Tyto projekty mají i vlastní nástoje pro vývoj .NET aplikací. Tím prvním a starším je DotGNU Portable.NET, tím druhým, mladším, ale rychleji vytvářeným, je pak Mono.
Mono je dnes již ve verzi 1.0.2 (nestabilní větev ve verzi 1.1.1) a umožňuje běh na Linuxu (i Windows a MacOS) většině čistým .NET aplikacím, které nepoužívají grafické rozhraní (System.Windows.Forms dále budu označovat SWF). Čistou aplikací zde myslím aplikaci, která je celá v CLI, neodkazuje se na žádnou knihovnu, která není .NET. Vývoj Mona je sponsorován především firmou Novell. Cílem Mona je ne jen umožnit, aby bylo možné spustit aplikaci, kterou někdo udělal ve Windows pro .NET na Linuxu, ale udělat svébytnou platformu. Velikou sílou .NETu je možnost programovat pro CIL v mnohých jazycích a pak velice jednoduše propojovat jednotlivé aplikace, které jsou třeba napsány v různých programovacích jazycích.
Základní nástroje, které Mono obsahuje:
Mono mimo nástrojů na vývoj a běhového prostředí samozřejmě obsahuje i knihovny tříd. Na níže zobrazeném obrázku jsou znázorněny třídy (mimo Mono runtime engine) obsažené v Monu. Světle modré jsou ty, které jsou implementací ECMA standardu, tedy v každém případě by u těchto tříd neměl být problém s licencí. Zelené jsou ty, které jsou Monu vlastní.Nakonec červené jsou ty, které nejsou v ECMA standardu a implementace v Monu je udělána podle produktů Microsoftu. S těmito částmi by teoreticky mohl být problém s licencí, ale Microsoft tvrdil, že si nebude klást žádné nároky.
Cílem Mona 1.0 bylo zhruba naimplementovat Microsoft .NET Framework verze 1.1 bez SWF. Další verze by jednak měla mít již i SWF a také reagovat na nové produkty Microsoftu. Microsoft má vydat někdy v roce 2005 produkt Microsoft Whidbey, který má především obsahovat Generic types, což přináší změnu do kompilátoru C#, do CLR i do knihoven tříd. Na tomto rozšíření se již v tuto dobu pracuje. Dále má Whidbey přinést i jiné změny do tříd knihoven a ASP.NET 2. Na čtvrté čtvrtletí roku 2004 je naplánována verze Mona 1.2, která má přinést pouze jednodužší změny směrem k Whidbey a v druhém čtvrtletí roku 2005 by měla vyjít verze Mona 2.0 obsahující pokuď možno celou implementaci Whidbey.
Za dobu, co jsem používal Mono 1.0.x, jsem nenarazil na chybu Mona v kompilátoru C#. Relativně dost nestabilní se mi zdál MonoDevelop 0.5 sem tam padal a malé chybky s doplňováním jmen funkcí, nefungoval import z VS .NET a po delším času používaní se program relativně dost zpomalil, i přes to jsem v něm však vyvíjel aplikace a nakonec jsem byl spokojený. ASP.NET stránky, které jsem dříve vytvářel v produktech Microsoftu jsem bez problémů byl schopen kompilovat v Linuxu. Trochu mě zamrzelo, když jsem zjistil, že xsp server Mona zobrazuje internetové stránky trochu jinak než IIS od Microsoftu (xsp používá např. DIV někde, kde Microsoft používá tabulky), což se v mém případě projevilo i na výsledném vzhledu aplikace. Nicméně stránky fungovaly. Běžné konzolové aplikace jsem také neměl problém rozchodit pod Monem až na jednu cizí.
I když není Portable.NET tak vyspělý jako Mono, obsahuje pár nástrojů, které mono nemá.
Základní nástroje Portable.NETu:
Seznam free kompilátorů, které by již měli běžet pod Monem a vytvářet CLI byte kód
Dále se pracuje například na kompilátoru pro JScript či Ada.
.NET a Java má dost společného. Jak jsem již psal, Portable.NET může kompilovat C# do Javy. Existuje také implementace Java VM nad Monem (a Microsoft .NETem), jmenuje se IKVM. Ukázka jak běží Eclipse za použití IKVM:
Je možné pracovat v PHP s třídama .NET. Příklad aplikace:
<?php
Console = new Mono('System.Console');
$Console->WriteLine('Hello World');
?>
SWF jsou třídy, které v Microsoft .NET umožňují mimo jiné vytvářet grafické prvky Windows, je to tak trochu .NET obal WinAPI. Jedná se o nejvíc problematický balíček tříd na implementaci, je to také jedna z mála skupin tříd, které nejsou v Monu 1.0.x. Byla snaha v Monu vytvořit implementaci SWF nad jistou částí Wine. Z toho se však zhruba před měsícem upustilo, protože se narazilo na problémy při vývoji, a v nové vývojové verzi Mona se vytváří implementace přímo v C# za použití malých driverů, v tuto chvíli pro Xka a WinApi. Nové SWF by také pod Monem měli umožňovat měnit vzhled. Ukázky z nynějšího vývoje:
Portable.NET implementoval již odzačačátku SWF přímo, ale nakonec naopak použil mimo jiné i části kódu od Mona pro SWF, které používají Wine.
Existuje několik balíčků tříd pro tvorbu GUI jiné než SWF:
http://www.mono-project.com/ hlavní stránka Mona
http://www.go-mono.com/monologue/ aktuální informace o dění okolo Mona
http://www.dotgnu.org/pnet.html stránka projektu DotGNU o Portable.NET
http://www.southern-storm.com.au/portable_net.html hlavní stránka o Portable.NET
http://wxnet.sourceforge.net/ WX.NET
http://nant.sourceforge.net/ NAnt
http://www.nunit.org/ NUnit
http://nunitasp.sourceforge.net/ - NUnitAsp