Wiktionary defines encore as “A brief extra performance, done after the main performance is complete”. Guess what, it kind of describes what .NET Core is!
Some of you may be asking: why do we need this at all? Don’t we already have Portable Class Libraries (PCL), Windows Phone (WP) and Universal Windows Platform (UWP) apps? Well, for once, UWP is just for Windows 10, Windows Phone targets the current – soon to go away – versions of Windows Phone 8.x, and PCLs are a terrible mess.
What developers have been asking for is a true One platform: cross platform (pardon the repetition), open source, modular and modern, meaning, fully embracing separation of concerns, dependency injection, inversion of control and all the other patterns that we have been using for quite some time now. That’s what .NET Core is!
In a nutshell, .NET Core is a set of APIs that are made available as open source and cross platform, meaning, the same functionality will be available on Windows, Mac, FreeBSD and Linux, but also, why not, Android and iPhone. It was (and is currently being) written from scratch with performance, modularity and scalability as first order concerns. It is composed of several Nuget packages, and this fragmentation will likely be a problem to start, because people won’t know what is the package to add for something that they have been doing for ages without the need of one, or maybe just one – Entity Framework Core, for example, is spread around EntityFramework.SqlServer, EntityFramework.Commands, EntityFramework.Core, EntityFramework.Migrations, etc. Fortunately, sites such as http://packagesearch.azurewebsites.net can help with this process.
This raises some challenges but also opens new opportunities. Let’s face it, Windows Server licenses are not exactly cheap, and having the possibility to deploy backend applications to Linux is very attractive. Yes, people have been using the .NET framework to build powerful enterprise-level application on Windows, and can continue to do so, but now we can reach out to other operating systems knowing that it is going to be fully supported by Microsoft. To make it lighter, the upcoming Windows “Nano” Server will only run .NET Core and will no longer feature a user interface. You can now contribute to .NET Core, you have access to the code and you can send your modification requests.
Yes, we won’t be able to use WPF, Windows Forms and Web Forms with .NET Core, at least, for now. WPF and Windows Forms have strong dependencies on Windows internals, and Web Forms has been deprecated in favor of MVC, but I guess it will just take some time until a clone of it appears on .NET Core, there’s nothing preventing it, quite the opposite. These APIs are still there, and will definitely continue and evolve. We will need to get accustomed to the new names, tools – welcome back, command line! – and APIs, but, as soon as Microsoft finally stabilizes the names, it won’t take long.
Interesting times, for sure!