Deploying rubin-env 3.0.0

On Wednesday, 2022-03-09, we updated our build infrastructure to use version 3.0.0 of the rubin-env conda-forge metapackage. The w_2022_11 weekly will be the first tagged release to incorporate this change.

This new environment adds the threadpoolctl package as requested in RFC-835 (which was already an indirect dependency in the environment), and it upgrades the C, C++, and Fortran compilers, following conda-forge. In particular, on Linux platforms, gcc 10.3 will now be used.

rubin-env 3.0.0 should be used with all Science Pipelines code on or after w_2022_11. As indicated by its major version number increment, this cannot be used with existing installations of most older versions of the Science Pipelines due to the compiler change (although older versions of the source that built under rubin-env 1.0.0 and 2.0.0 should be able to be compiled against this version of the environment, and there is not yet anything in the source that requires 3.0.0 so it can still be built against 2.0.0). For older code, please use rubin-env 0.7.0 (or 0.8.0 for v23 releases).

The compiler change caused a small change in the C++ binary interface. Due to protection code in pybind11, pybind11-based modules built with the new compiler cannot raise exceptions that are translated into Python by code built with older compilers (in particular pex_exceptions). This means that code built with the new rubin-env cannot be used with binary packages built with the old rubin-env, hence the need for a major version increment.

It’s unfortunate that we’ve had to increment the major version twice in just a few weeks, but this has been forced on us by the underlying ecosystem. We hope that these will be the last for some time.