Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Packages with known incompatibilities across different versions #3024

Open
giordano opened this issue May 18, 2021 · 2 comments
Open

Packages with known incompatibilities across different versions #3024

giordano opened this issue May 18, 2021 · 2 comments

Comments

@giordano
Copy link
Member

giordano commented May 18, 2021

  • Bzip2_jll: the v1.0.6 for macOS forces the soname to include the full version, this was fixed for v1.0.8 ([Bzip2] Set the macOS soname to libbz2.1.0.dylib #2981) and v1.0.7
    Dependency("Bzip2_jll"; compat="=1.0.6") # this is bugged, avoid it
    Dependency("Bzip2_jll"; compat="1.0.8") # this is the preferred version going forward
  • boost_jll: the soname of the Linux libraries has the full version number (great idea, isn't it? evidence)
    Dependency("boost_jll"; compat="=1.71.0") # all Julia versions, no new platforms, try to avoid
    Dependency("boost_jll"; compat="=1.76.0") # preferred going forward, Julia v1.6+ only, available for all platforms
  • Cairo_jll: the minimum compatible version for macOS changes at every minor version, but the rest seems to be backward compatible. You need to build against the oldest compatible version:
    Dependency("Cairo_jll"; compat="1.16.0") # all Julia versions, no new platforms, try to avoid
    Dependency("Cairo_jll"; compat="1.16.1") # preferred going forward, Julia v1.6+ only, available for all platforms
  • Expat_jll: I previously reported incompatibilities for this package, but that was inaccurate. I'm not aware of any incompatibilities at the moment, but while we're here it's still good to specify compat bounds for good measure
    Dependency("Expat_jll"; compat="2.2.7"),
    Dependency("Expat_jll"; compat="2.2.10"), # only Julia v1.6+, all platforms
  • FLAC_jll: changes the soversion between minor versions (evidence)
    Dependency("FLAC_jll"; compat="~1.3.4"),
  • Gettext_jll: the soname includes the full version number, so it changes even between patch versions:
    Dependency("Gettext_jll"; compat="=0.20.1") # old version
    Dependency("Gettext_jll"; compat="=0.21.0") # new version with support for new platforms, preferred going forward, julia v1.6+ only
  • Glib_jll: packages built against v2.68.1 can't be loaded when using Glib v2.59.0 (there is an incompatible minimum version for macOS, plus another issue on Windows which I don't understand). I believe Glib is supposed to be backward-compatible, so building against the oldest version possible should be fine, but only v2.68.1 is available for new platforms:
    Dependency("Glib_jll"; compat="2.59.0") # all Julia versions, no new platforms, try to avoid
    Dependency("Glib_jll"; compat="2.68.1") # preferred going forward, Julia v1.6+ only, available for all platforms
  • GMP_jll: packages built against v6.2.1 can't be loaded by old Julia versions which link to v6.1.2. However GMP is backward compatible, so we can use GMP v6.1.2 when building:
    Dependency("GMP_jll"; compat="6.1.2")
  • GSL_jll: breaks the ABI at every minor version. But they don't necessarily remember to change the soversion accordingly:
    Dependency("GSL_jll"; compat="~2.6") # all Julia versions, no new platforms, try to avoid
    Dependency("GSL_jll"; compat="=2.7.1") # corresponds to upstream 2.7, Julia v1.6+ only, available for all platforms, but this has wrong soversion.  Avoid like the plague going forward
    Dependency("GSL_jll"; compat="~2.7.2") # corresponds to upstream 2.7.1, Julia v1.6+ only, available for all platforms, prefer this one or later versions going forward
  • HarfBuzz_jll: the minimum compatible version for macOS changes at every minor version, but the rest seems to be backward compatible. You need to build against the oldest compatible version:
    Dependency("HarfBuzz_jll"; compat="2.6.1") # all Julia versions, no new platforms, try to avoid
    Dependency("HarfBuzz_jll"; compat="2.8.1") # preferred going forward, Julia v1.6+ only, available for all platforms
  • ICU_jll: the soname seems to change every major version (example)
    Dependency("ICU_jll"; compat="65.1")
    Dependency("ICU_jll"; compat="67.1")
    Dependency("ICU_jll"; compat="68.2")
    Dependency("ICU_jll"; compat="69.1") # Julia v1.6+ only, supports experimental platforms
  • libass_jll: the minimum compatible version for macOS changes at every minor version, but the rest seems to be backward compatible. You need to build against the oldest compatible version:
    Dependency("libass_jll"; compat="0.14.0") # all Julia versions, no new platforms, try to avoid
    Dependency("libass_jll"; compat="0.15.1") # preferred going forward, Julia v1.6+ only, available for all platforms
  • Libffi_jll: the soname seems to change every minor version (verified locally by building v3.3.0):
    Dependency("Libffi_jll"; compat="~3.2.1")
    Dependency("Libffi_jll"; compat="~3.2.2") # Should be backward-compatible with 3.2.1, but this version supports experimental supports, Julia v1.6+ only
  • Libgpg_error_jll: the soname for FreeBSD and Windows changed when moving v1.36 -> v1.42 (evidence), but in the future it may be more stable:
    Dependency("Ligpg_error_jll"; compat="=1.36.0") # old version, avoid it in the future
    Dependency("Ligpg_error_jll"; compat="1.42.0") # new version, preferred, Julia v1.6+ only, it *may* be more ABI-stable in the future
  • Libtiff_jll: the minimum compatible version for macOS changes at every minor version. Also, ABI was broken when switched to v4.5
    Dependency("Libtiff_jll"; compat="~4.3, ~4.4")
    Dependency("Libtiff_jll"; compat="~4.5.1")
  • Lua_jll: the name of the library on Windows depends on the major+minor version (evidence):
    Dependency("Lua_jll"; compat="~5.3.6") # all Julia versions, no new platforms, try to avoid
    Dependency("Lua_jll"; compat="~5.4.3") # preferred going forward, Julia v1.6+ only, available for all platforms
  • MbedTLS_jll is a mess. The soversion of at least one of the libraries provided changes between minor versions (example 2.26 -> 2.27), but not always (e.g., nothing changed 2.25 -> 2.26). On top of that, MbedTLS_jll is a Julia dependency, so you can't possibly build a single library that can be loaded by different Julia versions which ship different versions of MbedTLS_jll, as they'd have different ABIs:
    Dependency("MbedTLS_jll"; compat="~2.24") # as an example, for compatibility with Julia v1.6
  • NetCDF_jll: the major soversion changed from 18 to 19 in the 4.7 -> 4.8 transition (evidence). Options
    Dependency("NetCDF_jll"; compat="400.701.400 - 400.799") # corresponding to the 4.7 upstream version
    Dependency("NetCDF_jll"; compat="400.802.101") # corresponding to the 4.8 upstream version, we don't know when they'll break the ABI again
  • Nettle_jll: the soname seems to change every minor version (example)
    Dependency("Nettle_jll"; compat="~3.4.1")
    Dependency("Nettle_jll"; compat="~3.7.2") # only Julia v1.6, all platforms
  • OpenSSL_jll: OpenSSL 3 was recently released, which is ABI breaking. At the moment we only have v1.1.1 (and a fake 1.1.10, which is the same as 1.1.1 but for all platforms):
    Dependency("OpenSSL_jll"; compat="1.1.1") # all Julia versions, no new platforms, try to avoid
    Dependency("OpenSSL_jll"; compat="1.1.10") # preferred going forward, Julia v1.6+ only, available for all platforms
  • Pango_jll: the minimum compatible version for macOS changes at every minor version, but the rest seems to be backward compatible. You need to build against the oldest compatible version:
    Dependency("Pango_jll"; compat="1.42.4") # all Julia versions, no new platforms, try to avoid
    Dependency("Pango_jll"; compat="1.47.0") # preferred going forward, Julia v1.6+ only, available for all platforms
  • x264_jll: the soname changed (evidence)
    Dependency("x264_jll"; compat="=2020.07.14") # all Julia versions, no new platforms, try to avoid
    Dependency("x264_jll"; compat="~2021.05.05") # Julia v1.6+ only, available for all platforms
    Dependency("x264_jll"; compat="10164.0.0") # using new versioning scheme
  • x265_jll: the soname changed (evidence)
    Dependency("x265_jll"; compat="~3.0") # all Julia versions, no new platforms, try to avoid
    Dependency("x265_jll"; compat="~3.5") # Julia v1.6+ only, available for all platforms
    Dependency("x265_jll"; compat="~3.6") # Julia v1.6+ only, available for all platforms
This was referenced Jun 19, 2021
@giordano giordano mentioned this issue Jul 25, 2021
@giordano giordano mentioned this issue Aug 5, 2021
This was referenced Aug 15, 2021
@sjkelly sjkelly mentioned this issue Sep 1, 2021
@giordano giordano mentioned this issue Oct 10, 2021
@giordano giordano mentioned this issue May 23, 2022
@giordano giordano pinned this issue Jun 11, 2022
This was referenced Sep 13, 2022
This was referenced Oct 2, 2022
@evetion
Copy link
Contributor

evetion commented Nov 6, 2024

Not sure if this helps, but I overlooked these packages, while GSL_jll is in the list above.

  • GEOS_jll.jl: soname changes every minor version (without breaking changes in the API)
Dependency("GEOS_jll"; compat="~3.9")  # correctly done since v3.9, currently at v3.13
Dependency("PROJ_jll"; compat="~901.400")  # has minor version in soname
Dependency("PROJ_jll"; compat="~902.500")  # preferred, should be forwards compatible with newer

edit:

  • GDAL_jll.jl: soname changes every minor release (details will follow)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants