Side by Side by Side by Side

We just had a beautiful spring weekend here in the Seattle area. I spent much of the weekend around stately Sacks Mansion (ha!) pulling weeds, cutting grass, and thinking about the Windows SDK's side by side story. What can I say; I can't help but to obsess about work. And besides, I had to think about something pleasant to take away my frustration with all the dandelions growing in my grass. (BTW, if anyone knows any organic ways to kill dandelions, can you please let me know? We have cats that like to wander the yard, so I don't want to use any sort of poison for the weeds, but on the other hand the dandelions seem to be taking over my whole lawn. Since we moved into our house five years ago, it seems like this problem has just gotten worse and worse.)

But I digress. I'm here to talk about how different versions of the Windows SDK interact with each other. It's always been the case that different flavors of the SDK live side-by-side with each other. (I'm going to use the term SxS for side-by-side from now on) The PSDK is SxS with the Windows Server 2003 R2 SDK is SxS with the Windows SDK for Windows Vista. However, with that latter release we moved to a different system. You're only allowed to either the Windows SDK for Windows Vista installed, or the Update to that product, or the upcoming Japanese version of that product. That makes sense for us as producers of the SDK - it keeps people from messing up their system, it prevents us from having to formally spin out new builds of those products, it provides a clear and straightforward way of managing any user issues. But it might not make sense for users. Why shouldn't you have multiple SDKs on disk? It's your disk, and if there's sufficient space for all of them, why not have them?

The model of allowing multiple copies of similar content on disk is the model that DirectX follows. They produce their SDK on a very frequent basis, and allow users to have multiple copies of the SDK installed at the same time. Now DirectX as a platform is very different from the .NET Framework and Windows as a platform, but there's still a bit of common ground there.

Moving forward we are going to be striving to produce SDKs that install more SxS with each other. We're talking about the best ways to implement this, and I'd love to get user feedback on the best way to produce content SxS with each other. We have many open issues that I need to look into (and which I'll post about in the future), such as:

  • How does this interact with Visual Studio?
  • Is it better or worse for users if headers & libs are SxS?
  • How do we manage versioning of tools that are SxS?
  • Does it make sense for docs to not be SxS because they are cumulative?
  • What sorts of dialogues should be in the Setup to let users know what's happening on their machine?

Please pipe in with your opinions on this!