Lors de la préparation d'une migration, on peut utiliser simultanément et sans danger pour l'exploitation même en cas de crash système :
Sécurité : Les machines virtuelles sont totalement isolées les unes des autres; de plus, en 2006, la plupart des virus testaient immédiatement s'ils tournaient en environnement virtualisé et renonçaient à agir lorsque c'était le cas. Rien ne prouve néanmoins que cette protection ne puisse être contournée d'une manière ou d'une autre, et une littérature abondante est publiée en permanence sur ce sujet.[non neutre]
Facilité d'extension : Le nombre de machines virtuelles se gère quasi indépendamment du nombre de machines réelles, et de façon transparente pour les utilisateurs. Les statistiques de charge des machines virtuelles permettent de les réorganiser sur les machines réelles, ainsi que de prévoir les dates auxquelles prévoir des extensions.
Dans son second sens, maintenant le plus commun, une machine virtuelle désigne un logiciel ou interpréteur qui isole l'application utilisée par l'utilisateur des spécificités de l'ordinateur, c’est-à-dire de celles de son architecture ou de son système d'exploitation. Cette indirection permet au concepteur d'une application de la rendre disponible sur un grand nombre d'ordinateurs sans les contraintes habituelles à la rédaction d'un logiciel portable tournant directement sur l'ordinateur. La technologie JIT permet dans bien des cas à l'application d'avoir des performances comparables à une application native.
Windows XP et similaires tournent également dans un environnement virtualisé, qui est créé par la couche HAL. En cas de changement de machine physique, on peut en principe ne changer que le HAL sans toucher au reste de son installation Windows.
La CLI et C# ont plusieurs similarités avec la JVM de Sun et Java. Les deux sont basés sur une machine virtuelle qui cache les détails matériels de l'ordinateur sur lequel leurs programmes s'exécutent. Les deux utilisent leur propre langage intermédiaire bytecode Common Intermediate Language (CIL, anciennement MSIL) pour Microsoft et Java byte-code pour Sun. Avec .NET, le byte-code est toujours compilé avant l'exécution, soit juste-à-temps (JIT), ou en avance en utilisant l'utilitaire ngen.exe. Avec Java, le byte-code est soit interprété, soit compilé en avance ou encore compilé juste-à-temps. Les deux fournissent des bibliothèques de classes extensibles qui résolvent plein de problèmes de programmation courants, et les deux résolvent beaucoup de problèmes de sécurités par la même approche. Les espaces de noms fournis par le .NET Framework ressemblent beaucoup au package de l'API Java EE aussi bien dans le style que dans l'invocation.
.NET dans sa forme complète (à savoir l'implémentation Microsoft) est actuellement disponible entièrement pour Windows et partiellement pour Linux et Mac, alors que Java est entièrement disponible sur presque toutes les plates-formes. Depuis le début, .NET supporte plusieurs langages et demeure indépendant de la plateforme de telle sorte que n'importe qui peut le réimplémenter sur d'autres plates-formes (l'implémentation Microsoft cible uniquement Windows, Windows CE et la Xbox360). La plate-forme Java a été initialement construite pour supporter uniquement le langage Java, mais sur plusieurs systèmes d'exploitations avec le slogan « Write once, run anywhere » (écrit une fois, tourne n'importe où). D'autres langages ont été développés pour la machine virtuelle java, mais ils ne sont pas très utilisés. L'implémentation Java de Sun est open source (ce qui inclut la bibliothèque de classes, le compilateur, la JVM ainsi que quelques autres outils associés à la plate-forme Java) sous la licence GNU GPL.
De plus en plus de technologies se rejoignent actuellement pour fonctionner côté web et OS. Elles se différencient plus par les outils de production, maintenance que par les technologies utilisées qui se résument en l'utilisation d'un langage de compilation et d'exécution (machine virtuelle) / interprétation et un formalisme xml (xaml, xmm, xul). Ces technologies se retrouvent selon les cas sur des ordinateurs, des téléphones, des pdaphones ou des périphériques multimédia (récepteurs satellite).
Les RIA sont basées sur une machine virtuelle fonctionnant dans un navigateur web. Les RDA sont basées sur une machine virtuelle fonctionnant sur le système d'exploitation. Les RIA et RDA en évoluant sont de plus en plus multi-langage (C#, javascript, java,C#), multi-interface (swing, wpf, flash, AJAX-ui-widgets), multi OS (Mac, Window, unix), multi-matériel (PC, pda, téléphone).
Société | Technologie | Système d'exploitation | Langage de programmation | Application | Web | format |
---|---|---|---|---|---|---|
Microsoft | CLI Microsoft | Microsoft .NET | C#puis CLR/DLR | MFC/ GDI | Silverlight | XAML .cs→.dll |
Novell | CLI Microsoft | unix/SuSE | C#puis CLR/DLR | Mono | Moonlight | |
Adobe | Flash player | Animation flash | Actionscript | AIR | Adobe Flex | .as →.swf |
Sun Microsystems | Java | Applet Java | java | JFC awt-swing | JavaFX | .java→.class |
Netscape | navigator | unix | javascript | AJAX XUL SMIL SVG |