The altruistic open source software developer has a different approach. He releases his software's source code, and final product often and early. In this manner, bugs are detected before the software product is released for general use.
The open source developer is constantly requesting feedback from users and programmers. By releasing the source code before the product is complete, allows for a positive feedback cycle. If the critic sees that his changes were incorporated into the product, then he would continue to use and even contribute features to the product. Otherwise the critic can branch and start his own software product. This branched product may be similar to the original, but incorporates the changes that he wants.
Consider the case between Emacs, and XEmacs. Emacs is a UNIX text editor. It's a feature rich software product. One day, there was a disagreement between the developers of this open source project, as to what features ought be supported. Now we have two competent software packages which concentrate on two very different environments: the console (or text based environment) and the graphical user interface (or a windowing environment.)