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.