Why are there two kinds of Universal Windows apps, one for Windows 8 and another for Windows 10?


If you create a new Windows app (as opposed to a Win32 program), you have a few choices. One set of choices is under the Windows Universal node, which lets you create a variety of programs described as Universal Windows. Another set of choices is under the Store Apps, Windows Apps node, which lets you create a variety of programs described as Universal Apps.

Why are there two kinds of Universal apps, and what's the difference, and which one should I be creating?

Confusingly, there has been more than one type of project with the name "universal".

Windows 8 universal projects consist of three sub-projects: One for desktop-specific code, one for phone-specific code, and one for common code. The idea was that you put most of your app in the "common" project, with a small amount of code in the desktop-specific and phone-specific projects. When you built the solution, you got two packages, one for Windows 8 desktop and one for Windows 8 phone. It was universal in the sense that you wrote the code only once, but it still produced two packages that had to be submitted separately. The project is universal but the packages aren't.

Windows 10 universal projects are a single project that produce a single package that runs on both Windows 10 desktop and Windows 10 phone (and any other Windows 10 platforms). Both the project and package are universal.

If you ask for the Windows universal project template, you get a Windows 10 style universal project, which is almost certainly the one you want. If you ask for the Windows 8 universal project template, you get a Windows 8 style universal project, which is not as interesting nowadays.

The Windows 8 folks may have been a bit too ambitious calling their projects "universal", since they weren't actually creating projects that ran on all Windows systems. I mean, it was certainly better than what we had before, so it was "more universal", you might say. But with that name they painted themselves into a corner, because when the Windows 10 Universal app model came on the scene, you had a program that ran on all Windows 10 systems, and you would want to call these things "Universal Apps", except the name was already taken by that other thing that wasn't as universal as the new thing.

Comments (34)
  1. pc says:

    I know it’s cliché, but naming things really is the hardest part of software engineering, by far.

    1. Andrew says:

      A perfect formulation of a problem is already half its solution. –David Hilbert

  2. AJM says:

    For lack of a better spot to post this (comments on your suggestions box post are closed, the contacts link seems to have been disabled, and I can’t find any other way to contact you), are you still taking suggestions for topics?

    Specifically I’m interested in the history of Windows Metafiles. Support in Windows seems a bit inconsistent, would you be interested in writing an article about that?

    1. That’s not specific to Windows Metafile. It is what has happened to every file format that Microsoft has invented or tried to adopt, including Windows Media formats (.wmv, .wma, .asp, .wmx), JPEG XR (.wdp, .hdp, .jxr), SAMI, XPS, Compiled HTML, MHTML and literally every other file format except Microsoft Office’s.

      Microsoft creates file formats and then abandons them (and people who adopted them) completely.

    2. Antonio Rodríguez says:

      AFAIK, WMF was little more than a low-level record of graphics operations, and was tied to the semantics of Win16’s GDI API. Because of that, it didn’t carried very well into Win32, so Microsoft had to create the EMF format, which basically was a version of WMF with different, more modern semantics (maybe more abstract or API independent, too?).

      1. Ryan says:

        Correct, WMF was just a recording of a bunch of 16-bit GDI commands. It didn’t carry into Win32 at all because it used 16-bit values, and Win32 used 32-bit values (plus Win32 added more features to GDI that didn’t exist in 16-bit GDI).

        WMF was used for Office clip-art for many years, as it was resolution independent and looked nice when printed. I think CorelDraw was the main way to create them, and CorelDraw would write them out with a special header to make them work better as clipart (such as a physical size). EMF had this information already, so this header wasn’t needed for them.

        Metafiles were also used a lot with OLE. The metafile was the placeholder format for the embedded data without running the app to draw itself.

        Source – I was an Office developer who worked on fixing clipart metafile rendering issues, and OLE copy/paste bugs (from 1998-2006)

    3. cheong00 says:

      Note only metafiles. I found that animated GIFs created by .NET with System.Drawing based solution will always crash applications that try to load them in WinXP. Have to use Imagick to create older “framerate” based GIF format to make it usable in all systems.

    4. DWalker07 says:

      Since “comments on your suggestions box post are closed, the contacts link seems to have been disabled, and I can’t find any other way to contact you”, the answer to whether Raymond currently wants suggestions topics is “not really”. :-)

      1. AJM says:

        Probably, I figured it was worth a shot, I wasn’t sure if these blog posts just auto-closed comments.

  3. Ray Koopa says:

    Should’ve been called ‘portable’, ‘cross platform’, or ‘shared’, but then those names were taken already by other project types… or marketing happened…

  4. Brian says:

    For some reason, this reminded me of the differences between UUIDs (Universally Unique Identifiers) and GUIDs (Globally Unique Identifiers): https://en.wikipedia.org/wiki/Universally_unique_identifier. Yes, completely different (there is no difference between a GUID and a UUID), but it does indicate that at least some people at Microsoft properly shy away from using “Universal” to describe something.

    1. Joshua says:

      That is an important distinction for a quite unovbious reason: endianness. I can tell from the docs if I need to endian-swap the id or not because MS renamed it when they swapped endian on storage.

    2. DWalker07 says:

      You think these names mean that Globally Unique IDs are unique across the Earth (this globe), and Universally Unique IDs are unique across the (known) universe? Hmmm……

  5. Muzer says:

    Could have called it multiversal ;)

  6. Jacob Weisz says:

    The difference here saved my butt. My Windows Mobile’s Store was broken in a weird way for a while, and I got a Fitbit Ionic… and couldn’t install the app on my phone, rendering it mostly useless as a smartwatch. (Unfortunately, help with Windows Mobile issues is sparse these days.) I ended up downloading the app for desktop… and then copying it over and sideloading it on my phone. Wouldn’t have been possible if the packages were different.

  7. Paul Topping says:

    I object to the use of terms like “universal” to refer to programs that only run on varieties of Windows. Of course, in this post “universal” is always paired with “Windows” but this was not the case everywhere, if I recall. The only truly universal app platform we have now is the web. Unless OS vendors can get together to create a truly universal app platform, everything is rapidly going to the web. Perhaps that is not so bad after all.

    1. Joshua says:

      The OS vendors did. MS broke it. Not that it mattered much, as the universal standard couldn’t do graphics whatsoever.

      1. Antonio Rodríguez says:

        No, Microsoft didn’t break it at all. NT was designed from scratch to be Posix-compliant, so it can run any “universal” Unix application, just by building it with a compiler that targets Win32. And even Windows 9x could run many simple console applications ported from Unix with only minor modifications.

        Back in college, I did a lot of cross-development: writing and testing the code in my Windows NT 4 box at the dorm, and then uploading the source and re-building it at my account on the college’s Solaris server (note the different endianness!). It took a bit of care adhering to the standards, but it usually worked without having to touch a single line of code.

  8. Danny says:

    And since W8 is coming to an end soon, we’ll need to worry no more about it.

    1. Chris Crowther says:

      I’ve always seen more Windows 7 systems than Windows 8 ones anyway.

  9. JAS says:

    The only thing universal is that developers universally avoid the platform because it was the most egregious example of planned obsolescence in the company’s product history. WPF/Silverlight had an epic following that got flushed down the toilet and never returned. Maybe they can flush AI down the toilet too so we can all get back to the basics everyone is actually clamoring for.

    1. ChDF T says:

      If you don’t want to develop a Universal Windows App (the Windows 10 one), you can still use UWP APIs from a classic desktop application (including WPF applications). Raymond published a whole series on how to do that in various languages: https://blogs.msdn.microsoft.com/oldnewthing/20180109-00/?p=97745

    2. Or because almost nobody cares about this UWP at all.

      UWP is simply not exciting. (Wow. I am starting to sound like XPClient!) And Windows 10 Mobile is discontinued, so you pretty much have no Windows universe.

  10. GL says:

    I was about to question the necessity of discussion on Windows 10 Mobile and Windows Phone 8(.1) before I realized this is the Old New Thing, where history is narrated!

  11. Magnus Finbom says:

    Is this really true?? “…..produce a single package that runs on both Windows 10 desktop and Windows 10 phone (and any other Windows 10 platforms)…. ”
    How about LTSC-version of Windows 10?

    1. You also forgot Server Core. Don’t make me bring back the Nitpicker’s Corner.

    2. There is no LTSC version of Windows. There’s an LTSB (Long Term Servicing Build), where updates are periodically offered as an the LTS Channel, but this applies to all of the LTSB builds, so I’m not sure what your point is?

  12. TwelveBaud says:

    Here’s another definition of universal: one .EXE runs on both .NET Framework on desktops and .NET Compact Framework on Windows Mobile 5+6.
    Here’s another definition of universal: one solution with four projects – common, Windows desktop, Xbox 360, common, and XNA assets.
    Here’s another definition of universal: one solution with three projects – common, iPhone, and Android. (Xamarin.)
    Here’s another definition of universal: one application bundle with 68000, PowerPC, x86, and x86-64 binaries inside.

    Those are some pretty narrow universes you guys’ve got…

  13. zakius says:

    Well, UWP is really nice thing and if some day it gets somehow merged with Xamarin (and/or gets Android runtime) it would be interesting laptop and phone platform
    But still it’s really not suited for desktop apps, at least to my knowledge
    I’d love to get some proper messenger, some nice music player, terminal emulator, stuff like that
    But all of these need a good way to close a window without closing a main process and to bind global hotkeys, does UWP provide that or will in the near future?

  14. Azarien says:

    “Windows 10 style universal project, which is almost certainly the one you want” – I would object to that, most people “almost certainly” want good old Win32 programs.

    1. “Which is almost certainly the one you want if you have narrowed it down to these two options.”

  15. MV says:

    Perhaps the windows 10 apps should have been called “Multiversal Apps”, since they run in several universes (PCs, phones, etc).

  16. Scarlet Manuka says:

    UniversalEx

  17. keal says:

    “so it was “more universal”, you might say”

    That brings back memories from long ago when PCs were making their way into that mini/supermini-company I was working for: Whe made a study to determine which of a number of PC clones were “the most 100% compatible with IBM PC”.

Comments are closed.

Skip to main content