In a perfect world one codebase handles all possible needs, so everyone accepts it. In a real world, you cannot expect that all people pull in the same direction. Sooner or later there
will be so much disagreement that groups will naturally go their own ways because there is no way to agree anymore, and the disagreement is too expensive to handle without the split.
Sometimes one group will fail, sometimes the two groups create such different products that two needs are met by the two products that one product could not meet on its own.
I agree that when possible in practice, it is best to avoid splits, so the splits can be seen as an "evil". But I don't think it is reasonable to say they are always a bad thing.