Old mistakes we keep on fixing

Releasing software publicly is scary, with new features come bugs and errors. Some of these bugs may be unfix-able in practice, and stick around forever.

Today I encountered such a bug with aspell a unix command-line spell checker. I was integrating aspell in with the Kakoune text editor. When I executed the command :spell fr in Kakoune nothing happened. I was expecting the bad words to be highlighted, but none of the glaring mistakes in my prose got highlighted. I then looked at the *debug* buffer to see what was up and I saw this.

Error: The file "..." is not in the proper format. Incompatible hash function.

Luckily it was easy to track down the issue, there’s a page in aspell’s documentation talking about it. Long story short: language spell files built with 32 bits systems aren’t compatible with 64 bits systems. Someone didn’t realize that using the size_t type for an on-disk data structure was a bad idea. Oops.

It’s this type of bug that makes releasing software terrifying. The bug is baked into aspell forever unless someone adds a way to handle both types, and that could be a significant refactoring of an unknown code base. The tragedy of the commons keeps on playing.

Most distributions handle this by making aspell dictionaries architecture specific. I bumped into this bug because I use VoidLinux that handles aspell dictionaries as an architecture independent package. This was fixed already, but I’m convinced I won’t be the last person to work-around this bug.