Two versions of a library are said to be binary compatible if you can swap one for the other without recompiling.
Let’s imagine a Foo library such that its 1.0.0 and 1.1.0 versions are binary incompatible (even though they are source compatible). If you have three projects such that:
A depends on Foo 1.0.0B depends on Foo 1.1.0C depends on A and BWhoever maintains C will find himself dealing with some very weird runtime errors that might be a bit a nightmare to work out - that person might not even know that Foo exists, let alone that it’s in C’s dependencies.
It’s best to strive for binary compatibility for this reason. Tools such as MiMa have been created to help library author with this task.