IMHO the problem is not that developers don't want to rewrite their programs, it's that they don't want to maintain them, and don't want to learn.
There's no problem with letting old software stop running at some point, provided said period is long enough. The problem with Windows and its back-compat is that it supports more than legacy apps - many developers release brand new applications that still rely on long-deprecated API and technologies. This complicates back-compatibility, since removing API will now kill new apps instead of just the decade-old ones it's meant to target.
Developers need to get a lot less lazy - if the API says "deprecated", do NOT use it. Do not use undocumented calls... If people started programming instead of layering on hacks, this wouldn't be a large problem.
simple solution: microsoft releases as scan utility that counts the number of unique deprecated calls. The higher the count, the more costly the software maintenance, and the less preferable it is. so, all companies can independently evaluate a piece of software and developers can't hide their shoddiness.
Companies often do - I've worked for shops that knew a rewrite was a good idea, and that hacking layers of old API onto their product was a bad idea in the long run.
But management isn't always focused on the long run.
There's no problem with letting old software stop running at some point, provided said period is long enough. The problem with Windows and its back-compat is that it supports more than legacy apps - many developers release brand new applications that still rely on long-deprecated API and technologies. This complicates back-compatibility, since removing API will now kill new apps instead of just the decade-old ones it's meant to target.
Developers need to get a lot less lazy - if the API says "deprecated", do NOT use it. Do not use undocumented calls... If people started programming instead of layering on hacks, this wouldn't be a large problem.