In my previous blog I talked about how in Visual Studio 11 we have eliminated the need to convert your Visual Studio 2010 C++ projects in order to adopt the new IDE. The blog also mentioned that you can build your projects using Visual Studio 2010 compiler (tools and libraries) from within Visual Studio 11 using the multi-targeting feature. This means while you adapt to using the new compiler and while your 3rd party vendors provide you with binaries compatible with the Visual Studio 11 compiler (tools and libraries) you can leverage the new Visual Studio 11 IDE without disrupting your ship cycle. Just set the platform toolset property to v100 in the property pages (requires Visual Studio 2010 to be installed side-by-side with Visual Studio 11). Since no upgrade of your project file is necessary you can continue to load the project/solution in Visual Studio 2010 as well.
We have recently received feedback from a number of customers about the inability to build binaries that run on Windows XP with the Beta version of the Visual Studio 11 compiler and libraries. This is because the C++ compiler and libraries in Visual Studio 11 Beta leverages platform capabilities only available in Windows Vista and higher. However, if support for Windows XP targeting is important to you, then you can use Visual Studio 11 Beta’s multi-targeting capability described above in order to employ the Visual Studio 2010 compiler and libraries to build applications and libraries than execute on Windows XP. This enables you to enjoy the new features of the Visual Studio 11 Beta environment without sacrificing backward compatibly in your applications!
"Split the MFC library too, if you think anyone cares about it. I don't. If the new MFC requires Vista+, it won't bother me in the least. But find out from customers who actually use it whether MFC.next needs to load on XP."
Yes, we need MFC too.
Yes, we need both C++ and MFC on XP, with the same runtime/dlls for xp, vista and 7.
If needed you could drop metro support.
Frankly, I don't care if the merge module for VC++ 11 installs different versions of the MFC and CRT on Windows XP vs the rest if that's what it takes to get this major regression bug fixed.
For me, it is enough if the Visual Studio 11 CRT is able to run on XP, because otherwise I can't use the new C++11 features.
MFC in VS11 uses locale names instead of LCID's, but this shouldn't be a valid reason to drop XP support in the CRT. And, to be honest, why couldn't you allow LCID and locale names via a compile time define/switch...
Harry C, it's not MFC that uses locale names, it's the CRT itself.
By the way, my latest blog post happens to coincide with your comment about LCIDs vs locale names. Part 4 of my continuing investigation on what it would take for Microsoft to re-introduce XP targeting to CRT 11 has been published at:
I'm open to suggestions on topics to write about relating to XP targeting at my site: supportxp.com. I'll be continuing this until the point that Microsoft re-introduces XP targeting support to CRT and MFC 11.
@Marcello F - not true about .NET 4.5 supporting XP. .NET 4.5 only supports Windows 7 and above. Not even Vista.
Others who were questioning Amit's assertion of the compiler actually having any effect on XP targeting, and were saying it's 100% in the library, not the compiler, there is one small bit of truth to it. The VC11 linker (which can be used by the command line compiler cl.exe if you indirectly invoke the linker) CANNOT target anything other Vista and above, due to it setting the OSVERSION and SUBSYSTEM to 6.0. You cannot get around this unless you use EDITBIN. See:
So therefore will have to be a change to the VC11 linker to provide the ability to target XP (5.01). As for the default, that's a whole other story. Should someone have to override the default of 6.0 to target XP in command line or project settings, or should it just target XP by default (assuming they fix all the library related issues)?
Would be nice to see some replies from Microsoft on monday. A lot of developers have expressed their opinion, and the collective feedback is that we want XP support while using the new toolset.
@Ted: Ah, I see. Thanks for the info and keep up the good work at supportxp.co
@hmmm: Yes, and it would be even better to know the final decision. Developers have been requesting C++11 with XP targeting support since day 1 of the VS11 beta. Microsoft must already have decided. All this "we can't tell you now" stuff is equal to pissing on us, the developers..
Anntti and Chris, thanks a lot for pointing out that GetProcAddress still works, it is LoadLibrary that doesn't. I should have been more clear on this. I am happy to hear that adding compatibility with XP might not even require splitting the runtime.
Yeah, I hope that someone from Microsoft will maybe read this thread and say to themselves "hmmm, why did we have to lose XP compatibility after all?", and then maybe they will try to raise this issue again with the team, but... the hope is rather weak, quite honestly.
@PleaseFixYourBugs: The folks at Microsoft aren't stupid -- they certainly already know what it would take to add XP support. They were the ones to remove it, after all.
I highly doubt that this was a purely technical decision. Rather, it is quite likely that the VC++ team was ordered/forced to remove XP support. Hopefully the decision will be reversed..
Just a reminder... the UserVoice site is collecting votes this issue at visualstudio.uservoice.com/.../2287078-allow-mfc-11-to-run-in-xp-sp3
+1 for C++11/MFC support on XP/SP3 and W2K3
Multi-targeting? Really? Why would anyone pay money to use old tools with an uglified, monotone, boring UI? Not going to happen.
Seems like we will have to stick to VS2010 for a couple more years. That's what I call a "C++ renaissance".
Thanks again for the comments.
To answer GregM's question about why XP targeting isn't supported in Dev11 Beta, the key factors were a combination of anticipated demand for the feature and engineering cost. On the demand side, I think this thread sufficiently illustrates that we underestimated demand for this capability in the Dev11 compiler and that multi-targeting to the Dev10 compiler would not be an adequate solution for everyone. On the cost side, it is expensive for us to maintain test infrastructure for every supported platform -- given a fixed number of resources, everything we do represents an opportunity cost of not doing something else. If the multi-targeting solution adequately solved the scenario for most customers, then XP targeting in Dev11 implicitly becomes a lower priority investment.
I'm not here to convince anyone that they shouldn't care about XP targeting based on the above logic -- my goal here is only to help folks understand why the team chose to take this approach.
Based on all of the feedback offered on this thread as well as in places like UserVoice and Channel9, it's clear that a large number of VC++ customers would really like to see Dev11 support XP targeting. I deeply appreciate the opportunity for this conversation and the feedback. The ball is now in our court, and we will follow up on this issue in the coming weeks to talk about our plan for Dev11 RTM.
@Steve Teixeira: We eagerly await the decision. Thanks for reaching out to us!
"On the cost side, it is expensive for us to maintain test infrastructure for every supported platform -- given a fixed number of resources, everything we do represents an opportunity cost of not doing something else."
But is "something else" worth doing if a significant number of us won't be able to use them for at least 2 years due to the lack of XP support?
Either way, I'm glad that progress is being made (finally). Hopefully "coming weeks" is soon (and not a week before or even after RTM)..