apache / arrow

Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing
https://arrow.apache.org/
Apache License 2.0
13.7k stars 3.34k forks source link

[C++][Docs] Document our ABI stability policy #41707

Open jorisvandenbossche opened 2 weeks ago

jorisvandenbossche commented 2 weeks ago

With the 16.1.0 release, there have been a few issues related to whether this minor / feature release is expected to be ABI stable or expected to have bumped the so version.:

Our release scripts do bump the so version for minor releases, as has been discussed and implemented around the time of the first 1.0.0 release (https://github.com/apache/arrow/pull/4801, mailing list thread).

However, we don't document this policy anywhere AFAIK (and there was clearly also confusion about this among the committers as well). We should document this in the C++ docs somewhere, that the so version is bumped for every major and minor version, and thus consequently that bug-fix releases are expected to be ABI stable.

vyasr commented 1 week ago

This will be review for most people discussing here, but just wanted to summarize explicitly to make sure we're clear and all on the same page:

Status quo

Conservative solution

Compromise solution

Desired state

Summary

If minor or patch releases can break ABI, then the SOVERSION must reflect that so that libraries built against libarrow have the appropriate requirements baked into the executable (e.g. DT_NEEDED entries in ELF files). Downstream of the library, packaging metadata (in particular, conda metadata as is being discussed in https://github.com/conda-forge/arrow-cpp-feedstock/pull/1409) must account for this by setting runtime dependencies of dependents of libarrow to account for the right version of libarrow at runtime. Making a decision on https://github.com/apache/arrow/issues/41707 (i.e. clarifying the intended stability promises) is the first thing to be done, then we can work on updating packaging files.