Probably you have seen in your Windows computer a program installed that is called “.NET Framework” (or more recently “.NET Runtime”) that gets updated and seems a requirement for some apps but you ignore its purpose.
This post explains what is the .NET Developer Platform or Framework.
Common Language Infrastructure (CLI)
Common Language Infrastructure (CLI) is a standard that describes executable code and a runtime environment that allows multiple high-level languages to be used on different computer platforms without being rewritten for specific architectures.
CLI was originally published by Microsoft in 2000, as the standards ECMA-335 and ISO/IEC 23271.
The existance of CLI allows, for example, to build cross-platform applications in C# for multiple OS.
There are different implementations of the same CLI standard. In fact, Microsoft owns different implementations of the same standards.
Some CLI implementations by Microsoft contain .NET on its name (as for example, .NET Framework and .NET Core). This is why CLI implementations are often called .NET implementations.
All CLI implementations consist of two components:
- A library called Framework Class Library (FCL)
- A runtime environment or virtual machine called Common Language Runtime (CLR)
Framework Class Library (FCL) is a library that provides interoperatibility among different programming languages. It allows that the framework supports different programming languages.
Common Language Runtime (CLR) is an application virtual machine that provides services such as security, memory management, and exception handling. It can be also described as the the environment where the code is executed.
CLR would be equivalent to Java Virtual Machine (JVM) in Java and Python Virtual Machine (PVM) in Python.
Each .NET implementation version has a different FCL and CLI. This is the reason why software created with a specific .NET implementation version is not valid with a previous or later version of the same .NET implementation.
.NET Standard is a set of common APIs that are implemented in the Base Class Library of any .NET implementation. The standard has been updated throughout the time, and its latest version as of 2022 is 2.1.
Each .NET implementation version is linked to a .NET Standard version. This allows that a program that is assigned to a .NET Standard version can be run on any .NET implementation that is compatible with this standard version. For example, a program created with .NET Framework 4.7.2 could be run by Mono 5.4, because they are based on the same .NET Standard 2.0.
Before the development of .NET Standard, a program could only be run on the .NET implementation it was created with; there was no compatibility among different .NET implementations. .NET Standard was not available before .NET Framework 4.5.
List of .NET implementations:
- .NET Framework
- Universal Windows Platform (UWP)
- .NET Core
The apps created with .NET are native, though they are developed as cross-platform.
.NET Framework was the first implementation of .NET framework developed, in this case by Microsoft.
It was initially released in 2002, and the last version of this implementation was released 2019. It means that it is no longer updated, except for security updates. The last version released was .NET Framework 4.8.1. It has been succeeded by .NET Core.
Unlike .NET Core, it is propietary, and it is mainly available only for Windows. This OS had .NET Framework installed as default; now .NET Runtime is installed as default instead.
The official Integrated Development Environment (IDE) for .NET Framework is Visual Studio, and it is developed by Microsoft.
When .NET Framework appeared, it was only available for Windows.
Mono is a software framework that was designed to be compatible with .NET Framework. It was the first attempt to implement a CLI to run .NET code on Linux (and subsequently other OS), based on CLI and ECMA-335/IEC 23271:2006 standards.
Mono was not originally developed by Microsoft; instead, it was developed by the independent company Ximian. Nevertheless, as of 2022 the framework is now owned by Microsoft.
The transition from the independent company to Microsoft can be quickly summarized. As mentioned before, Ximian developed the initial version. Novell acquired Ximian in 2003. Then Attachmate bought Novell in 2011, had no interest in Mono, and fired all Mono developers. A new company called Xamarin, founded in the same year by the same person who founded Ximian, continued to support Xamarin, and it got to receive the perpetual license to Mono projects from Novell. On 2016, Xamarin was finally acquired by Microsoft.
Xamarin is the name of the company that develop Mono projects as of 2022. I see that Xamarin is frequently used as a way to group all cross-platform implementations of Mono-like projects owned by Xamarin company. In fact, the company Xamarin started to add the company name on its products, sometimes even replacing the Mono existing name (for example, product MonoTouch came to be Xamarin.iOS).
The first version of Mono was release on 2004, 4 years after the publication of CLI. In the following versions, the Mono project was expanded to other OS different to Linux.
List of mono-like or Xamarin .NET implementations:
- Mono: Linux
- Xamarin.iOS (formerly MonoTouch): iOS
- Xamarin.Android (formerly Mono for Android): Android
- Xamarin.macOS: macOS
In addition to the Mono implementations, Xamarin provides other tools that aids in developing cross-platform .NET projects. Xamarin.Forms, that evolved into .NET MAUI and is explained below.
Mono was made free and open-source after the acquisition by Microsoft.
The official IDEs for Mono/Xamarin are GNOME’s MonoDevelop and MonoTools plugin for Microsoft Visual Studio.
Universal Windows Platform (UWP)
Universal Windows Platform (UWP) is an implementation of .NET used for building UWP apps. It is designed to unify development for different targeted types of devices, including PCs, tablets, phablets, phones, and the Xbox.
It is developed by Microsoft.
.NET Core is the previous name of what is now just called .NET. To avoid ambiguities, we will call it .NET Core through this post.
.NET Core is a developer platform developed by the .NET foundation, owned by Microsoft, and other communities.
.NET Core was a reimplementation of .NET Framework from scratch, aiming to be lightweight and provide a more modular architecture than the original.
It was originally released on 2016, and as of 2022 it is still being updated. It is then the successor of .NET Framework.
Unlike .NET Framework, it is free and open-source, and it is available for different OS like Windows, Linux and macOS. No compatibility with Android and iOS has been yet announced.
Unlike .NET Framework, applications built with .NET Core do not need any pre-installed software to be run.
.NET Standard is a formal specification of .NET APIs that are available on multiple .NET implementations.
.NET Core supports multiple programming languages, editors and libraries to create applications. It supports C#, F# and Visual Basic .NET (VB.NET), among others.
There are many different applications that can be created with .NET, including web, mobile, desktop, games and IoT.
.NET MAUI (acronym that stands for Multiplatform Application UI) is the merge and evolution of the tool Xamarin.Forms into .NET Core. As explained before, it allows to use cross-platform controls that are mapped to the native control of each compatible operating system.
The official Integrated Development Environment (IDE) for .NET is Visual Studio, and it is developed by Microsoft.
Cross-platform game engine Unity also contains a .NET implementation.
It is developed by Unity Technologies, not by Microsoft.
What are the differences between .NET Framework, Xamarin and .NET Core?
As a conclusion, these are the differences of the 3 .NET developer platforms or frameworks owned by Microsoft:
- .NET Framework was the original implementation of .NET, it works only for Windows and it was installed by default on this OS. It is no longer maintained and it has been replaced by .NET Core.
- Mono/Xamarin is the first cross-platform implementation of .NET and has the broadest compatibility on desktop (Windows, Linux, macOS), mobile (Android, iOS) and other OS.
- .NET Core, just called .NET, is a reimplementation of .NET Framework that supports Windows, Linux and macOS. It is now installed as default on Windows OS, as a replacement of .NET Framework.
- Peter Mbanugo; “The difference between .NET Core, .NET Framework and Xamarin“; Telerik.com, 2021.
- Microsoft; “.NET Standard“; Microsoft, 2021
- Immo Landwerth; “Demystifying .NET Core and .NET Standard“; Microsoft, 2017