How are we going to address the binary-compatibility issue? I think that this kind of library must be binary-compatible along wide version ranges to ease distribution maintainers and third-party client developer's life.
The problem is that as all structures are defined in the public header files, we can't assure that the compiler will generate binary compatible code or that the library clients will make a binary-compatible use of it. I am not sure what you mean with binary compatible now. Binary compatibility is between the program and the library, the compiler is not involved at all. It is when your program expects a int, but the library upgrade its interface to using a float. As long as the compiler and linker can talk to each other, it does not matter what you put into a header or a library. What matters is what symbols the binary you run uses, and how they correspond to the symbols in a library. Binary compatibility can be solved using using linker scripts, see `(ld) VERSION' for details. So I am quite curious what you mean with binary compatibility, it does not correspond to what is generally meant with that word.
