Attention: This is an old post, originally written in late 2014 when .NET Core was first announced. There were some later updates but nevertheless, some content may be out of date now.

The great excitement over Microsoft’s announcement to open-source a cross-platform .NET Server Core (explanation by Tim Anderson) is frankly rather puzzling. As Mike James correctly analyzes,

The bottom line is that Microsoft has open sourced code that was already available as open source as Mono. The only difference is that this is the real original Microsoft code.

The last part is of course quite important to the average corporate project in the .NET ecosystem whose aversion to open source lacking the Microsoft rubberstamp is legendary (2007 edition, 2014 edition). Beyond the rather narrowly defined segment of LOB applications requiring server-side cross-platform code running on a genuine original Microsoft .NET CLR, though, I have a hard time seeing much of importance in this announcement.

No WPF, No Visual Studio

.NET Server Core is a newly written subset of the full .NET Framework for Windows. Specifically, neither of the two GUI libraries Windows Forms and Windows Presentation Foundation (WPF) are included, and there’s no word of Silverlight getting resurrected either. Moreover, while the full Visual Studio (as opposed to the crippled “Express” editions) is finally going free for small teams, it’s still going to require Windows – which makes sense since it relies heavily on Windows-only WPF.

Mono supplies its own GUI library and IDE but neither are as highly regarded as WPF and Visual Studio, and the exact nature of the merger or collaboration of Mono and .NET Core is rather unclear anyway. Without a competitive UI framework, cross-platform .NET certainly won’t have a “key advantage” over Swing and JavaFX, as the usually reliable Andrew Binstock claims in a state of confusion. (He seems never to have heard of Mono, either.)

Great Language, Little Else

One advantage of a Microsoft-supplied runtime should be the latest version of the C# language – Mono still lists 4.0 as “preview” while Microsoft’s version is 5.0. However, the admitted excellence of the C# language itself is unlikely to matter much in terms of growing popularity. The most important factors governing language adoption are available tooling and existing libraries and familiarity.

Since some of the best .NET tools and libraries will remain Windows-only, I see little chance of a mass migration away from Java which offers a much bigger choice of cross-platform tools and libraries, plus a language that’s rapidly accumulating C# features anyway. As for client applications… not only does .NET Core lack cross-platform GUI support, but Microsoft itself pointedly announced native support for iOS and Android (with C++ based on Clang & LVVM).

.NET Core is certainly beneficial for Microsoft itself, as its multiplatform presence will make businesses feel more comfortable about staying in the Microsoft ecosystem and targeting the company’s cloud services; and also for Xamarin which will receive a PR and technology boost for its own .NET-based multiplatform solutions. Overall I think the effect will be one of stabilization rather than growth, and certainly fall far short of the “now .NET conquers all!” hype that followed the announcement.

More Details (2014-12-06)

Microsoft’s Immo Landswerth has published Introducing .NET Core, a lengthy post quickly analyzed by Tim Anderson on The Register and his own blog. In short, .NET Core is indeed a new development effort, distinct from both the existing .NET Framework for Win32 Windows and the new .NET Native compiler for Windows Store apps, as well as the existing Mono cross-platform implementation.

Although currently designed as a compatible subset of the .NET Framework, different goals and update schedules make some future divergence and consequent incompatibilities quite likely. Frans Bouma’s comment and subsequent detailed article (“fool me 10 times, shame on me”) highlight the problems this further splintering of the .NET ecosystem creates for developers.

Mike James has added his analysis, too. He quite correctly points out that .NET should never have fallen apart into multiple incompatible APIs in the first place, and that .NET Core is unlikely to bring anyone back into the fold who already abandoned .NET due to Microsoft’s mismanagement.

Looking back on the history you can’t help but think that if what we want it is a unified API to code to then perhaps a unified Windows might have been a good idea – which is what we had with Silverlight on the desktop, browser and Windows Phone. The .NET Framework started out as the unified API. For those who remember what .NET was supposed to be a solution to, it is very sad that we are going round the loop another time.

2016-06-10: Tim Anderson has written a good article for HardCopy magazine that describes the evolution of .NET Core and its recently released ASP.NET variant, called ASP.NET Core.

Visual Studio Code (2016-04-08)

Nearly half a year after this post was originally written, Microsoft had announced Visual Studio Code… and once again created false expectations among developers. Despite the Visual Studio label, Code is just a relatively simple cross-platform editor written in TypeScript for the Electron runtime (see section “Other Projects” in my WebView article).

So unlike Visual Studio with its substantial .NET/WPF components it does not “dogfood” .NET Core, and its feature set is much smaller than Visual Studio’s as well. At the time of this writing it cannot even debug applications on the .NET Core runtime – you need to install Mono for that purpose. The following quote is a snapshot from Working with C#: