Microsoft is in 2000 gestart met het .NET idee. In 2002 werd de eerste versie van het .NET raamwerk uitgebracht. Dit raamwerk vertoont (en niet toevallig) enige gelijkenissen met Java. En de oplossing van Java heeft dan weer te maken met de voor periode waarin applicaties zogenaamde executable files of uitvoerbare programmas waren.
De voorgeschiedenis
Uitvoerbare bestanden

Op wikipedia vind je een ideale definitie. Een executable is een computerbestand dat door een computer uit te voeren is. Meestal bevat een executabel de binaire voorstelling van machine-instructies voor een bepaalde processor.
En het woord “een bepaalde processor” vertelt ook de kern van het probleem. Het programma is enkel uitvoerbaar op één bepaald type computer. Plaats het op een ander type computer en je kan er niets meer mee aanvangen. In dat geval moet je de broncode kopiëren van computer type A naar computer type B. Op computer type B moet je dan kunnen beschikken over een compiler voor type B en je moet het programma terug compileren en dan maar hopen dat de nieuwe executable werkt op dezelfde manier als op de computer van type A.
De Java Virtual Machine of JVM

Zou het niet leuk zijn moest er slechts één type computer zijn zodat je maar één keer moet compileren in plaats van tig keren. Dat hebben de uitvinders van Java, waaronder Jasmes Gosling (zie foto), ook gedacht. En dus hebben ze die éne computer uitgevonden. Dat is de Java Virtual Machine of JVM geworden.
De Virual in Java Virtual Machine geeft het al aan. We gaan doen alsof er maar één type computer is, maar natuurlijk is dit niet zo. Al zou Microsoft het wel graag hebben.
De JVM verklaar ook de slogan van Java : “write once, run anywhere”. Of anders uitgedrukt : je schrijft een Javaprogramma op één omgeving, en dit Javaprogramma kan uitgevoerd worden op alle gekende computeromgevingen. Uit ervaring weet ik dat je een Javaprogramma onder Windows kan schrijven en ditzelfde programma uitvoeren op een Linuxmachine. Hoe werkt dit nu ? Wie met Java wil werken, moet een Java Virtual Machine op zijn computer installeren. Deze JVM bevat twee uitvoerbare bestanden, met name javac.exe of de compiler en java.exe, het hart van de JVM die de Javaprogramma’s uitvoert.
De programmeur schrijft een programma in Java en compileert het naar een .class bestand. Dit .class bestand is de vertaling van Javacode naar Bytecode, een intermediaire computertaal die de JVM begrijpt. De JVM vertaalt de bytecode dan naar de machinetaal, afhankelijk van de computer waarop de JVM is geïnstalleerd. Je hebt dus diverse JVM’s, voor Windows, Linux, Unix, iSeries.

Hieronder zie je het nog eens anders voorgesteld : één enkel Javaprogramma wordt door drie verschillende Java Virtal Machines op hun respectievelijke omgeving behandeld en uitgevoerd.

Meertalige Windowsomgeving
Microsoft moet maar rekening houden met één enkele omgeving, met name Windows. Je zou dus denken dat ze nooit met hetzelfde probleem zouden zitten waarvoor Sun de Jvava Virtual Machine heeft uitgedacht.
En toch is het zo : op Windows zijn er verschillende programmeertalen actief : Visual Basic, C++, C#, om allen maar de belangrijkste te noemen. En dit levert communicatieproblemen op. Je kan immers een programma in C++ niet of niet eenvoudig laten samenwerken met een programma in VB of C#. En dus was de idee van de tussentaal ook interessant voor microsoft.
Hieronder zie je hoe het .NET raamwerk dit probleem oplost. Net zoals bij Java werkt .NET met een tussentaal. Dit is de MSIL of Micorsoft Intermediate Language. Je kan een broncode hebben in C#, VB of nog een andere taal. Die compiler vertaalt die eerst naar de tussentaal of MSIL. Pas als je het programma uitvoert, wordt de MSIL overgezet naar de machinecode die door de betreffende computer begrepen wordt.

En hiermee is het initiële probleem van Microsoft opgelost. Vroeger vertaalde de C# compiler de C# code direct in machinetaal. Dit leverde machineinstructies op voor een specifieke computer en enkel gebaseerd op C#code. De VB-compiler leverde dan weer eigen machinecode op, met als gevolg dat je de ene machinecode niet kon laten samenwerken met de andere machinecode.
Via de MSIL is dit opgelost. Alle broncode, ongeacht de oorsprong, wordt vertaald in Microsoft Intermediate Language. Aan de Javakant spreken we van Java bytecode. De Java bytecode wordt uitgevoerd door de Java Virtal Machine. Aan Microsoftkant zien we de de MSIL wordt uitgevoerd door de Common Language Runtime (CLR), de tegenhanger van de JVM.
Java en .NET

Ik heb hierboven geschreven dat Java op meerdere platformen kan draaien, terwijl .NET enkel op Windows draait. Dit is niet helemaal waar. Er is momenteel een open source project, onder de naam monoproject, dat .NET applicaties wil doen draaien op een Linuxomgeving. Meer informatie vind je op http://www.mono-project.com/Main_Page
Het monoproject biedt ook een gratis IDE aan om .NETapplicaties te ontwikkelen in C# en ASP en deze te porteren naar Linux.
Overigens bestaat er ook al een compiler die .NET code omzet in Javacode. Meer informatie hierover vind je terug op
ibm.com/developerworks





