The way you're supposed to form the x.y.z version is like this:
- The first number (x) is the interface version of the library. Whenever you change the public interface, this number goes up.
- The second number (y) is the revision number of the current interface. Whenever you make an internal change without changing the public interface, this number goes up.
- The third number (z) is not a build number, it is the backwards-compatability count. This tells you how many previous interfaces are supported. So for example if interface version 4 is strictly a superset of interfaces 3 and 2, but totally incompatible with 1, then z=2 (4-2 = 2, the lowest interface number supported)
So the x and z numbers are very important for the system to determine if a given app can use a given library, given what the app was compiled against. The y number is mainly for tracking bug fixes.