.NET Core is Microsoft’s new cross-platform implementation of .NET. Although the .NET Framework isn’t vanishing, .NET Core is set to be the future focus of Microsoft’s development platform. Born of the “need and desire to have a modern runtime that is modular and whose features and libraries can be cherry picked”, the .NET Core execution engine is also open source on GitHub.
What .NET Core means for the future of working with .NET
There are three groups of programmers that need to evaluate how they work with .NET:
Existing .NET developers who are happy with their applications as-is.
Existing .NET developers who want to move their applications cross-platform.
Developers new to .NET.
For existing .NET developers who have been working with .NET Framework for the past 15 years, switching to the cross-platform .NET Core means giving up a vast number of familiar APIs and entire frameworks such as WPF and WCF.
WPF is used to build Windows desktop applications so that is not a surprise, however WCF is the best technology to use to build and consume SOAP services so it is a shame that it can currently only be used on Windows. Microsoft have hinted that WCF might be included in future versions of .NET Core, however personally I wouldn’t bet my business on that.
If existing .NET developers need to continue to use technologies such as WCF then they should be aware that they must continue to use Windows as the host operating system.
For those new to .NET, I would recommend learning .NET Core first, evaluate it and see if it can provide the platform you need. Only if it cannot, then look at .NET Framework.
Today, .NET Core has not had a final release. In November 2015 Microsoft released a first candidate (RC1) with a “go-live” licence meaning that they support its use in production environments. Since then there have been delays, primarily to the command line tools, and Microsoft announced there will be a RC2 release, likely in May 2016. A date for final release has not been made.
I recommend that a .NET developer not switch an existing application to .NET Core today. .NET Core should be evaluated for future projects, especially those that would benefit from the flexibility of cross-platform deployment.
Taking .NET Core open source
The decision to make .NET Core a piece of open source technology is important because it enables Microsoft teams to collaborate with external developers in the community and accept code contributions to improve .NET. A richer flow of ideas and solutions helps Microsoft teams step outside their bubble.
Open source developers use a variety of programming languages and platforms. They are quick to learn new platforms and Microsoft’s .NET platform is one of the easiest to learn and most productive to use. The biggest challenge will be trusting that Microsoft really has embraced open source. As long as Scott Guthrie, one of the proponents of open source within Microsoft, is in charge of .NET then I believe we can trust them.
Building and working cross-platform with .NET Core
.NET Core 1.0 does not support the creation of desktop applications, for Windows or other platforms such as Linux. For cross-platform development, .NET Core 1.0 only supports web applications and services by using ASP.NET Core, and command line applications. .NET Core 1.0 also supports Universal Windows Platform apps that are cross-device but they are limited to Microsoft Windows 10 platforms including Xbox One and HoloLens.
For cross-platform mobile development, use Xamarin. Xamarin is based on the Mono project, not on .NET Core. It is likely that Microsoft will slowly merge .NET Core and Xamarin so that in a few years Microsoft has a single “.NET Core 2.0” that supports cross-platform mobile and web development. This fits with Microsoft CEO Satya Nadella’s “Mobile First, Cloud First” strategy.
.NET Core is designed to be componentized so that only the minimum number of packages that your application requires will be deployed as part of a continuous integration strategy. .NET Core supports Linux and Docker to allow the virtual machine infrastructure flexibility that DevOps needs.
Changing the landscape with “Bash on Ubuntu on Windows”
The Linux world has a more vibrant and faster-moving developer tool set than Microsoft’s Windows. Although Microsoft has the powerful PowerShell command line platform, it cannot compete with open source Bash. Bringing Bash to Windows is the final piece of a master plan that enables Linux developers to immediately feel at home on Windows, and for Microsoft developers to instantly gain all the amazing tools available for Bash, as well as use the same tools on both Windows and Linux.
“Bash on Ubuntu on Windows” (BUW) means that not only has Microsoft provided the cross-platform .NET Core, and the cross-platform Visual Studio Code, but also the cross-platform developer command line tools. Now a developer can do their work on any platform and not have to learn new tools or APIs.
.NET Core and the future of Microsoft
.NET Core (and BUW and Visual Studio Code) all point to Microsoft finally recognizing that their Windows platform is a de facto legacy platform. Windows had a long 30-year run, but it’s reign is almost over.
Microsoft’s Azure is their new developer platform and it is amazing. With Azure Stack coming soon to enable on-premise private cloud with the same features as they offer in their public cloud, I believe Microsoft is in the best position to dominate as a cloud developer platform.
To enable our heterogenous future, and build mobile and cloud solutions, Microsoft has embraced open source and cross-platform tools and technologies. Microsoft’s wonderful developer tools and technologies aren’t just for Windows users any more, they are for everyone.
About the Author
Mark J. Price is a Microsoft Certified Trainer (MCT) and Microsoft Specialist, Programming in C# and Architecting Microsoft Azure Solutions, with more than 20 years of educational and programming experience. He is the author of C# 6 and .NET Core 1.0: Modern Cross-Platform Development.