History and alternatives to the .NET platform

I was recently lucky to chat with Chris Bacon, who wrote DotNetAnywhere (an alternative version of .NET Runtime), and I wittily remarked:







... you are probably one of the few who created their own .NET runtime, which is awesome!

if we exclude those on a salary, i.e. Microsoft / Mono / Xamarin engineers, there are very few of them.













This is a translation of Matt Warren ( A History of .NET Runtimes ). In order not to republish, I will leave as is







And then I thought: how many total .NET runtimes exist? First, I made my own list, and then connected a team of highly paid researchers - my subscribers - to this case:









For this post, by the .NET runtime, I mean everything that is implemented on the basis of the ECMA-335 standard for .NET (for more information, see here ). I don’t know if there is a more precise definition or some way to officially confirm compliance, but in practice this means that the runtime supports exe / dll .NET files created by any C # / F # / VB.NET compiler.







As soon as the list was ready, I climbed into Wikipedia (see the list of sources). The result is the following chronological sequence:













Timeline maker

(For the interactive version follow the link)







If I missed any runtimes, let me know.







To facilitate the perception of the chronology, I placed each medium in one of the following categories:







  1. Microsoft .NET frameworks
  2. Other Microsoft Runtimes
  3. Mono / Xamarin Runtimes
  4. AOT compilation runtimes
  5. Community Projects
  6. Research projects


The rest of the post is devoted to a detailed description of different runtimes. Why they appeared, what they can and why to compare them.







Microsoft .NET frameworks



Microsoft's original .NET Framework appeared in the late 90s and has only become more efficient since then. Recently, the company changed its course somewhat by announcing the release of the .NET Core framework, which is distinguished by cross-platform and open source code. In addition, by developing the .NET Standard specification, Microsoft has provided interoperability across runtime environments.







The .NET Standard specification provides code sharing. It defines a set of APIs that should be available in all .NET implementations to comply with the standard. This ensures consistency across all .NET runtimes and prevents future fragmentation.

A small digression: if you want to learn more about the history of .NET, I recommend listening to Anders Halesberg or watching a speech by Richard Campbell - this is a really cool storyteller.









(A podcast is also available . In addition, Campbell writes a book on the same topic . If you want to learn more about the history of the entire .NET ecosystem, and not just runtimes, check out the Legends of .NET page).







Other Microsoft Runtimes



In addition to the core .NET Framework for widespread use, Microsoft has released other versions of the environment for special purposes.







.NET Compact Framework



The Compact (.NET CF) and Micro (.NET MF) frameworks were attempts to create shorter runtime versions for devices with limited resources. For example, .NET CF:







... designed for mobile or embedded devices with a limited amount of resources, such as PDAs, mobile phones, industrial controllers, set-top boxes, etc. The .NET Compact framework uses some of the libraries of the same class as the full version of .NET, as well as several libraries created specifically for mobile devices, such as .NET Compact controls. However, libraries are not an exact copy of those used in the .NET Framework. They are reduced to take up less space.


.NET Micro Framework



The .NET MF framework is even smaller and:







... is for devices with a limited amount of resources that have at least 256 KB of memory and 64 KB of RAM. It includes a reduced version of the .NET CLR and supports development in C # and Visual Basic .NET, as well as debugging (in an emulator or in hardware) using Microsoft Visual Studio. NETMF implements a set of .NET base libraries (about 70 classes and 420 methods). Special libraries for embedded applications have been added. This is free open source software released under the Apache License 2.0.

For those who want to try the framework in action, Scott Hanselman has written an excellent guide to The .NET Micro Framework - Hardware for Software People .







Silverlight



Despite the fact that the platform is in support mode (or even dead / moving towards sunset, depending on your point of view), it’s interesting to return to the original announcement and see what Silverlight was for:







Silverlight is a cross-platform, cross-browser. NET-based extension module designed to create rich Internet applications for browsers. Pre-builds released this week support Firefox, IE, and Safari on Mac and Windows.

In 2007, the following features were implemented in Silverlight 1.0 (the platform even worked on Linux):









Also, as suggested in the comments, Silverlight was on the Symbian S60







Mono / Xamarin Runtimes



Mono appeared as a result of attempts by Miguel de Icaz and other developers to get .NET to work on Linux (from Mono early history ):







It doesn't matter to me who was the first, because I consider Mono a means to an end: a technology that helps Linux gain a foothold on desktop computers.

The same post describes how it all began:







As for Mono, the events happened approximately as follows.

As soon as the .NET documentation came out in December 2000, I became interested in this technology and began to study it, like everyone else, from the bytecode interpreter. However, I soon encountered a problem - the lack of a specification for metadata .

The latest changes in the early virtual machine sources came out on January 22, 2001. Around this time, I started writing messages using the .NET mailing list and asking for the missing information about the metadata file format.

...

Around the same time, Sam Ruby tried to convince members of the ECMA committee to publish a description of the binary file format, which was not part of their plans. I don’t know how everything developed, but by April 2001, ECMA published a description of the file format.

Over time, Mono ( now Xamarin ) has spread to other platforms. The framework works on Android and iOS / Mac. In February 2016, Microsoft acquired Xamarin. It is worth recalling the long-standing collaboration between Mono / Xamarin and Unity , aimed at providing support for C # in Unity . At the same time, Unity is now a member of the .NET Foundation.







AOT compilation runtimes



I took such environments to a separate category, because traditionally .NET used JIT compilation , but over time, more implementations with AOT appeared.

As far as I can tell, the first was the Mono framework, in which the AOT compilation appeared in 2006. In addition, Microsoft recently released the .NET Native, and they are currently working on CoreRT , a .NET runtime environment optimized for AOT compilation.







Community Projects



However, not all .NET runtimes were developed by Microsoft or by companies it subsequently purchased. There are projects implemented by communities.









Research projects



Now let's move on to the very little-known .NET runtimes. These are Microsoft research projects launched in order to see how much the functionality of the managed execution environment can be expanded and what tasks can be solved with its help. Some research findings appeared in commercial implementations of the .NET environment, for example Span <T> grew out of the Midori project .







Shared Source Common Language Infrastructure (SSCLI) (or Rotor)



Microsoft's CLI (.NET Framework) implementation, in which source code is available under the Shared Source license. Although SSCLI is not suitable for commercial use because of the licensing features, with its help programmers can analyze the implementation features of many .NET libraries and create modified versions of the CLI. Microsoft provides the Shared Source CLI as a reference educational implementation of the CLI.

Interestingly, with the release of Rotor, the company was able to release the Gyro project , which gives an idea of ​​how generics appeared in the .NET runtime .







Midori



Midori is the code name for a managed code operating system developed by Microsoft in conjunction with Microsoft Research. It was reported that it could become a commercial implementation of the Singularity operating system, a research project launched in 2003 to create a highly reliable operating system in which the kernel, device drivers, and applications consist of managed code. It was designed for parallel computing and could run a program distributed over several nodes simultaneously. It also implemented a security model based on running applications in an isolated environment. Microsoft has suggested several possible ways to migrate from Windows to Midori. Work on the operating system was discontinued in 2015, although many of the ideas implemented in it fell into other Microsoft projects.

Apparently, most of the ideas from the Midori project got back into the .NET Framework. You can read more about this in Joe Duffy 's Midori series of articles :







  1. A tale of three safeties
  2. Objects as Secure Capabilities
  3. Asynchronous everything
  4. Safe native code
  5. The error model
  6. Performance culture
  7. 15 Years of Concurrency


Singularity (operating system) (also Singularity RDK)



Singularity is an experimental operating system developed by Microsoft Research between 2003 and 2010. It was supposed to be a highly reliable operating system in which the kernel, device drivers, and applications consist of managed code. Internal security uses type security instead of hardware memory protection.







Redhawk



And the last but not least important environment is Redhawk :

The code name for the experimental, minimal version of a managed-code runtime that evolved into CoreRT.







References to sources



The following are the Wikipedia articles I used to create the chronological scale:









There were more options



Net60



In the comments, bmforce suggested that there was another platform, Net60. There is not much information about it, but I managed to find a mention on the forum + an article on CodeGuru :







The .NET Compact Framework for Symbian S60 3rd has finally arrived!

Therefore, you can program for Symbian in any language of Visual studio 2005. (Visual Basic, Visual C #, Visual C ++). DotNet (net60) itself is attached to the message, you need to sign and install it on the phone. By the way, it can run .exe files written on Windows mobile .NET CF from its own folder!


Moonlight



There is no mention of Moonlight, which is based on the Mono - Opensource version of Silverlight:







Moonlight is an open source implementation of Silverlight, made primarily for Linux and other Unix / X11 operating systems. The latest release of Moonlight (Moonlight 4 Preview 1) provides support for the core Silverlight 3 feature set, plus compatibility with Silverlight 4.


Blazor



Also not mentioned is the new Blazor project , which has every chance of success: .NET for Web Assembly. It is used, for example, in the Try .NET project, a toolkit for creating .NET code examples that can be run in a browser.







PageFX



It looks like absolutely fantastic to me, but one of the developers of the PageFX project knocked me and dropped the link to the repository where the translator from .NET CIL to Flash bytecode is stored. It's awesome :) The author of this project is @todysh









More translations of articles from Matt Warren






All Articles