The headlines read like the imaginative claims of an April Fool's story or a satirical sortie from the Onion: Microsoft open-sources full .NET stack; Microsoft ports .NET to Linux and Mac OS; Microsoft boosts free tools versions to compete evenly with its paid editions. And yet…it's all true.
Today, Microsoft announced sweeping changes in its tools division that make the advances of earlier this year look like minor events. Of the announcements, in my view, the most important by far is the commitment to put .NET on all major platforms. Microsoft itself will handle delivering .NET on Linux and Mac OS. It will depend on tighter cooperation with Xamarin to address the mobile sector.
Of these platforms, Linux is clearly the most important. Today, Microsoft earns much of its (record) profits from enterprise software packages (SQL Server, SharePoint, Exchange, etc.). By running .NET on Linux, it now has the ability to run those apps on a significant majority of server platforms. Except for Solaris sites, all enterprises will be able to run the applications without having to add in the cost of Microsoft Server licenses.
But perhaps more important than the pure server benefit is the cloud aspect. VMs on the cloud, especially the public cloud, are principally Linux-based. Windows VMs are available, too, but at consistently higher pricing. With this move, .NET apps can now run anywhere on the cloud or said another way, between servers and the cloud, the apps can run anywhere IT is operating.
The port to Mac OS is certainly less needed, as Macs already run Windows quite well (via Parallels or other virtualization technology). I expect that the move is designed to broaden the desktop coverage of .NET and to attract and work with the growing number of developers who prefer to work on MacBooks. (Go to any developer conference, hackathon, or open-source gathering, and the majority of laptops you'll see are Macs…and I don't mean a mere plurality, but rather an overwhelming majority.)
The final piece of the puzzle, .NET on mobile devices, is being filled in by Xamarin, which sells a usable, if incomplete, porting solution. In its announcement today, Microsoft promised closer cooperation with the Xamarin team. This bodes well, although it remains a mystery why Microsoft has not yet bought up the company. I am hard-pressed to think of a more obvious acquisition for any tech company.
I should add that for development of mobile apps that don't need to be native, Visual Studio 2013 already has HTML5 tools. The next update, due imminently, will add more tooling for Apache Cordova as well as an Android emulator.
The big winners of all this goodness are C# developers. In theory, .NET portability favors all .NET languages equally, but it's no secret that C# is the first among equals. (It and F# are, in fact, the only languages that Xamarin supports currently.) Microsoft has been an excellent steward of the language, evolving it intelligently and remarkably cleanly. Among developers who use it regularly, it is uniformly well liked, which distinguishes it from most of the other major development languages today, where an appreciation that borders on ambivalence is the more common experience.
The big loser is certainly Java. Java's stock in trade has been its longstanding ability to run without modification or recompilation on all major platforms. In this valuable trait, it has had no major competition in the enterprise. If Microsoft's port of .NET provides a multi-platform experience that is as smooth and seamless as Java, then the JVM will have some very serious competition.
Moreover, if that comes to pass, .NET has a key advantage over Java in its support for clients. Despite the significant improvement JavaFX delivers over Swing, Java is no one's first choice for writing desktop UIs, whereas .NET is standard for business applications.
For years, C# has been an attractive language for developers, but blocked in wider adoption by its inability to run on more than Windows. With today's announcement, a whole new world opens up: Nearly all desktops, servers, and cloud instances are within its reach. This is a huge step forward for C# and .NET and represents a remarkable advance in Microsoft's remaking of itself to embrace the future.