I would say that C is comparable to Java in this regard, but Haskell breaks a lot as well. In Haskell, however, the community typically embraces breaking changes by standing up and fixing packages proactively; see, for example, Stackage and how they chase package maintainers once one of the package would break with a certain combination of other packages.