An interesting (but unfortunate) situation with many softwares for Windows has come to my attention recently – a lack of control over development environments and packaging kits…
There is still a lot of independant software out there that claims quite proudly to eg: “run on Windows XP, Vista, 7, 8 and 10”. Unfortunately, much of this software will not always run on XP despite the claim.
The Mode of Failure
On a fully-patched XP (with latest service-pack and all updates), running on a 1GHz Pentium-III processor, quite a bit of said software won’t even install – the setup program triggers an invalid-opcode exception (ie: an illegal instruction fault). In other cases, software that uses the good old flat-file SQLcompact database can’t run, because the SQLcompact database-creation statement triggers an invalid-opcode exception thus fails to initialise the database that the software needs.
I have tried this on several Pentium-III systems, from slimline laptops through desktop systems, without any change to the result.
When running fully-patched XP (with latest service-pack, etc, etc) on a Pentium-4, Athlon-64, or Transmeta Efficeon processor, the particular softwares concerned install and run perfectly.
The problem is that the software (its’ installer or the installed program itself) uses SSE2 instructions, which are only available on Pentium-4, Athlon-64 and later processors. This is in spite of two significant facts:
(1) Windows XP is officially supported on Pentium-II (no SSE at all) and Pentium-III (has SSE but not SSE2) processors.
(2) Why on earth would a software installer want to use SSE2 instructions anyway? Answer: it wouldn’t want to, but much of it accidentally does so.
It seems that many of these software packages are built using third-party “toolkits” (libraries of utility functions etc), that have themselves recently been built using updated development environments (example: Visual Studio 2010 versus Visual Studio 2005) – using the “default optimised” target-CPU settings.
Unfortunately, many of these development environments default to enabling SSE2 instructions, thus often making the built software unable to run on Pentium-II, Pentium-III, AMD K6-2, AMD Athlon (original version), et al, et al – any processor not providing SSE2 instructions, even if running Windows XP.
Alas, this kind of thing (development environments changing their “default target” settings when upgraded) is often not handled, at all, by many software developers/packagers: “it builds OK and runs on my desktop system, so it must be alright” – actually no, you need to think about (1) your claims for the software and (2) your desired target user(s).
This is a real shame, as the fix is often particularly straightforward: explicitly configure your development environment/compiler, for the projects concerned, to target the actual targets you want to support – don’t just let it assume whatever funky defaults it has this year.
Beware: your upgraded development/build tools may be cutting your prospective customers off from you, without you even realising it!