A modularized .NET Ecosystem is comming. Using .NET without Windows, without Visual Studio and even without .NET Framework becomes simpler than ever before!
The past months have been really exiting for me and lot of .NET developers too. Microsoft has been working and is still working on a complete modularization of the entire .NET ecosystem. With this new modularization, we Developers have a lot of new options how we can use .NET. This makes us and our apps more flexible. The efforts the community took to bring .NET to different platforms (especially the mono project) are going to be much easier in the future. The main results of the ongoing modularization efforts of Microsoft are .NET Core and ASP.NET 5. Both projects are open source. With those two new items in the .NET ecosystem, Microsoft finally managed it to make .NET really independent from following three areas:
.NET Framework / Mono
In the world of a modularized .NET ecosystem you don't have to use the entire .NET Framework. Now Microsoft provides the .NET Core runtime to us. This runtime can be used on different platforms (currently Windows, Linux and Mac OS) and can be packaged and deployed with your app. The runtime provides the minimum necessary to run a .NET application. This runtime lays the foundation of a .NET runtime which is really platform independent and therefore the same on each platform. Each app build against .NET Core will run the same on each supported platform. Dependencies to third party libraries and to the libraries originally from the .NET Framework will be resolved by NuGet packages. You can deploy your app without any dependency to .NET Framework or Mono.
Especially for web apps, Microsoft build the KRuntime framework which is part of the ASP.NET 5 project. KRuntime is an abstraction of the underlying .NET Runtime. Apps build on KRuntime run on .NET Framework, Mono and the new .NET Core Runtime. For Apps build on KRuntime this means the underlying .NET runtime is exchangeable and the apps are really independent from a specific .NET runtime. This makes it possible to use Mono on Linux and .NET Framework on Windows for example. With KRuntime the days we had to choose between Mono and .NET Framework for an application backend on a server are finally over plus we get the option to easily move from platform to platform.
Of course we have the Mono Project for a long time now. But there has been never a 100% compatibility between Mono and .NET Framework. With KRuntime (a framework focused on server/web apps) now we have a real abstraction of the underlying operations system infrastructure and .NET runtime. This means, web apps build on top of KRuntime are really independent from .NET Framework and IIS. KRuntime apps can be easily moved between different platforms. By the way you can also build command line applications based on KRuntime. For all non web apps we can use .NET Core to build platform and operating system independent .NET apps.
In the case of the development environment it is similar to the operation system. Of course there is tooling support for .NET on different platforms and also on windows away from Visual Studio. But now in the course of the modularization of .NET the tooling on each platform has the chance to become more unified. In the case of web apps based on ASP.NET 5, all functionality Visual Studio provides to the user is based on cross platform available command line tools which can be used by each development environment or text editor. Furthermore MSBuild has been made open source by Microsoft and will also be ported to other platforms like Linux and Mac OS. All this contributes to the fact that development environments are just a visualization of cross platform available tooling and you can expect the same behavior of the tooling no matter which platform you are on.
All in all, this means it is now more easier for us developers to move our codebase between different development environments, run our code on different operating systems and even on different .NET runtimes.
What are your thoughts to this?