Hace poco tuve la suerte de chatear con Chris Bacon, quien escribi贸 DotNetAnywhere (una versi贸n alternativa de .NET Runtime), e ingeniosamente coment茅:
... probablemente sea uno de los pocos que cre贸 su propio tiempo de ejecuci贸n .NET, 隆lo cual es incre铆ble!
si excluimos a los que tienen un salario, es decir Ingenieros de Microsoft / Mono / Xamarin, hay muy pocos de ellos.

Esta es una traducci贸n de Matt Warren ( A History of .NET Runtimes ). Para no volver a publicar, me ir茅 como est谩
Y luego pens茅: 驴cu谩ntos tiempos de ejecuci贸n totales de .NET existen? Primero, hice mi propia lista, y luego conect茅 un equipo de investigadores altamente remunerados, mis suscriptores, a este caso:
Para esta publicaci贸n, por el tiempo de ejecuci贸n de .NET, me refiero a todo lo que se implementa sobre la base del est谩ndar ECMA-335 para .NET (para obtener m谩s informaci贸n, consulte aqu铆 ). No s茅 si hay una definici贸n m谩s precisa o alguna forma de confirmar oficialmente el cumplimiento, pero en la pr谩ctica esto significa que el tiempo de ejecuci贸n admite archivos .NET exe / dll creados por cualquier compilador C # / F # / VB.NET.
Tan pronto como la lista estuvo lista, sub铆 a Wikipedia (ver la lista de fuentes). El resultado es la siguiente secuencia cronol贸gica:

Creador de l铆nea de tiempo
(Para la versi贸n interactiva siga el enlace)
Si me perd铆 alg煤n tiempo de ejecuci贸n, av铆seme.
Para facilitar la percepci贸n de la cronolog铆a, coloqu茅 cada medio en una de las siguientes categor铆as:
- Microsoft .NET frameworks
- Otros tiempos de ejecuci贸n de Microsoft
- Mono / Xamarin Runtimes
- Tiempos de ejecuci贸n de compilaci贸n AOT
- Proyectos comunitarios
- Proyectos de investigaci贸n
El resto del post est谩 dedicado a una descripci贸n detallada de diferentes tiempos de ejecuci贸n. Por qu茅 aparecieron, qu茅 pueden y por qu茅 compararlos.
Microsoft .NET frameworks
El .NET Framework original de Microsoft apareci贸 a finales de los 90 y solo se ha vuelto m谩s eficiente desde entonces. Recientemente, la compa帽铆a cambi贸 su rumbo al anunciar el lanzamiento de .NET Core framework, que se distingue por su c贸digo multiplataforma y c贸digo abierto. Adem谩s, al desarrollar la especificaci贸n .NET Standard, Microsoft ha proporcionado interoperabilidad en entornos de tiempo de ejecuci贸n.
La especificaci贸n .NET Standard proporciona c贸digo compartido. Define el conjunto de API que deber铆an estar disponibles en todas las implementaciones de .NET para cumplir con el est谩ndar. Esto garantiza la uniformidad de todos los tiempos de ejecuci贸n .NET y evita la fragmentaci贸n futura.
Una peque帽a digresi贸n: si quieres aprender m谩s sobre la historia de .NET, te recomiendo escuchar a Anders Halesberg o ver un discurso de Richard Campbell : este es un narrador realmente genial.
(Tambi茅n est谩 disponible un podcast . Adem谩s, Campbell est谩 escribiendo un libro sobre el mismo tema . Si desea obtener m谩s informaci贸n sobre la historia de todo el ecosistema .NET, y no solo los tiempos de ejecuci贸n, consulte la p谩gina Leyendas de .NET ).
Otros tiempos de ejecuci贸n de Microsoft
Adem谩s del n煤cleo .NET Framework para uso generalizado, Microsoft ha lanzado otras versiones del entorno para fines especiales.
.NET Compact Framework
Los marcos Compact (.NET CF) y Micro (.NET MF) fueron intentos de crear versiones de tiempo de ejecuci贸n m谩s cortas para dispositivos con recursos limitados. Por ejemplo, .NET CF:
... dise帽ado para dispositivos m贸viles o integrados con una cantidad limitada de recursos, como PDA, tel茅fonos m贸viles, controladores industriales, decodificadores, etc. El marco .NET Compact utiliza algunas de las bibliotecas de la misma clase que la versi贸n completa de .NET, as铆 como varias bibliotecas creadas espec铆ficamente para dispositivos m贸viles, como los controles .NET Compact. Sin embargo, las bibliotecas no son una copia exacta de las utilizadas en .NET Framework. Se reducen para ocupar menos espacio.
.NET Micro Framework
El marco .NET MF es a煤n m谩s peque帽o y:
... es para dispositivos con una cantidad limitada de recursos que tienen al menos 256 KB de memoria y 64 KB de RAM. Incluye una versi贸n reducida de .NET CLR y admite el desarrollo de C # y Visual Basic .NET, as铆 como la depuraci贸n (en emulador o hardware) con Microsoft Visual Studio. NETMF implementa un conjunto de bibliotecas base .NET (aproximadamente 70 clases y 420 m茅todos). Se han agregado bibliotecas especiales para aplicaciones integradas. Este es un software gratuito de c贸digo abierto lanzado bajo la Licencia Apache 2.0.
Para aquellos que quieran probar el framework en acci贸n, Scott Hanselman ha escrito una excelente gu铆a para .NET Micro Framework - Hardware para personas de software .
Silverlight
A pesar de que la plataforma est谩 en modo de soporte (o incluso muerta / movi茅ndose hacia la puesta del sol, dependiendo de su punto de vista), es interesante volver al anuncio original y ver para qu茅 era Silverlight:
Silverlight es un m贸dulo de extensi贸n multiplataforma, navegador cruzado .NET dise帽ado para crear aplicaciones de Internet enriquecidas para navegadores. Las versiones preliminares lanzadas esta semana son compatibles con Firefox, IE y Safari en Mac y Windows.
En 2007, Silverlight 1.0 implement贸 las siguientes caracter铆sticas (la plataforma incluso funcion贸 en Linux):
- soporte para c贸decs integrados para reproducir archivos de video VC-1 y WMV, as铆 como archivos de audio en formato MP3 y WMA en un navegador ...;
- Silverlight admite la capacidad de descargar y reproducir gradualmente contenido multimedia desde cualquier servidor web ...;
- Silverlight tambi茅n admite opcionalmente la transmisi贸n multimedia integrada ...;
- Con Silverlight puede crear interfaces de usuario y animaciones multifuncionales, combinar gr谩ficos vectoriales y HTML para crear contenido atractivo ...;
- Silverlight facilita la creaci贸n de rico contenido de video interactivo ...
Adem谩s, como se sugiere en los comentarios, Silverlight estaba en el Symbian S60
Mono / Xamarin Runtimes
Mono apareci贸 como resultado de los intentos de Miguel de Icaz y otros desarrolladores para hacer que .NET funcione en Linux (desde la historia temprana de Mono ):
No me importa qui茅n fue el primero, porque creo que Mono es un medio para un fin: una tecnolog铆a que ayuda a Linux a establecerse en las computadoras de escritorio.
La misma publicaci贸n describe c贸mo comenz贸 todo:
En cuanto a Mono, los eventos ocurrieron aproximadamente de la siguiente manera.
Tan pronto como sali贸 la documentaci贸n de .NET en diciembre de 2000, me interes茅 en esta tecnolog铆a y comenc茅 a estudiarla, como todos los dem谩s, desde el int茅rprete de bytecode. Sin embargo, pronto encontr茅 un problema: la falta de especificaciones para los metadatos .
Los 煤ltimos cambios en las primeras fuentes de m谩quinas virtuales salieron el 22 de enero de 2001. Alrededor de este tiempo, comenc茅 a escribir mensajes usando la lista de correo de .NET y solicitando la informaci贸n que faltaba sobre el formato del archivo de metadatos.
...
Casi al mismo tiempo, Sam Ruby estaba tratando de convencer a los miembros del comit茅 de ECMA para que publicaran una descripci贸n del formato de archivo binario, que no formaba parte de sus planes. No s茅 c贸mo se desarroll贸 todo, pero en abril de 2001, ECMA public贸 una descripci贸n del formato de archivo.
Con el tiempo, Mono ( ahora Xamarin ) se ha extendido a otras plataformas. El marco se ejecuta en Android e iOS / Mac. En febrero de 2016, Microsoft adquiri贸 Xamarin. Vale la pena recordar la colaboraci贸n de larga data entre Mono / Xamarin y Unity , dirigida a proporcionar soporte para C # en Unity . Al mismo tiempo, Unity ahora es miembro de la Fundaci贸n .NET.
Tiempos de ejecuci贸n de compilaci贸n AOT
Tom茅 tales entornos a una categor铆a separada, porque tradicionalmente .NET usaba la compilaci贸n JIT , pero con el tiempo, aparecieron m谩s implementaciones con AOT.
Por lo que puedo decir, el primero fue el marco Mono, en el que apareci贸 la compilaci贸n AOT en 2006. Adem谩s, Microsoft lanz贸 recientemente el .NET Native, y actualmente est谩n trabajando en CoreRT , un entorno de tiempo de ejecuci贸n .NET optimizado para la compilaci贸n AOT.
Proyectos comunitarios
Sin embargo, no todos los tiempos de ejecuci贸n de .NET fueron desarrollados por Microsoft o por compa帽铆as que compr贸 posteriormente. Hay proyectos implementados por las comunidades.
- El m谩s antiguo de estos es DotGNU Portable.NET . Su desarrollo comenz贸 simult谩neamente con Mono con el objetivo de "crear un conjunto de herramientas gratuitas para compilar y ejecutar aplicaciones en el marco de la CLI ...".
- En segundo lugar, nombrar茅 DotNetAnywhere , desarrollado por una sola persona, Chris Bacon. DotNetAnywhere es conocido por servir como el tiempo de ejecuci贸n inicial para el proyecto Blazor. 隆Tambi茅n es una gran oportunidad para echar un vistazo a lo que constituye un tiempo de ejecuci贸n compatible con .NET sin tener que atravesar los millones de l铆neas de c贸digo que forman CoreCLR !
- Luego viene CosmosOS ( un proyecto de GitHub ), que no es solo un tiempo de ejecuci贸n .NET, sino un sistema operativo administrado. Si desea obtener m谩s informaci贸n, le aconsejo que lea esta secci贸n de preguntas frecuentes o busque "debajo del cap贸" . Otro intento similar es SharpOS .
- Finalmente, recientemente me encontr茅 con CrossNet . Este tiempo de ejecuci贸n "analiza los ensamblados .NET y genera c贸digo C ++ no administrado que puede ser compilado por cualquier compilador de C ++". Para obtener m谩s informaci贸n, eche un vistazo a la documentaci贸n y al c贸digo generado de muestra.
Proyectos de investigaci贸n
Ahora pasemos a los tiempos de ejecuci贸n .NET muy poco conocidos. Estos son proyectos de investigaci贸n de Microsoft lanzados para ver cu谩nto se puede ampliar la funcionalidad del entorno de ejecuci贸n administrado y qu茅 tareas se pueden resolver con su ayuda. Algunos hallazgos de investigaci贸n han aparecido en implementaciones comerciales del entorno .NET, por ejemplo, Span <T> surgi贸 del proyecto Midori .
Una implementaci贸n de la CLI (.NET framework) de Microsoft, en la que el c贸digo fuente est谩 disponible bajo la licencia de Fuente compartida. Aunque SSCLI no es adecuado para uso comercial debido a los detalles espec铆ficos de la licencia, con su ayuda los programadores pueden analizar las caracter铆sticas de implementaci贸n de muchas bibliotecas .NET y crear versiones modificadas de la CLI. Microsoft proporciona la CLI de fuente compartida como una CLI de referencia educativa.
Curiosamente, con el lanzamiento de Rotor, la compa帽铆a pudo lanzar el proyecto Gyro , que da una idea de c贸mo aparecieron los gen茅ricos en el tiempo de ejecuci贸n de .NET .
Midori es el nombre en clave de un sistema operativo de c贸digo administrado desarrollado por Microsoft en conjunto con Microsoft Research. Se inform贸 que podr铆a convertirse en una implementaci贸n comercial del sistema operativo Singularity, un proyecto de investigaci贸n lanzado en 2003 para crear un sistema operativo altamente confiable en el que el n煤cleo, los controladores de dispositivos y las aplicaciones consisten en c贸digo administrado. Fue dise帽ado para computaci贸n paralela y podr铆a ejecutar un programa distribuido en varios nodos simult谩neamente. Tambi茅n implement贸 un modelo de seguridad basado en la ejecuci贸n de aplicaciones en un entorno aislado. Microsoft ha sugerido varias formas posibles de migrar de Windows a Midori. El trabajo en el sistema operativo se suspendi贸 en 2015, aunque muchas de las ideas implementadas en 茅l cayeron en otros proyectos de Microsoft.
Aparentemente, la mayor铆a de las ideas del proyecto Midori volvieron al .NET Framework. Puedes leer m谩s sobre esto con Joe Duffy en una serie de art铆culos sobre Midori :
- Una historia de tres seguridades
- Objetos como capacidades seguras
- Todo asincr贸nico
- C贸digo nativo seguro
- El modelo de error
- Cultura de rendimiento
- 15 a帽os de concurrencia
Singularity es un sistema operativo experimental desarrollado por Microsoft Research entre 2003 y 2010. Se supon铆a que era un sistema operativo altamente confiable en el que el n煤cleo, los controladores de dispositivos y las aplicaciones consisten en c贸digo administrado. La seguridad interna utiliza seguridad de tipo en lugar de protecci贸n de memoria de hardware.
Y el 煤ltimo pero no menos importante entorno es Redhawk :
El nombre de c贸digo para la versi贸n experimental y m铆nima del tiempo de ejecuci贸n de c贸digo administrado que evolucion贸 a CoreRT.
Referencias a fuentes
Los siguientes son los art铆culos de Wikipedia que utilic茅 para crear la escala cronol贸gica:
M谩s opciones encontradas
Net60
En los comentarios, bmforce sugiri贸 que hab铆a otra plataforma, Net60. No hay mucha informaci贸n al respecto, pero logr贸 encontrar una menci贸n en el foro + art铆culo sobre CodeGuru :
隆El .NET Compact Framework para Symbian S60 3rd finalmente ha llegado!
Por lo tanto, puede programar para Symbian en cualquier lenguaje de Visual Studio 2005. (Visual Basic, Visual C #, Visual C ++). DotNet (net60) se adjunta al mensaje, debe firmarlo e instalarlo en el tel茅fono. Por cierto, puede ejecutar archivos .exe escritos en Windows Mobile .NET CF desde su propia carpeta.
Luz de la luna
No se menciona Moonlight, que se basa en la versi贸n Mono - Opensource de Silverlight:
Moonlight es una implementaci贸n de c贸digo abierto de Silverlight, creada principalmente para Linux y otros sistemas operativos Unix / X11. La 煤ltima versi贸n de Moonlight (Moonlight 4 Preview 1) proporciona soporte para el conjunto b谩sico de funciones de Silverlight 3, adem谩s de compatibilidad con Silverlight 4.
Blazor
Tampoco se menciona el nuevo proyecto Blazor , que tiene todas las posibilidades de 茅xito: .NET para Web Assembly. Se utiliza, por ejemplo, en el proyecto Try .NET , un juego de herramientas para crear ejemplos de c贸digo .NET que se pueden ejecutar en un navegador.
PageFX
Me parece absolutamente fant谩stico, pero uno de los desarrolladores del proyecto PageFX me llam贸 la atenci贸n y dej贸 caer el enlace al repositorio donde se almacena el traductor de .NET CIL a c贸digo de bytes Flash. Es incre铆ble :) El autor de este proyecto es @todysh
M谩s traducciones de art铆culos de Matt Warren