Every day, dozens of hackers send us news of their code and hope for a spot in the appindex. Since we know how much our approval can mean, it honestly does hurt us more than it hurts you when we have to frown over a submission and write back, “You know, this really doesn’t fit here…” In today’s editorial, Nathan Hurst, part of Freecode’s Australian crew, explains what goes through our minds and why we sometimes feel we just have to say “no”.
In the course of reading, editing, and approving the endless stream of Freecode that passes our way, we have to reject quite a lot of scripts, small C programs, and PHP classes. While these are clearly useful to someone, we often have the difficult task of rejecting them on the grounds of triviality. In this editorial, I am going to attempt to explain what metric we use for making this decision, some thoughts on what might be done in the future to reduce the need for such screening, and, finally, what to do if your script is rejected.
REXML could not parse this XML/HTML: <p> Every Freecode submission bin warrior quakes at the thought of that one submission each day that sits on the edge between clearly in and clearly out. Sometimes it's a script for automating the ripping of an audio CD; sometimes it's a PHP class to display the current date in Roman numerals. <p> The reason for this fear is not retribution from the offended contributor (although my spam rate increased dramatically after rejecting one person's script for bulk emailing), but rather the fact that we feel that we're sending the message "You are not worthy of contributing to Freecode, and, by association, not worthy of contributing to Free Software". This is probably the worst aspect of the job. Sometimes it's a 10-year-old who has written his first Python program, and sometimes it's a seasoned business programmer who has had her first try at Web programming. In any case, we are going to hurt their feelings by rejecting their work. <p> <h1>How do we decide what is trivial?</h1> <p> Well, there are 3 categories of triviality that programs tend to fall into: <p> <h2>1. It does something that's obvious to a programmer who knows the language.</h2> <p> A BASH script which performs a command on each of the files in a directory might seem useful to someone who has just learned BASH, but any seasoned BASHer would have no hesitation in writing <p> <pre> # for i in /usr/* # do # command $i # done </pre> <p> directly on the commandline. Another common example of this is a PHP script that formats numbers. <h2>2. It reimplements an existing tool without any convincing advantage.</h2> <p> A C program which is equivalent to <code>tr</code>, while an interesting exercise, shouldn't go on Freecode unless it can do something that tr doesn't or outperforms tr by a significant margin. The older an existing tool is, the harder it is to accept a new version. In this case, we first ask authors if they can clearly explain the advantages and that they try to merge their enhancements into the existing code. We only accept the code if they have made an effort to try merging or can give convincing reasons for the two to remain separated. <p> Remember: the reason for this is not that we are tainted by the power of the delete button (well, usually not) and not because we are anti-freedom of speech (or software or furniture porn), but because the cost of introducing a new tool in the place of a well-loved one is very high. Just think of the cost of having to learn to use <code>less</code> after using <code>more</code> for many years. Unless there is a significant advantage to the new tool, it won't be used. <h2>3. It proves a point but doesn't provide a use.</h2> <p> This category includes programs which attack a specific version of a program (which really belongs on bugtraq) and programs written in obscure languages without an advantage over existing programs (this is related to the previous point; a program written in another language which outperforms an existing tool might be reasonable). <p> We have received numerous exploits for programs such as Sendmail, Apache, and wuftp. Once a security hole has been identified, these programs should be sent first to the author, and then to bugtraq (if the author doesn't provide a fix in a reasonable time). Freecode is about constructive code, not destructive code. <p> Occasionally, we get programs which can be reformulated into a much smaller program in a more appropriate language. One such example might be a 300-line C program which is functionally equivalent to a 10-line Perl program. Again, unless there is an advantage, we would consider this too trivial. Some good advantages include small memory footprint (not requiring an interpreter), significantly higher performance, ease of maintenance, or guaranteed realtime execution. <h1>What should be done</h1> In the future, there should be no reason for the editors to reject software, instead letting the community decide. To do this, there needs to be some work done on more powerful expression of software's capability, on better distributed merit assessment, and on improving the search engine. <p> Some work has been done in academic circles on program classification, but automated classification is probably AI-complete (and hence just as subjective as the existing system). Another approach would be to select trustworthy leaders for categories of software to write comparative reviews about programs' strengths and weaknesses and provide that information along with searches. <p> Distributed merit assessment could be performed in a style similar to Advogato, but the number of dimensions of specialty would require significant changes. While Advogato measures "guruness", a software repository would require, for example, "PHP guruness" or "serial programming guruness", and there are an infinity of skills between any such categories. <p> scoop is putting a lot of work into Freecode's search engine, and recent changes have certainly been a big improvement (especially boolean operators and license exclusion), but an experienced Free Software user will still have to read around to find the right questions to ask to find software. Perhaps a Q and A forum for software solutions might work. <p> Although editors rejecting software is perhaps not an ideal solution to this problem, it is the best solution we have come up with. If we allowed all software to enter the database, Freecode would quickly fill up with troll software (there to elicit a response rather than fill a need), once-off programs (that were written for a job and should have been left there), and script kiddie noise that would make searching for useful tools well nigh impossible. <p> If your program gets rejected as too trivial, don't despair. Often, it is a matter of rewriting the description and homepage more precisely, and sometimes it is a matter of distilling the problem you are trying to solve and writing a more general solution. In other cases, you may find that your code can be combined with existing code to produce a better program for everyone, or that an existing tool fills your own task better than your original code. <p> <hr width="60%" align="center" /> <p> <font size="-1"> Besides being half the graveyard shift operator for Freecode, Nathan is a PhD candidate researching constraint system applications at Monash University (Australia). His other main interests are mathematics, gardening, photography, and computer-environment interfaces. He enjoys playing piano with his small jazz band, Desafinado. His homepage is at <a href="http://www.csse.monash.edu.au/~njh/">http://www.csse.monash.edu.au/~njh/</a> and he can be contacted at <a href="mailto:firstname.lastname@example.org">email@example.com</a> . </font> <p> <hr width="60%" align="center" /> <p> <h1>T-Shirts and Fame!</h1> We're eager to find people interested in writing editorials on software-related topics. We're flexible on length, style, and topic, so long as you know what you're talking about and back up your opinions with facts. Anyone who writes an editorial gets a Freecode t-shirt from <a href="http://www.thinkgeek.com/">ThinkGeek</a> in addition to 15 minutes of fame. If you think you'd like to try your hand at it, let <a href="mailto:firstname.lastname@example.org">email@example.com</a> know what you'd like to write about.