.NET has evolved greatly since its induction way back in the early 2000s and at this point it is beginning to rival Java in the ways it can be deployed. This post is meant to be a simple list of terms that get thrown around so hopefully things can make a little more sense to those unfamiliar.
.NET Framework: This is the name for the original implementation of the .NET runtime and libraries that ran exclusively on Windows. It begin with version 1.0, then went to 1.1, 2.0, 3.0, 3.5, 4.0, 4.5 before the ecosystem explosion. Since then the release have been more frequent and more patch-like. The current version as of this writing is 4.7.1.
Mono: This is what I commonly refer to as the the “great long-running reverse engineering game.” Several companies, all fronted by the same individual, made it their goal to bring an implementation of the .NET runtime and libraries to Linux. After they achieved that, they went on to Macintosh, and eventually wrote implementations for many platforms including iOS, Android, and various gaming consoles. This seems to be heading for replacement by .NET Core.
Xamarin: Xamarin is the name of the company that eventually ended up with the rights to the Mono source. They are now owned by Microsoft but spent a good number of years independently maintaining Mono, with a focus on mobile devices. Their most popular frameworks are Xamarin iOS and Xamarin Android which are runtime / library implementations designed to run on iOS and Android respectively.
.NET Core: This is the official Microsoft attempt to bring the .NET runtime and libraries across various flavors of desktop platforms. It has a great command line interface and ability to publish non-runtime dependent applications so that if desired it can run in an environment without a .NET runtime installed at all.
.NET Standard: Due to the fact that so many variations of runtimes trying to accomplish the same thing are in existence, the .NET Standard is a list of API that an implementation must support to claim support for a given version of the .NET Standard. Thus, if you compile against the .NET Standard, your library can run on any runtime that conforms to that standard, and any future ones as well.
UWP: Universal Windows Platform is Microsoft’s attempt to unify phone, tablet, and desktop with one code base that targets it all. It is a sandboxed environment that produces self contained applications that are designed to be distributed on the Windows Store.
Roslyn: You might have seen this term flying around. This is the name of Microsoft’s latest C# compiler environment. It is open source and available as a prebuilt library so that any application can gain access to the powerful C# compilation and analysis methods that Visual Studio uses.
.NET Native: This is an AOT (ahead of time) compiler for UWP that will precompile .NET IL (intermediate language, which is the compiled form of .NET assemblies that is consumed by the .NET runtime) down into native code (either x86, x64, or ARM) designed to run on the Windows operating system. This gives large performance gains on memory / resources constrained devices.
ASP .NET: This is Microsoft’s framework for building server side applications designed to be interacted with via HTTP calls. It is Windows only, but it’s newer and younger sibling ASP .NET Core is designed to run cross platform.
.NET Runtime: This is the engine that is responsible for hosting applications written in .NET. It is a C++ program designed to allocate managed memory, perform garbage collection, and load .NET assemblies into and out of its address space and subsequently compiling them on demand for execution by the host operating system.
.NET Framework Libraries: These are the libraries that provide basic functionality as a platform. Things such as string operations, file I/O, threading, etc are provided by these libraries. They were historically bundled with a given release of the .NET Framework, but these days they are modular and distributed out of band.
Assembly: This is the term for a binary image containing instructions that are executable by the .NET runtime (as opposed to a binary image containing machine instructions that are executable by the operating system).