Upcoming high-impact changes #30634
tgamblin
announced in
Announcements
Replies: 2 comments 1 reply
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This discussion is meant to track upcoming changes to Spack that are likely to impact users. We'll put links to issues here that will either break existing workflows or cause major disruptions when you pull from
develop
.develop
is the main development branch of Spack, but many users like to stay at the bleeding edge, and this is intended to provide advance warning for those users. Note that we still recommend using either a release (more here)or a fixed commit fromdevelop
for production/large site deployments.High-impact changes after
v0.22
Developer Certificate of Origin (DCO): Spack is becoming a Linux Foundation project and as part of this, sometime soon after
v0.22
, we are going to start requiring DCO signoff on Spack commits. DCO was created for the Linux Kernel, and it's used by nearly all Linux Foundation projects. Basically what that means is that your commits need a signoff trailer like this at the end:This is an attestation by you (not your company -- just you) that you have the right to contribute the code you're committing. The full text of the certificate is at developercertificate.org.
In practice, it is fairly simple to comply with this. GitHub has support for automatically signing off commits made in the GitHub web UI, and git commits made on the command line just need an extra
git commit --signoff
orgit commit -s
argument. We will also be addingspackbot
support so that you can@spackbot signoff
if you forget.specs: include source provenance in
spec.json
and package hash #32312: This updates thespec
JSON and will change all new hashes, but doesn't strictly require a version bump.Deprecate Cray platform, based on PE modules #43796: support for
platform=cray
is discontinued, and any mention ofplatform=cray
has been removed from core and packages.High-impact changes for
v0.22
Compilers as dependencies: We are in the process of making compilers proper dependencies in Spack, and a number of changes in
v0.22
will support that effort:%gcc
on Linux, macOS and FreeBSD now depend on a new packagegcc-runtime
, which contains a copy of the shared compiler runtime libraries. This fixes various issues: gcc runtime libraries can be installed and relocated when using a build cache, and when building minimal Spack-generated container images it is no longer necessary to install libgfortran, libgomp etc using the system package manager.intel-oneapi-runtime
, allow injecting virtual dependencies #42062: Packages compiled with%oneapi
now depend on a new packageintel-oneapi-runtime
. The change is similar to gcc-runtime: add separate package for gcc runtime libs #41104, except now the runtimes can provide virtuals and compilers can inject dependencies on virtuals into compiled packages. This allows to model libraries soname compatibility and allows compilers like%oneapi
to provide virtuals likesycl
(that can also be provided by standalone libraries).%gcc
and%oneapi
specs that don't have the corresponding runtime as a dependency.linux
is now based onlibc
, instead of on theos
tag. For each linux machine, allowedlibc
s are detected from the available compilers and used as an implicit external spec. Binaries with a libc having the same name and a version lesser or equal than a detected libc are considered compatible with it. Nothing changes for macOS or Windows.spack external find
. External packages defining compiler paths are effectively used as compilers, andspack external find -t compiler
can be used as a substitute forspack compiler find
.Improve parsing of quoted flags and variants in specs #41529: We are making some breaking changes to how Spack parses specs on the CLI in order to respect shell quoting instead of trying to fight it. If you had to write something like this on the command line (ugh):
That will now result in an error, but you can now write what you probably expected to work in the first place:
Quoted can also now include special characters, so you can supply flags like:
To reduce ambiguity in parsing, we now require that you not put spaces around
=
and==
when for flags or variants.So, this will now result in an error where it wouldn't have before:
python: always use a venv #40773: Spack has unique requirements for Python because it a) installs every package in its own independent directory and b) allows users to register external python installations that may contain their own installed packages. Some distributions like Ubuntu and Debian even change the system Python's
sysconfig
in ways that change the installation layout of Python packages when they are installed (e.g. with the addition of a/local
prefix on Debian or Ubuntu). To isolate Spack from these and other issues, we now insert a smallpython-venv
package in betweenpython
and packages that need to install Python code. This resolves a large number of issues we've had with Python installations.concretizer: update
reuse:
default to True #41302: We made a mistake when we set the default reuse policy to--reuse-deps
instead of--reuse
- we're changing it back for reasons outlined in this PR. You will need to use--reuse-deps
if you want the old behavior.Only reuse externals when configured #41707: This ensures that external entries that make it into the database are only reused if they represent an external still configured in
packages.yaml
. This will ensure that changes to the configured externals are reflected immediately, rather than requiring additional steps to ensure the artifacts are no longer in the database.binary_distribution.py: list parent dirs in binary tarball #41773: Build cache entries created with Spack 0.22 are (forward) incompatible with Spack 0.21.0 (they cause errors on install), but are compatible with Spack 0.21.1. This is due to a backwards compatible change to the structure of the tarballs.
spack load: remove --only argument #42120: removed the
--only
argument, which was deprecated in v0.21Past changes
High-impact changes for v0.21
zlib-api
: usezlib-ng +compat
by default #39358: Possibly high impact, probably not: switching fromzlib
to the much fasterzlib-ng+compat
as our defaultzlib-api
provider. If you notice issues, please comment on the PR.env:
as a top level environment attribute #38199: Usingenv:
as a top-level attribute in environments was deprecated in v0.20, and is removed in this PR.spec
JSON format (and DB format) will be bumped, and older spack versions won't be able to read it if you've installed things with this change. Similarly, older Spack versions will not be able to use newer build caches (this has never been a guaranteed, but older versions could at least read newer caches).cython
orsetuptools
in a DAG)targets
,compilers
andproviders
are only global, preferences forversions
are only local to packages.develop
branch will be tagged as:develop
, while:latest
is reserved for thelatest
release.High-impact changes for v0.20
develop
no longer runs on Python 2.7! It's been a long journey to get to this point, but we finally said goodbye.spack buildcache create
is migrating to use more flexible positional arguments, and use of--directory
.--mirror-url
, and--mirror-name
is deprecated.spack install
less "surprising", when an environment is active. This is not backward compatible for commands likespack install x y z
orspack install --add x y z
(though the previous behavior is hard to justify with some rationale).build_type
variant inCMakePackage
fromRelWithDebInfo
toRelease
. This will provide both performance and space savings. The PR and linked issue include longer discussions of the trade-offs involved.@X.Y
always represents a range@X.Y:X.Y
, no matter the context in which it appears. The new syntax@=X.Y
has been introduced to specify a single version. This change solves issues we had for a long time with selecting a specific version, but is backward incompatible in a few pathological cases.--force
#37438: Spack will not change the previously concretized specs, when new specs are added to an environment already in use and Spack is asked to concretize it. To reconcretize as if there was no previous lockfile, users have to pass the--force
flag explicitly tospack concretize
.High-impact changes for v0.19
concretization
environment key #33774: theconcretization
key in Spack environment, already deprecated in v0.18, will be removed in v0.19spack bootstrap trust/untrust
commands are deprecated as of v0.19, in favor ofspack bootstrap enable/disable
spack install
in an environment will no longer add to thespecs:
list; you'll need to either usespack add <spec>
orspack install --add <spec>
. Similarly,spack uninstall
will not remove specs from your environment'sspecs:
list; you will need to usespack remove
orspack uninstall --remove
. This is to minimize the number of commands that modifyspack.yaml
, and to make it easier to install/uninstall specific specs from environments stored in repositories.LD_LIBRARY_PATH
on package load #28354:spack load
and spack-generated modules will no longer setLD_LIBRARY_PATH
by default. You can get the old behavior in your environment or modules by running:v.0.19
will be deprecating Python 2 support, and Python 2 support will be removed from Spackdevelop
shortly afterv0.19
is released.cflags==-O3
instead ofcflags=-O3
)blacklist
/whitelist
in favor ofinclude
/exclude
#31569: We're changing module configuration syntax slightly. You can usespack config update
to automatically fix your configuration files.package.py
. Backward compatibility with the previous style is kept as much as possible.High-impact changes for v0.18
--reuse
the default concretizer behavior. This will be configurable so you can revert back using Add a top-levelconcretizer
config scope and--fresh
option #28468.--reuse
is default, we will be switching to a "full hash" as the default package id in Spack. Spack has long used a coarser package hash that it probably should, in order to prevent redundant rebuilds. Specifically, we omit build dependencies, the hash ofpackage.py
, and the hashes of resources (tarballs, etc.) from our build identifiers. This was mainly to prevent every update ofcmake
or other build tools from triggering a rebuild of the full stack. With--reuse
as the default, we don't have this concern any more, and we will prioritize detailed provenance for package builds. The full hash will provide this and will also avoid hash collisions that we currently see in CI.pip install
instead ofpython setup.py install
. It also improves bootstrapping of frontend tools (pip/build/installer) and backend tools (setuptools/flit/poetry).Deprecate Python 2 installations #28003: This PR deprecates versions of Python that have reached EOL (Python 2.7-3.5) and packages that require them. Note that this PR does not affect which versions of Python can be used to run Spack, it only affects which versions of Python Spack can install.High-impact changes for v0.17
spec.yaml
format that Spack uses for hashes tospec.json
. We're doing this for performance -- YAML is too slow for large operations, like reindexing the Spack database or creating indexes for large build caches. We expect this to speed up Spack in many ways, but it will cause the hashing algorithm to change.clingo
the default solver, in preparation for 0.17.0. You may see different concretizations for some packages, and the new concretizer will need to be bootstrapped (see https://spack.io/changes-spack-v017/). You can switch back by settingconcretizer: original
inconfig.yaml
, but note that the original concretizer will be deprecated in 0.17 and removed in a later version.develop
-- it will not be supported in v0.18.Beta Was this translation helpful? Give feedback.
All reactions