Turning the blog around - End of Life issues.

I'd like to turn the blog around again and ask you all a question about end-of-life issues.

And no, it's got nothing to do with Terry Schaivo.

Huge amounts of text have been written about Microsoft's commitment to platform stability.

But platform stability comes with an engineering cost.  It gets expensive maintaining old code - typically it's not written to modern coding standards, the longer that it exists, the more heavily patched it becomes, etc.

For some code that's sufficiently old, the amount of engineering that's needed to move the code to a new platform can become prohibitively expensive (think about what would be involved in porting code originally written for MS-DOS to a 128bit platform).

So for every API, the older it gets, the more the temptation exists to find a way of ending its viable lifetime.

On the other hand, you absolutely can't break applications.  And not just the applications that are commercially available - If a customer's line-of-business application fails because you decided to remove an API, you're going to have to put the API back.

So here's my question: Under what circumstances is it ok to remove an API from the operating system?  Must you carry them on forever?

This isn't just a Microsoft question.  It's a platform engineering problem - if you're committed to a stable platform (in other words, on your platform, you're not going to break existing applications on a new version of the platform), then you're going to have to face these issues.

I have some opinions on this (no, really?) but I want to hear from you folks before I spout off on them.