Last month, Microsoft announced it would open source more of its .NET programming framework and take it cross-platform to Linux and Mac. The centerpiece of this work is the .NET Core, the development stack that will be the foundation of all future .NET releases.
On December 4, Microsoft officials detailed more specifics about how the company plans to cease building many different versions of the .NET Framework and unify its .NET work across different Windows flavors, as well as non-Windows operating systems. (Thanks to Tim Anderson and his post on The Register for the link and analysis on this.)
When Microsoft first shipped the .NET Framework in 2002, there was just one framework. But then that one framework began multiplying, with different subsets coming to market for different devices and platforms, company officials acknowledged in this week's blog post. That worked in cases where developers only needed to target a specific vertical -- say, Windows Desktop or Windows Phone or Windows Store. But it doesn't work if developers are going horizontal and targeting more than one Windows variant.
Microsoft has tried to get around this problem with portable class libraries, and more recently, with contracts for Windows Store apps (introduced as part of Windows 8). But these were only limited and partial solutions. The .NET Core is meant to go beyond this by creating a unified implementation of .NET.
".NET Core is essentially a fork of the NET Framework whose implementation is also optimized around factoring concerns," explained Microsoft execs. "Even though the scenarios of .NET Native (touch based devices) and ASP.NET 5 (server side web development) are quite different, we were able to provide a unified Base Class Library (BCL)."
This unified BCL is one of the newest pieces of .NET that Microsoft is making open source.
Right now, Microsoft has two different BCL implementations of the .NET Core BCL: One for .NET Native ("Project N") and one for the CoreCLR used by ASP.NET 5, officials said, but the bulk of the BCL are common, meaning the application programming interfaces actually share the same implementations.
"We think of .NET Core as not being specific to either .NET Native nor ASP.NET 5 - the BCL and the runtimes are general purpose and designed to be modular. As such, it forms the foundation for all future .NET verticals," officials said.
Microsoft is delivering the .NET Core platform as a set of NuGet packages, which means different components will be released at different times, as the Softies have said previously.
The .NET Framework, going forward, won't be based on the .NET Core, but will still enable code sharing via PCLs and shared projects, officials said.
With Visual Studio 2015, due next year, Microsoft's goal is to make sure .NET Core is "a pure subset of the .NET Framework," so there won't be any feature gaps. But after that, Microsoft expects that .NET Core will "version" faster than the .NET Framework, meaning sometimes there will be a case where a feature will be available only on .NET Core-based platforms, and not .NET Framework ones.
Microsoft plans to continue to update .NET Framework about once a year, officials said, with some subset of features it introduced in .NET Core. There also will be some features added that will be exclusively for .NET Framework, like some of the features Microsoft will be adding to support the Windows Presentation Framework (WPF).
"Our goal is to minimize API and behavioral differences while not breaking compatibility with existing .NET Framework applications," officials said.
There are a number of additional points and details in the December 4 "Introducing .NET Core" post that make it worth a thorough read -- especially by anyone interested in how Microsoft is moving towards Universal Apps and a more common set of programming interfaces and developer tools.