Microsoft seems to be falling back in love with .NET - but is vNEXT the same .NET we know and love or something very different?
For the first time Microsoft's plans start to make sense - whether it is good sense and what impact it will have on the existing .NET ecosystem is difficult to work out at this early stage. As the .NET Framework blog puts it:
"TechEd is the first time we’re talking about .NET vNext, as the next major release of the .NET Framework."
As we have already heard at BUILD and from other sources, Microsoft has been hard at work but the parts didn't really add up to anything whole. Each part was interesting, and perhaps useful, but not essential. What, for example, was the point in putting so much effort into Roslyn - the hosted .NET compiler? Why was the .NET Native tool chain being implemented now rather then so many year ago when it would have been even more useful? And what exactly are the many splits in ASP.NET into new technologies all about?
Put simply, the future of .NET looked like a bit of a free-for-all mess without heading and purpose. Now it looks a lot more purposeful.
" .NET vNext will have a cloud optimized mode that enables you to deploy your apps with a copy of the .NET Framework libraries they need. Since the runtime and framework libraries are deployed on an app-basis, each app can run different versions of .NET vNext side-by-side and upgrade separately, all on the same machine. These libraries have been slimmed down significantly to reduce the footprint of the framework, and will be distributed via NuGet. Also, libraries such as WPF and Windows Forms have been removed from this mode."
Well, apart from the obvious kick in the teeth for WPF and Windows Forms, you probably think that this is a positive way to go - but wait what is the UI written in?
As the apps are described as "mobile first" and "cloud-first" the most likely answer is that we are talking about WinRT apps or pure server apps with no UI - but it is difficult to be precise. The "cloud optimized" mode sounds like a good idea, however. You can write an app and then deploy it to a server, a local virtual server or a cloud based VM with the system looking after the dependencies. The idea seems to be that the Rosyln compiler will take care of any re-compile that is required. This also seems to be a cross-platform system:
"We're developing this with cross-platform in mind, including an active collaboration with Xamarin to ensure that cloud-optimized .NET applications can run on Mac or Linux on top of the Mono runtime."
We have all heard this sort of claim before, the only new feature is the involvment of a third party, i.e. Xamarin. It really is about time Microsoft bought the company and made it seem more like a core Microsoft technology.
While the details of .NET vNext are vague, there are more details for ASP.NET vNext. The relationship between .NET desktop and ASP.NET was originally that ASP.NET was an attempt to bring the desktop to the web. Over time this has changed and we have had to live through a strange period where ASP.NET repeatedly morphed into other things - MVC, Web Pages, WebAPI and any ad-hoc open source technology Microsoft felt like putting into the mix. Confused? So was, and is, everybody else. The only way to survive seems to have been to pick a technology and tell everyone else that it was the future.
Now Microsoft is telling us the future and it is slightly clearer.
ASP.NET vNext is cloud ready out of the box. What this seems to mean is that you can take a vNext app and run it on a local host, traditional hosting service or the cloud with the system taking care of the code changes necessary. Again it seems to be Roslyn that is doing most of the work recompiling code for each environment in real time so that you can see instant updates in your browser of code changes in Visual Studio.
To achieve this the MVC, Web Pages and WebAPi have been merged to make use of a single programming model. So you were right after all - which ever one you picked was the way of the future. Of course, you could also say that we were all wrong because the fusion isn't quite any of the originals - and certainly it isn't classic ASP.NET.
One of the interesting ideas is that a single app can be run standalone from the command line - i.e. no server - or it can be launched as an app under a server. This is part of the benefit of having WebAPI in the mix. Again the change is just a matter of a configuration switch - the system works out what is needed and re-compiles as required, e.g. when you make a change and hit refresh in the browser.
ASP.NET vNext is promised to run on Mac and Linux with the help of Mono. It is also all being open sourced with the help of the .NET Foundation.
So to summarize Microsoft lists the following plus points for ASP.NET vNext:
Cloud-ready out of the box
A single programming model for Web sites and services
Low-latency developer experience
Make high-performance and high-productivity APIs and patterns available – enable them both to be used and compose together within a single app
Fine-grained control available via command-line tools and standard file formats
Delivered via NuGet
Release as open source via the .NET Foundation
Can run on Mono, on Mac and Linux
How good is this news?
It seems to be good for every one except, of course, the desktop app programmer. Still no news of WPF, Windows Forms, classic ASP.NET or of .NET on the desktop in general, and this is one area where no news isn't good news. Microsoft is embracing .NET but it doesn't include the desktop.
As to vNext - it is too early to tell.
A lot depends on how easy to use it all when we finally get our hands on it.