A little history
Since the beginning of time (that is computer time) there have been a series of different languages that we have applied to different tasks. Some more flexible and some more performant than others. People have learned languages such as C, C++, COBOL, Python, Java, PHP and made these languages popular as the Internet grew into the monster it is now.
But what made such languages be more favored than others? The answer is simple, they were simple to learn (some more than others) and they could be used in almost any existing platform. You could create a little program in Java and run it on a Linux box, Mac or Windows without needing to change it at all! That was amazing! And they were open source! Anyone could download the main core and modify it as he or she saw fit!
But, wait a second, what about C# and the .Net suite? What happened to them? The reality is that .Net was not being adopted at the same rate that other languages were. Even worse, if you see statistics about its adoption rate, you will see that most projects where it is implemented are old projects or just Windows application projects. And there are fewer projects starting from scratch today.
Is C# that old? Is it that bad as a language? Is it not performant? Is it not flexible? The answer to all those questions is no. C# is one of the few languages where you read your code and you have the pleasure of saying that it is beautiful (that is if you really care about having good maintainable code), it is performant, and can be used in a considerable number of different projects. But, and yes, there is a but, you can’t run it outside Windows. And for the fanatics, no, it is not open source.
Then came Project Mono
Miguel De Icaza created Project Mono to bring C# to the multi-platform world. It started as a small project, based mostly on Microsoft architecture specifications and documentation. As the years went by and more and more people started to use it, Ximian was born as a company mainly dedicated to bringing .Net specifications to the open source world and to all Linux distributions. Finally, .Net could reach all non-Microsoft platforms.
But the project was even more ambitious, it grew enough and had so much support that they decided to create Xamarin: a truly cross-platform framework for developing applications for all devices. Xamarin could run on Windows and Linux computers and servers, just as it could run on hand held devices running IOS, Android and even Windows OS’s.
Microsoft goes bold
After Microsoft announced that Satya Nadella would be their new CEO, the company started a new path. It began recognizing open source not as an antagonizing paradigm, but as an evolutionary path. It realized that the previous closed tools mentality of Microsoft needed to change, and that they should embrace open source as their own path.
Proof of that is Microsoft recognizing the value of Xamarin and acquiring the company, as well as incorporating Ubuntu into Windows 10 as part of the Windows subsystem for Linux. The company’s most recent move (as of June 2018) was acquiring Github, a platform well known for its open source mentality, and repository for code from companies like Google, Amazon and Apple.
And then came .Net Core
.Net Core is Microsoft´s attempt to do things the right way and enter all platforms. It is a cross platform, open source re-writing of the .Net framework. It is actively maintained by Microsoft and a huge community of developers over on GitHub. Yes, you read it right, it is on GitHub and you can download its source code and branch it and modify it as you want. It is truly open source.
But, is it truly multiplatform? What can I develop with it?
Yes, it is truly multiplatform. It can run on Windows, MacOS and Linux distributions. It is a dream come true for .Net enthusiasts, and it is not just a nice to have, as it runs in all major operating systems.
It is Microsoft´s latest attempt to bring its great developer tools and languages to all ecosystems.
But what can really be accomplished with .Net Core? As of now, you can write console applications to process unattended data or run machine learning algorithms. Or you can use ASP.Net Core to create restful APIs or web servers. In other words, you don’t need to run ASP.Net in a Windows server running IIS. This alone is a significant improvement over classic .Net applications.
Wait a second, can I bring my old applications to Linux and MacOS servers?
Yes, you can, but (and there always is a but), you can’t just have all the goodies without any changes. You must modify some parts of the code, since ASP.Net Core has a more modern and better development cycle and it works differently from classic ASP.Net – adding middleware to process requests and plugging in new features to make development easier and follow new trends and benefits that other frameworks have.
How complete is .Net Core?
.Net Core depends a big deal on moving old NuGet packages into the framework. Most popular packages are already translated to the framework, others are a work in progress, but more and more are being written with .Net Core, so it is just a matter of time until all the packages in the NuGet ecosystem are available.
Microsoft is fully backing up its bet on .Net Core, and version 3.0 will include Windows Form and WPF applications (only to run on Windows environments). Most sources think that it is the future of the .Net Framework. Others think that the classic .Net Framework will be replaced by .Net Core.
It is an exciting time for .Net and its adoption rate will grow as Microsoft tries to get more and more functionalities to the framework.