Often I hear open-source opponents say that having access to the source is ridiculous anyway since nobody will wade through a pile of unknown sources to try hunting down bugs or to change certain behaviour.
True, it is very intimidating to just hunt aimlessly in hundreds of files, but it doesn't have to be that way! Since quite a while I've taken the habit to use Codeguide's excellent back-in-time debugger to start at a concerned unit test in my application and simply follow the execution until something appears in the third-party sources that seems related to the change that I want to make or the bug that I want to fix. It prevents me from having to understand the whole architecture of the open-source application that I'm hacking.
When I performed the modification and recompiled, I simply re-run the unit test and see if the required behaviour has been obtained. If this is the case it's only a matter of running the whole testsuite and making sure no unwanted side-effects have occurred. This approach has allowed me to fix a common (also here) McKoi SQL problem with sequences in not even 2 hours.
These things make me love open-source.