I see your points, although I don't quite agree. Programmers will continue to do stupid things, even if it hurts. And in these cases, having an "intentionally hard to use" version-statement might increase the overall mess even further. But what do you say about the possibility of uncatched typos? (the "version(linxu) {" example)