Yggdrasil icon indicating copy to clipboard operation
Yggdrasil copied to clipboard

Packages with known incompatibilities across different versions

Open giordano opened this issue 3 years ago • 1 comments

  • Bzip2_jll: the v1.0.6 for macOS forces the soname to include the full version, this was fixed for v1.0.8 (#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") # preferred going forward, Julia v1.6+ only, available for all platforms
    
  • 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") # preferred going forward, Julia v1.6+ only, available for all platforms
    

giordano avatar May 18 '21 21:05 giordano

@giordano Can you bump bzip2 to 1.0.8 in this note? 1.0.7 isn’t built for all platforms (arm)

jeremiahpslewis avatar Oct 13 '22 22:10 jeremiahpslewis