Completando un poco lo que Chuidiang comenta. Una plataforma es un conjunto de servicios que proporcionan una interfaz común de programación. Estos servicios tienen una finalidad bien definida, y en general ayudan al programador con tareas comunes, afines a dicha meta.
Ejemplos de plataformas son Java, .NET y los mismos sistemas operativos --aunque a un nivel más bajo--.
La plataforma .NET tiene las siguientes metas:
+ Seguridad
+ Portabilidad (entre comillas)
+ Independencia del lenguaje
+ Estricta orientación a objetos
+ Desarrollo de componentes reutilizables e independientes del lenguaje
+ Fácil acceso a datos, sin importar --directamente-- su fuente.
+ Totalmente orientado al Web
+ Abstracción de los servicios estándares de un sistema operativo
En cuanto a los lenguajes, .NET define el llamado CLS --Common Language Specification-- que son las reglas básicas que un lenguaje debe definir, entre los que se encuentra la orientación a objetos, tipos comunes y en general que se puedan cumplir las metas anteriormente descritas.
Así, cualquier lenguaje que cumpla el CLS, es un lenguaje .NET. Microsoft proporciona Visual Basic (que cambió muchísimo respecto a VB6) y C#, un nuevo, moderno y elegante lenguaje ex profeso para la plataforma. Aparte, hizo algunas (horribles en mi opinión) extensiones para C++, para adaptarlo a .NET. Sin embargo, ahí no se limita el asunto. J# es una versión de Java para .NET. Borland desarrolló ya el Delphi .NET, y la comunidad de programadores ha sorprendido con Python y PHP .NET. Alguien por ahí hizo COBOL.NET (sí, el viejo COBOL) a petición de la asociación de banqueros de E.U. y en algún lugar leí que Ada también iba a tener una versión .NET. Evidentemente, algunos lenguajes meramente procedimentales como Pascal o C quedan fuera, por las características propias de .NET.
Con esto, se busca preservar las diversas características del lenguaje y que a su vez puedan emplear los servicios de .NET. Un ejemplo es Java. Con J# puedes seguir programando en J2SE/J2EE, y con algunas pequeñas (pero irritantes) adaptaciones puedes mezclarlos con .NET. Algo absurdo, si consideras que todo lo que ofrece J2SE/J2EE (bueno, casi todo) lo provée también .NET. Otro ejemplo es C++, aunque ahí hay más complicaciones porque C++ te da una libertad total en el manejo de la memoria, algo prohibido en .NET. Por ello no puedes mezclar directamente clases "administradas" con "inseguras". En fin...
Finalmente, eso de la portabilidad es un decir, puesto que Microsoft creó .NET pensando en Winbugs, aunque mi compatriota Miguel de Icazas (junto con otros y patrocinado por Novell) dejó atónitos hasta a los de Redmond cuando anunció el beta de Mono, una versión de .NET para Linux/POSIX.
Tristemente para los puristas programadores de C++ empedernidos y tercos como yo, C# y .NET se alzan como el futuro de la programación. Longhorn y las siguientes versiones de Windows ya estarán basadas totalmente en .NET, a tal grado que tentativamente por ahí del 2012 ya no se permita programar más que para .NET, condenándonos (a los C++'eros) a una lenta agonía. Por mi parte, daré toda la resistencia que pueda.
Saludos.