At php|works last month, Jay Pipes had the closing keynote where he talked about forks in reference to Open Source Projects… just to (not!) go out on a limb here and say: I agree!
There are a variety of reasons that it makes sense to have – and sometimes actively encourage – forks…
First, it's a way to inject new life into a project. There are many Open Source Projects which are out there with a handful of commits and almost no activity… or worse, there are even more that move quickly for a while and then crumble into nothing. The couple of people that come together to work on the release don't ever pull it together and actually make that release.
Next, it tends to invigorate the team. Having a "new competitor" in the space – especially a "direct" competitor – will tend to motivate and excite people. It has the potential to become an "us vs them" mentality, but it doesn't have to be that. It can be a cooperatively-competitive association where each team is racing towards similar – or even different and diverging – goals.
Next, it allows a different group of people to contribute to a project. Sometimes when the same group of people look at the same set of problems over and over through the months and years, they develop a particular way of thinking. There's nothing wrong with that, it just happens. Basic assumptions will often be questioned and re-evaluated… and new answers might be reached. Having a new perspective on old problems – and insight into potential new ones – is a huge advantage to your team.. whether it's in your code or on the fork.
Finally – and most importantly – another team will bring a new mix of skills and backgrounds to the project. Using that new perspective from above, those team members will use the tricks and tactics they've used on other projects and bring them to yours (or theirs). Thy will likely create solutions and improvements that you never would have come up with on your own.
Of course, forks can be a terrible thing too…