It’s interesting to look at some of the larger forks.
GCC and EGCS was probably the fork which affected the most people. This was a fork to change the development model of GCC to expand the pool of developers and encourage more involvement. The fork was run with an intent to merge it back to the main project when feasible, and as it happened, the forks rejoined and egcs became the next version of GCC, and the development model has stayed open and prolific.
X has a long history of forks like this. XFree86 was a fork of mainline X focusing attention on making it work well on x86 systems. Eventually, XFree86 was doing so well that new development predominately happened there and might be ported back to the mainline, but XFree86 was the proving ground where exciting new things were happening, and eventually became the reference implementation for the X Window System and was sponsored into X.org. Later, licensing debates and disagreements over the development model led X.org to fork XFree86 again, and x.org has become the reference implementation and is again more vibrant and lively than XFree86 had been in the later years.
Emacs and XEmacs, for instance, forked in 1992, making it the largest and longest lived fork I’m aware of. In this case, both have proved to be viable, and the competition was, in my opinion, useful. There was a bunch of experimentation on both sides, and features commonly moved back and forth. Merging the two code bases back in has not happened, because of differing design philosophies between the two forks and because the FSF insists on copyright assignments or licensing for any code it accepts into the project, and retroactively contacting all those who contributed to XEmacs is nigh impossible. In the past, it seemed XEmacs was the more vibrant, featureful, and popular implementation, but at this point it seems that Emacs has taken its place. Perhaps in the future we’ll see one take over.
My last example is TeX. It’s spawned a ton of different forks, from minor forks for specific operating systems, more major ones which became commercial products, to larger forks like PDFTeX and e-TeX. This one interest me because temporary forking has become the way TeX evolves. The culture has been one that highly emphasizes compatibility, and we’ve seen forks appear (while making it easy for users to keep their documents compatible with the mainline), experiment on features, and eventually forks merge into semi-official mainline implementations. For example, I think the most commonly used tex executable now installed combines the e-TeX and PDFTeX extensions.
In many ways, I think that forking is an essential part of the open source lifecycle, which helps breathe new life into projects if they have become moribund for some reason. I can’t think of any forks that have affected me that have really hurt the software… Emacs/XEmacs is probably the closest since it was a long running fork that caused a lot of extra work by developers to keep compatible, but I think Emacs was essential in pushing Emacs to keep evolving.