It's my favorite blog topic:

With version 2.2.5, an era ends. This will be the last version based on the old source tree. Over the last three years, FileZilla has been constantly improved. However, in the past few months development has slowed significantly, mainly due to the fact that it's become quite difficult to add new features to FileZilla. The complexity of FileZilla has grown far far beyond anything then anyone could imagine when the project first started, this also reflects in the source code. That's why I've decided to leave the current source tree behind and start FZ3 from scratch. The new version will contain most if not all features of FileZilla 2.2.5 once done and will be cross-platform.

Refactoring told to shove off and we've written another to throw away.

When/how do you know when it's worth cutting loose a codebase and how to you know to do your best to keep those lessons around? This is even the same hacker, which makes things more confusing. I just don't quite get it.

Apple seems to have gotten away with tossing the baby & bath out and making another, cuter baby in its place. Take their Java virual machine -- it's been written from scratch twice now, apparently. The first break came with MRJ 2.1, and another with the move to OS X. They've also, obviously, started from scratch with OS X, though they did manage to bring along a pretty good OS 9 bridge with them.

What is it that allows Apple to throw away code but not Microsoft, who would apparently be in the best position to take a few years off and leverage their monopoly to keep rivals at bay as they reinvent the wheel?