Posted: June 30, 2011
TenFive Commandments of FOSS
I’ve been using – and, to some degree, developing – open source software for 10+ years now. Most of it was pre-packaged by the maintainers of my distro of choice, but from time to time something either wasn’t available in a repository somewhere or I needed to enable some compile-time feature that wasn’t commonly available. In short, I’ve compiled my fair share of code over the years and several Dos and Don’ts have presented themselves. Note that these are guidelines meant for those of you interested in providing software that other people will actually use. If that’s not a concern for you, feel free to ignore any/all of the below.
Without further ado, I present The
TenFive Commandments of FOSS in (roughly) ascending order of importance:
- Thou shalt have a web presence – If all I can find Googling your project name is a SourceForge download link, I’m not very likely to want to use your software.
- Thou shalt provide screenshots – While it may be true that 67% of all statistics are made up on the spot, it’s a fact that adding screenshots of your software in action will increase adoption rate by 80%. Yes, even if it’s a command-line sorting program with no visible output.
- Thou shalt use GNU autotools – Yes, even if it’s a Java app. None of this “But it was only designed for C programs!” I’ve seen projects developed in many different languages compile and install beautifully using autotools.
- Thou shalt provide documentation – You’d think this would be a given. Apparently not the case. If you can’t spend an hour writing down how to use your software then why should I spend an hour poking at it randomly in a vain attempt to figure it out. …and no, “I commented the source really well!” isn’t sufficient.
- Thou shalt provide a README file – Such a simple, nearly universal thing…and yet I still sometimes see projects that don’t do it. This one isn’t even documentation, which can be painful and tedious to do right. A decent README file can literally take two minutes and make all the difference in the world. Tell me what your software is, why I should use it, who to contact (or where to look for help) if it breaks, and how to compile it (which should just be
./configure; make; make installif you’ve followed Commandment 3 above). That’s all I ask.