[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: (rust) Do we always need to package minor versions separately?
From: |
Liliana Marie Prikler |
Subject: |
Re: (rust) Do we always need to package minor versions separately? |
Date: |
Tue, 08 Mar 2022 22:01:43 +0100 |
User-agent: |
Evolution 3.42.1 |
Hi,
Am Dienstag, dem 08.03.2022 um 18:43 +0100 schrieb Maxime Devos:
> Hi guix,
>
> Many rust crates are available in multiple versions in Guix
> (say, rust-wayland-scanner-0.29). The reason is that ((guix)Rust
> Crates):
>
> In the rust ecosystem it is common for multiple incompatible
> versions of a package to be used at any given time, so all package
> definitions should have a versioned suffix. The versioned suffix is
> the left-most non-zero digit (and any leading zeros, of course).
> This follows the “caret” version scheme intended by Cargo. Examples
> ‘rust-clap-2’, ‘rust-rand-0.6’.
>
> I understand the point about version incompatibilities in the land of
> oxides. However, what if a crate is being nice by striving to be
> backwards-compatible, perhaps even using, say, semver, to indicate
> incompatibilities clearly? Is it then still necessary to package the
> different minor versions, or would major versions suffice?
>
> I would hope the latter, but I don't know any rust.
What both you and the manual describe is actually well-defined semver,
which is "required" by Cargo. clap 2.x is supposed to be compatible
with 2.y, y < x or the other way round depending on which direction
you're looking at, but not 1.z. The exception here is 0.whatever,
which according to semver is a wild land in which everything is
permitted. Or in the words of the spec:
> Major version zero (0.y.z) is for initial development. Anything MAY
> change at any time. The public API SHOULD NOT be considered stable.
In practice, we assume 0.y.z be compatible with 0.y.a, a < z or the
other way round depending on which direction you're looking at. I'm
not sure if this is a rust fortification of semver or just Guix
intuition. Another important thing to take away w.r.t. semver here is
> Major version X (X.y.z | X > 0) MUST be incremented if any backwards
> incompatible changes are introduced to the public API. It MAY also
> include minor and patch level changes. Patch and minor versions MUST
> be reset to 0 when major version is incremented.
so you can't drop the rusty-oxide-12 package upon the release of rusty-
oxide-26 when there's still a consumer.
Cheers