-
-
Notifications
You must be signed in to change notification settings - Fork 12
Description
Context
The conda packages' model inherently was made to distribute C/C++ libraries as a set of headers and dynamic shared objects. A necessary condition for this model to work in practice is to have all the stack's projects' ABI to be respected as an ABI mismatch at runtime can cause a variety of fatal failures for programs (such as missing symbols reported by Python library, crashes, silent errors, etc.).
Major versions of project are expected to change the ABI. Although it is expected that the ABI does not change on patch (or even minor) version for project using semantic versioning 2.0.0, it might be the case in practice. Hence there are no general rules for the compatible version range: this is really is project-dependent. ABI laboratory might give clues about some projects' expected ABI stability.
conda packages solve this problem by exporting runtime requirements to specify the compatibility range for projects' version.
Situation
folly was not designed to be distributed as a shared library, yet it is distributed on conda-forge as such for Unix.
In the past, folly's or one of its dependencies' builds have had ABI mismatch.
Bellow are referenced all the compilers' and dependencies' runtime requirements exports used by folly as of today to check whether its builds are sane.
| Compilers related | Runtime requirements export |
|---|---|
| libgcc-ng | Expected to be stable. |
| _libgcc_mutex | Expected to be stable. |
| llvm-openmp | Expected to be stable. |
| libstdcxx-ng | Expected to be stable. |
| Folly dependency | Runtime requirements export | ABI Laboratory observation |
|---|---|---|
| libjemalloc | max_pin=None |
Change on major version |
| jemalloc | max_pin=None |
Change on major version |
| libboost | max_pin="x.x" |
Change on minor version |
| libboost-headers | max_pin="x.x" |
Change on minor version |
| libzlib | max_pin="x.x" |
Change on minor version; not up to date |
| zstd | max_pin="x.x" |
Change on minor version |
| bzip2 | Default, i.e. max_pin="x" |
None |
| gflags | max_pin="x.x" |
Change on minor version |
| lz4-c | max_pin="x.x" |
Change on minor version |
| glog | max_pin="x.x" |
Change on minor version; not up to date |
| fmt | max_pin="x.x" |
Change on minor version |
| xz | Default, i.e. max_pin="x" |
Stable |
| icu | Default, i.e. max_pin="x" |
None |
| snappy | max_pin="x.x" |
Change on minor version |
| libsodium | max_pin="x.x.x" |
Change on patch version |
| double-conversion | max_pin="x.x" |
Seems stable apart from a change on minor version |
| libevent | max_pin="x.x.x" |
Change on patch version |
| openssl | max_pin="x" |
Change on major version |
| libaio | max_pin="x.x" |
Seems stable |