All software sucks
"And folks, let's be honest. Sturgeon was an optimist. Way more than 90% of code is crap." -- Al viro
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." -- C.A.R. Hoare, The 1980 ACM Turing Award Lecture
"One of my most productive days was throwing away 1000 lines of code." -- Ken Thompson
"..At first I hoped that such a technically unsound project would collapse but I soon realized it was doomed to success. Almost anything in software can be implemented, sold, and even used given enough determination. There is nothing a mere scientist can say that will stand against the flood of a hundred million dollars. But there is one quality that cannot be purchased in this way -and that is reliability. The price of reliability is the pursuit of the utmost simplicity. It is a price which the very rich find most hard to pay." -- C.A.R. Hoare
"It's a curious thing about our industry: not only do we not learn from our mistakes, we also don't learn from our successes." -- Keith Braithwaite
Harmful stuff
This is a work in progress, much is missing.
| Harmful things | Less harmful alternatives |
|---|---|
| SGML, XML, YAML. | JSON, CSV, ndb(6), plain(UTF-8) text. |
| NFS, SMB, AFS, WebDAV. | 9p. |
| C++, Java, Vala. | C, Go, Limbo, Python. |
| pthreads (PoSix threads). | CSP concurrency: Go, libthread, libtask, Limbo, Erlang, Stackless Python, ... |
| Perl, Ruby. | rc, awk. |
| PCRE | Structural Regular Expressions or plain classic/extended regexps (as used in awk, sed, grep, etc.). |
| Bash, tcsh, zsh. | rc, pdksh, ash/dash. |
| GNU Coreutils. | Plan 9 from User Space. |
| GNU info. | Man pages. |
| GCC. | 8c, tcc. |
| glibc. | ucLibc, DietLibc. |
| Glib. | libc (see above), p9p's C libraries. |
| GTK, Qt, VxWindows. | Tk, textual interfaces. |
| Vim, Emacs, nano, Eclipse, ... | Acme, Sam, ed. |
| UTF-16, UTF-32, Latin-1, other encodings. | UTF-8. | .
| iSCSI, FCoE. | AoE (ATA over Ethernet). |
| PAM (Pluggable Authentication Modules). | Factotum. |
| Jabber and XMPP. | IRC (for IM), STOMP (for general distributed messaging). |
| SQL databases. | Tutorial D, pq, BigTable, plain old hierarchical filesystems. |
| Subversion, aka svn. | Git, Mercurial (aka hg); hell, even CVS or plain old tarballs would be better than svn. |
| FreeBSD, NetBSD, Solaris. | OpenBSD. |
| SVG | PS(PostScript) |
| ALSA | OSS4 |
| GPL, LGPL, Apache Software License, MPL, CC. | In order of preference: public domain, ISC, MIT/X, BSD, CC0. |
| head | sed 11q |
Harmful things that are so superfluous and useless that require no alternative:
- Unicode BoM in UTF-8.
- IDN.
- Dynamic linking, in particular in Unix systems.
- GNU Autoconf/automake.
- PoSix locales.
- Adobe Flash.
- GNOME and KDE.
- Boost
Note: At the moment a detailed rationale is not provided for most of this, so figuring out why some things are considered more or less harmful than others is left as an exercise for the reader. Here is a hint: complexity is the bane of all software, simplicity is the most important quality. See also: Worse is Better by Richard Gabriel.