Windows 8 and the Registry

During an audience Q & A on the Windows Weekly podcast on Friday, someone asked me about Windows 8 and the Registry, and why Microsoft didn't simply get rid of the Registry in this release. I explained that Microsoft couldn't get rid of the Registry because it was required by "legacy" Windows applications--i.e. every single Windows application written to date--and that perhaps the Registry could simply be de-emphasized over time as new, self-contained Metro-style apps appeared and replaced our previous applications. The theory here being that Metro-style apps were truly "self-contained," or application packages that exist in isolation from each other, both in memory while running and on the file system itself.

This would be a wonderful future world if it were true. Sadly, it is not.

Tipped off by Gavin R. via email, I watched the BUILD session Windows Runtime internals: understanding "Hello World" today, and if you're interested in this kind of thing I recommend you do so as well. In it, Microsoft's Matt Merry explains that, sadly, the Registry isn't just alive and well in Windows 8; it's still a core technology behind Windows 8 and its new, Metro-style apps.

Cue overly-loud sighing sounds.

"Probably not a surprise to you, but we store [app] registrations in this thing called the Registry," he says at about the 8:50 mark of this talk. He then demonstrates where you can go to find Windows 8 app registrations in the Registry: In HKEY_CURRENT_USER, since as with legacy applications, Metro-style apps are installed per-user. If you're curious exactly where these things are, they're in:

HKEY_CURRENT_USER\Software\Classes

But it's not just these new apps that use the Registry. Everything new in Windows 8 uses the Registry. This includes the OS itself, and new OS features like contracts. As Merry notes, "There are two registrations for [any] app. There is an extension registration and there is a class registration. Apps implement contracts: The search contract, the share contract, the PlayTo contract. Those contract registrations are extension registrations to the operating system. And believe it or not, when you click on the tile for an app, that's just another contract activation. That's the Windows.Launch contract."

You can find a list of Windows 8 contracts in HKEY_CURRENT_USER\Software\Classes\Extensions\ContractId. These include: Background Tasks, File, File Picker, Launch, Protocol, Search, and Share.

Expanding the Windows.Launch key, and then PackageId, Merry uncovers a slew of messy keys representing the Metro-style apps installed on his Developer Preview PC. And it's a disaster, just like in today's Windows versions.

This says to me that true drag and drop install and uninstall will not be possible in Windows 8, as it is in Mac OS X. I know that install/uninstall is not difficult, and in fact one might argue that drag and drop makes no sense in an OS that is deemphasizing the file system anyway. Fair enough. But true app isolation, to me, means that these things are in fact self-contained. And that doesn't appear to be the case.

I could go on, but you get the idea: For all the newness of the Windows 8 runtime engine, WinRT, and the new Metro-style apps, Windows 8 still very much uses and relies on a legacy construct, the Registry, which shows no signs of being obsoleted anytime soon. (And there's a huge emphasis on Explorer.exe in this talk as well, which I find odd given its supposed retirement as the shell in Windows 8.) I'm not a blind hater of the Registry like some people--many of whom expected to see Microsoft move to self-contained XML files for this kind of thing. And while I expect that Microsoft will someday write a very long blog post explaining why using the Registry isn't just OK but preferable, I am surprised by this information. Clearly it requires some research.