Semver specifies to update the major version on a backwards incompatible change. Would modifying the behavior for the hash function of a custom type fall under this category?
I asked a couple friends, and they mostly generally agreed that it shouldn't. For using data structures like a hashmap or hashset, they behavior would be identical (other than potentially slight performance differences depending on the distribution of the hash function). The majority of people would be able to swap the old hash function for the new one and never tell the difference.
The arguments I've heard that it should be a breaking change generally depend on abusing the hash function. For example, in a unit test, hard coding the expected hash of an object. The one valid argument I've heard on this side is with serialization and storing the hash as a string. A user might construct a hashset/hashmap and serialize it to disk, then expect to be able to deserialize. In the case of different hash functions, the deserialized hashmap would be in an invalid state.
I couldn't find much discussions online about this, and I'm curious to hear others' opinion.