 <p>Short answer: No, not necessarily. </p> <p>I'm not sure exactly what kind of an answer you are expecting here. The way I see it, the general answer is probably "<em>it depends</em>". </p> <p>If the developers of a system intend parts of their solution to be extendable, then they should design it that way. There must be many valid reasons why someone would <em>not</em> want to make it easy to extend and / or override pars of their code. This could be to avoid breaking comparability with other components, or to avoid exposing either data or implementation details that may change in the future, just to mention a couple of admittedly vague and abstract examples.</p> <p>If in doubt, I'd contact the original developers and ask them about it; they may have a good reason for making the design choices they did. Once you know more about the consequences of changing the architecture, you can consider what to do: If practical, you can submit a proposed change to the system. If on the other hand your requirements are different from those of the original developers, you can branch the system and create your own separate version which you can then give back to the community. That is the beauty of open source software.</p>