Tuesday, 1 November 2016

Microsoft is Going GNUts


I cut my teeth as a commercial software developer developing line-of-business systems for SMEs in with Microsoft Access in the early 2000s. Although I have subsequently enjoyed working with a range of tools and platforms (wouldn't quite call myself a "polyglot" yet), I generally take a keen interest in how Microsoft's software development surface-area emerges and evolves over time.

The past year-or-two (since Satya Nadella has taken the lead) has been fascinating - very exciting, from my geeky perspective. The Microsoft software development toolkit is basically gone/going open - right down to the nuts-and-bolts that is "Bash on Ubuntu on Windows". This attitude is an about-face - having gone from implicitly exclusive to explicitly inclusive.

Strategically this makes great sense, since for Microsoft it's really mostly about the cloud land-grab (pun intended) now; in effect Microsoft are saying - "Bring all of your systems and platforms to Azure - all shapes, sizes and flavours are welcome, the more-the-merrier!".

[The cloud services landgrab - http://cloudcomputing.sys-con.com/node/2192464]

There is a wider discussion here - this post more-or-less focuses on what Microsoft's paradigm shift means technically for web and application development though. It was written in January 2016 - it's taken me a while to get around to publishing it - so although I have checked the links and updated some terminology, some of the material may be outdated.

Microsoft going GNUts?

Microsoft are taking us in an interesting direction with the introduction of DNX (.NET Execution Environment - now .NET Core CLI), ASP.NET 5.0 (now ASP.NET Core 1.0) and MVC 6 (now Core MVC). These cross-platform tools are creating opportunities for developers and IT pros on Mac and Linux to explore options in “Microsoft land” and for .NET developers to host applications on non-Microsoft platforms.

The move toward cross-platform capability has been on the cards with Microsoft for a while, but it feels a bit like we're shifting gears recently.

For example – there's the beginnings of a Linux/Mac-friendly development environment in the mix (Visual Studio "Code"). The structure of an MVC 6 (ASP.NET 5.0) project is significantly different from how it was previously - for example, project.json replaces {project_name}.csproj - the JSON format being open and cross-platform ready. And MVC 6 uses DNX as it's execution environment, running by default on the Kestrel web server, which is based on entirely OSS.

The following few links provide an introduction to some of this terminology:
Aside from ASP.NET 5.0, we’re also seeing some interesting developments with cross-platform capability for mobile development in VS2015, including the ability to debug native Android applications using the GNU debugger (GDB) from RC1.

What about Mono?

Mono is an open-source clone of the .NET framework, that was enabled and more-or-less foretold by Microsoft making C# and the .NET CLI an ECMA and ISO standards (ECMA-334 and ISO/IEC 23270 respectively), way back in 2003.

Microsoft’s DNX (.NET Execution Environment) is essentially a host for the .NET framework that runs at OS (“native”) level and operates in a way similar to a VM, thus literally providing an execution environment for an instance of the .NET framework. That could be a plain-old Microsoft .NET framework instance, or a more exotic Mono .NET framework instance. DNX is cross-platform capable out-of-the-box though, meaning that you can now run Microsoft’s version of the .NET framework on Linux or Mac. The introduction of the DNX doesn’t make Mono redundant, because Mono is inherently cross-platform and can run directly at the OS level. However, it does herald a sea change in the way that we think about Microsoft applications development.

The following diagram provides a nice visualisation of how everything fits together with the introduction of DNX:

[“Layering” diagram – taken from https://github.com/aspnet/Home/wiki/DNX-structure]

These couple of links may also help explain how all of this fits together:


In summary, DNX is an emerging initiative from Microsoft (now emerged in the form of .NET Core CLI) that provides a cross-platform execution environment that is capable of hosting and enabling applications built on Mono and/or .NET 4.5+, across the Mac, Linux and Windows platforms.

To-date it seems that this emerging ecosystem is still a bit sketchy (at time of writing the current version of DNX was 1.0.0-rc1 - now DNX has morphed into .NET Core CLI and is in release version 1.0.1) – however, it also seems it is coming along in leaps-and-bounds. There seems to be a good deal of interest from the OSS community and there's lots of support in the form of blogs, articles, etc. Here are a few goodies:

Migration path

The process of migrating an ASP.NET 4 (Web API 2) project to MVC 6 on Code/Linux (Ubuntu) still seems to be riddled with dependency issues, so certainly not plain sailing just yet. But it is early days and the tooling is maturing rapidly. This opens up some interesting questions (and opportunities) for the future of Microsoft applications development.

Closing thoughts

The essence of software development is not brands, tools and platforms - it is craft, design and skillful execution. I feel like developers increasingly understand that nowadays, which is cool. Microsoft's new strategy lends itself to this, which is also cool.

Looking forward to seeing how Microsoft's increasingly open/inclusive strategy plays out over the remainder of 2016 and in to 2017.

Migrating (and Open-Sourcing) an Historical Codebase: SVN-to-Git

I have a SVN repo on my local machine that I have been shoving stuff into since before I knew how to use revision control systems properly (...