Universal apps are part of Microsoft's "One Windows" strategy. A universal app sounds as if it might be what we are all looking for. Write once run anywhere - well as long as it's Windows. Not quite.
You have to hand it to Microsoft - the idea of One Windows is a good one. Why have two, or three operating systems when one will do. But you have to remember that it is Microsoft that made the crazy move of splitting things up in the first place. In fact, just at the point where it managed to get rid of the old DOS-based Windows, yes non-server Windows used to run on top of DOS, and produced a unified code base, it went and blew it by creating Windows 8 and Windows Phone 8. Suddenly there were three OSs.
You can argue that Windows Phone 8 and Windows 8 share the same core OS, but actually producing apps for them was a separate process.
This wasn't technically necessary, and seems to have been the result of some sort of power struggle and power play within Microsoft, but we will probably never know the details.
After splitting the OS and making us write code for Windows Desktop, Windows RT and Windows Phone, the logic of getting it all back together seems to have found a champion inside Microsoft and it is moving to fix the mess it needlessly created.
The unification in question, however, is only between WinRT (aka App Store apps or Modern apps) and Windows Phone 8.1.
Visual Studio 2013 Update 2 RC was announced at BUILD and among other things it introduces the idea of a Universal App which runs on Phones, Tablets and PCs - but not desktop Windows which is still an orphan.
"Developers who have built apps for Windows 8.1 will find it fairly easy to reuse their work and bring tailored experiences to Windows Phone 8.1. Windows Phone 8 developers can use the same code, and also access new features, when they develop for Windows Phone 8.1."
The important words are "fairly easy" and "reuse".
Clearly this isn't one codebase fits all.
It seems that what we are being encouraged to do is use Visual Studio to add solution nodes that correspond to the alternative platforms. For example, you develop an app for WinRT and add a solution node for Windows Phone 8. You keep code that is common to both solutions in one place and the custom code needed for each platform separate in their own solution nodes.
So you can use the code that works on both and still write custom code.
This doesn't sound much like a Universal App to me. It seems more like versioning, and you could even argue that Android does it better and handles bigger problems than the ones Microsoft's self-inflicted split created.
However, if it's the cash register you have in mind, then perhaps we do have Universal Apps. Microsoft is now letting you sell apps for each platform as if they were a single app. It also allows you to consolidate your developer accounts and registration. You build your app using the multitarget project structure and Microsoft will allow you to sell it as a single app to WinRT or phone users. You can also choose to charge per app or per device. That is, if you charge per app then the user can run it on multiple devices.
The store has also been improved in other ways - a changed pricing structure, you can reply to poor user ratings, you can buy advertising for your app in other apps and the advertising has rich media support added.
Perhaps the biggest change is the promise to deal with certifying Windows Phone apps in 2 to 4 hours - compared to the 2.5 days it currently takes. Great if you get certified in the time, but possibly not so great if it speeds the rejection process and you have spend more time convincing people that your app is in fact OK.
Is this all good news?
Well Microsoft manages to present the news in the best possible light - and why not - but Universal App this isn't.
While Microsoft tinkers with the store agreements and pricing structure, the desktop developer is passed over for yet another year.
If you are looking for a universal app, then why not write a Windows Form app? It runs on Windows XP, Vista, 7, 8, 8.1 and all the Windows Servers and usually without a line of code needing to be changed.