How Modifiable is Open Source Software?
Several times when trying to modify open-source software (eg. gnu tar), I’ve found that some changes “go with the grain of the design ” (woodworking metaphor) and are easy to make, whereas other changes “cut across the grain” and are nearly impossible. In one case I gave up trying to add a feature (per-volume checksums) to gnu tar and wrote a simple filesystem traverser and multi-volume packer program (called tint). Why was it so hard? Because multi-volume support was added late to gnu tar, and was bodged in about 3 levels deep inside the “append some bytes to the tarball” function, and I was simply unable after extensive code-reading and grepping to locate clearly defined “start new volume” and “finish volume” functionality inside the code.
Of course, this is probably just me not being smart enough. The “start” and “finish” volume functionality must have been in the code somewhere, I just couldn’t find it.
But I’ve often wondered how general this phenomenon is, and whether this casts any doubt on the “given enough eyeballs, all bugs are shallow” concept that Eric Raymond coined (see http://en.wikipedia.org/wiki/Eric_S._Raymond) a few years back.