The Microsoft Connect() conference in Las Vegas took of on December 4th with some coll but not really unexpected announcements. For my interests the most important announcement was the .Net Core 3.0 preview availability with the long hailed support for desktop applications. Till now you could use .Net Core to build mostly web applications or console application, but starting with .Net Core 3.0 developers will be able to build Windows desktop applications on .Net Core. This step was already announced in May at the Build conference so therefore the .Net Core 3.0 preview availability is not unexpected for techhies that try to be active in the .Net ecosystem. Ignorance is however at high level and since the initial announcement at Build tech forums and discussion boards are full of questions and answers around the “cross-platform desktop applications” idea. So will we be able to run .Net Core 3.0 desktop applications on Windows, Linux and Mac? Of course NOT! That’s why I would like to get into a lot more detail on this point and finally outline what in my opinion really is the key benefit of creating .Net Core 3.0 desktop applications.
Will .Net Core 3.0 desktop applications run cross platform?
As mentioned in the introduction, the answer is a clear NO. In fact this was one of the key points of all talks, blog posts, tweets of Microsoft engineers and representatives when talking about .Net Core 3.0. There are many reasons that should be understandable by anybody who works (even on personal projects) in the .Net ecosystem.
Let’s take WPF as example. As you surely know, WPF stand for Windows Presentation Foundation which certainly indicates that there is a strong link to the Windows operating system. Desktop applications, as WPF for instance, need to work in one way or another with the different drivers responsible to establish an interface between OS and hardware. Any operating system has its own set of such drivers and interfaces that interact with the computer hardware that work fairly differently. So building a cross-platform desktop application is not really feasible right now because that application should encapsulate dedicated logic to work with different OS specific drivers.
Another question that I saw really often was: but how can ASP.Net Core run cross platform? Well, things are way easier when it comes to web applications. Asp.Net Framework web applications were able to run on IIS only, so it relies on a certain web server that is specific for Windows Server operating systems. Different Linux distros have their own web servers and ASP.Net framework web applications were not able to run on those web servers. So how did ASP.Net Core solve this problem? They have integrated a cross platform web server called Kestrel in ASP.Net Core, so ASP.Net Core applications can be deployed to Linux since the web servers there just need to be configured to forward all incoming requests to the Kestrel web server. Unfortunately, things are not that simple when it comes to desktop applications.
So what’s the point of .Net Core 3.0 desktop applications?
Even if what I have wrote till now sounds like a negative evaluation on this bold step of bringing desktop applications to .Net Core 3.0 I am actually fairly excited about it. Or at least I think that having desktop applications in .Net Core is useful for developers from a technical perspective. But there’s also a more strategic reason why I think that desktop applications in .Net Core are cool. So let’s take these points one by one.
The technical point first. When developing desktop applications one of the challenges was that they had to run on the .Net Framework. This means that computers need to have the .Net framework installed. This is not a big problem in itself. The real challenge was that each application supports a certain version of the .Net Framework and on one computer you can have only one version of the framework installed. This is a nightmare for sysadmins and developers as well. Having desktop applications in .Net Core means that developers can take advantage of the self contained deployment of .Net Core applications so on one computer we can potentially have several such desktop applications, each running on different versions of .Net Core. And that is in my opinion a really huge benefit!
From a more strategic point of view, bringing desktop applications to .Net Core 3.0 means that Microsoft continues to open source parts of their proprietary Windows centric products and APIs. This is a clear message that when Microsoft talks about the benefits of open source software, they really mean it since they bring more and more products and APIs to the open source world. This is very encouraging in my opinion.
That’t it! I’m curious what your thoughts are about .Net Core 3.0 and having desktop applications in the .Net Core family. So, if you have something to say, don’t be shy, hit me with a comment and let’s get the discussion started. Cheers!