User:Sundström/Drafts/.NET Core

.NET Core (pronounced dot net core) is an open-source cross-platform application platform for developing applications for devices such as PC, smartphones, and the web, developed by Microsoft and the community.

It builds on the foundations of the .NET Framework, but differs in that it is modular ("cloud-optimized") and cross-platform, and runs not exclusively on Windows, but also macOS and Linux.

The .NET Core project is part of the .NET Foundation.

Cloud-optimized
The .NET Core platform has been designed with the cloud in mind. Developers are able to install multiple runtimes and versions side-by-side, without breaking other apps, which is possible with the full .NET Framework, as it is an integrated component of the operating system.

The platform is modular in nature. Dependencies are distributed as versioned NuGet packages. This modularity allows for frequently releases of both the runtime and framework than for .NET Framework, that is tied to the release-cycle of Windows.

Cross-platform
.NET Core has been designed to be cross-platform, and run, besides Windows, on MacOS and Linux. These operating systems are officially supported by Microsoft.

There are also community-driven support for FreeBSD.

Open-source
.NET Core is being developed in the open with support from the community, under the lead of Microsoft. The project is also part of the .NET Foundation.

CoreCLR
The CoreCLR is the runtime component of .NET Core and the .NET Core Framework.

It implements the Common Language Infrastructure standard, and thus provides services like bytecode verification, just-in-time compilation, and garbage collection.

The CoreCLR was originally developed for Silverlight, as an optimized implementation of the Common Language Runtime, with cross-platform in mind, then to target both Windows and Mac OS X. Linux support was latet added with .NET Core.

In addition to the CoreCLR, existing runtimes, such as .NET CLR and Mono runtime, can be targeted to allow the use of the tools.

Core Framework
The .NET Core Framework, or CoreFX, is a set of standardised API:s, classes and methods, that are modular in nature, and distributed as NuGet packages.

The .NET Core Framework is set to comply with the emerging .NET Standard, that aims to bring parity across the different implementations of the Common Language Infrastructure, including the existinf .NET Framework Library (FCL).

Packages
In .NET Core, all dependencies (runtimes and libraries) are distributed as NuGet packages, instead of regular standalone .NET assemblies. This enables easy distribution and versioning.

Tools
The .NET Core SDK comes with a set of tools for installing runtimes and package dependencies that are essential to the platform.

.NET CLI
The .NET CLI is the central tool of the .NET Core platform that allows for creating app projects, installing packages, building and executing apps.

The tool is invoked through the  command.

With Entity Framework Core there is an  subcommand for performing database operations, such as migration.

DNVM
The .NET Version Manager (DNVM) is the tool for managing .NET runtimes on the system. It enables the user to download and install certain versions of the CoreCLR.

In addition it also supports management of the .NET CLR and the Mono runtime.

Runtimes are distributed as NuGet packages.

On Linux, runtimes can be installed using system-wide package managers, such as  on Ubuntu.

Programming languages
.NET Core does, just like other implementations of the Common Language Infrastructure, support multiple programming languages and paradigms. Any language that compiles into Common Intermediate Language (CIL) bytecode and targets the right framework and version can run on top of the CoreCLR.

The most notable languages are C#, Visual Basic .NET and F#.

Frameworks
There are a couple of frameworks that directly target .NET Core:

App frameworks

 * ASP.NET Core - The next version of the ASP.NET Web framework, built for .NET Core and the .NET Framework.
 * Entity Framework Core - The next version of the Entity Framework object-relational mapping framework.
 * .NET for Universal Windows Platforn (UWP) - Allows for the development of Universal Windows apps for .NET.

Compiler

 * .NET Compiler Platform (Roslyn) - Provides C# and Visual Basic compilers as-a-service. This is a core component of the .NET Core SDK.

Development environments

 * Visual Studio - Microsoft's integrated development environment (IDE).
 * Visual Studio Code - Microsoft's open-source cross-platform code editor, based on Atom. Powered by OmniSharp.
 * MonoDevelop - Open-source cross-platform IDE for Linux, Mac OS X, and Windows.
 * Xamarin Studio - Branded version of MonoDevelop by Xamarin, with proprietary components.
 * OmniSharp - Open-source cross-platform .NET development environment for C# and .NET using the Roslyn. It provides services that power many open-source tools, such as VS Code and Atom.

Compatibility
The .NET Core platform can, in addition to the CoreCLR, also target desktop runtimes like .NET CLR, and the Mono runtime. Thus, it is possible to take advantage of the new tools, without having to switch to the new Core Framework. This does, however, add dependencies to the system and makes apps less portable.

Not all the facilities and API:s of the .NET Framework has been implemented for the .NET Core Framework at the moment of writing.

Existing NuGet packages can be referenced and work with little or no modifications, depending on what framework standard they are set to target.

With the emergence of a .NET Platform Standard, it remains to be seen when the .NET Core and .NET Framework will be fully converged.