How to Make an Open-Source Project Suit Your Needs

To fork or not to fork? How to contribute substantial changes?