I'm the author of a C++ library that is being distributed in multiple Linux packaging distributions. The library includes headers and source; Linux packages distribute it as headers + shared library (.so).
I'm looking for guidelines that would make the life of Linux package maintainers easier.
Things I'm interested in include:
API compatibility (e.g. changing function signatures). Obviously maintaining compatibility across minor releases is crucial. What about major version changes?
Binary compatibility (e.g. changing sizes of externally visible data structures). How important is it to be ABI-compatible across minor releases? Are there any issues with breaking that in major releases?
Build versioning advice. I'm currently using CMake - any specific settings that I should set to maximize the chance that package maintainers can just use my CMakeLists.txt?
If there is anything else that I'm missing I'd be glad to hear about it as well.