bacon v3.20.3 indirectly requires Rust 1.82
Hi,
Not really an issue but, while updating the NetBSD package which I will merge tomorrow, I found the following:
Installing bacon v3.20.3 (/usr/pkgsrc/wip/bacon/work/bacon-3.20.3)
Locking 307 packages to latest Rust 1.77 compatible versions
Adding wasip2 v1.0.1+wasi-0.2.4 (requires Rust 1.82.0)
Adding wit-bindgen v0.46.0 (requires Rust 1.82.0)
Finished `release` profile [optimized] target(s) in 1.22s
Although Cargo.toml says 1.77, it seems like 1.82 is actually required.
Thank you for the new release.
EDIT: Forgot to say, NetBSD will be on Rust-1.90 as default until some time after Christmas when Q4 stable branch is supposed to be released. After that we can again update Rust. So, MSRV 1.77 or 1.82 doesn't have a real impact here. Just thought you would like to know.
You appear to be building in an unlocked mode where the Cargo resolver is allowed to resolve the dependencies using the absolute latest ones available that fit the manifest pinning requirements. In the end you are building with some things newer than the minimum required versions. If you build with --locked it builds with what is in the lock file, and the lock file has been generated with an MSRV aware resolver and builds fine with 1.77.
For reproducibility sake I would suggest all distro packages be build with --locked (or even --frozen if your build tooling supports prefetching dependencies), but of course that is up to your distro's guidelines too. I don't know how NetBSD typically looks at that. You are free to build using whatever dependencies satisfy the version pinning and if your compiler is newer that 1.77 you are free to fill it with dependencies that happen to require something newer, but I think the MSRV still stands as valid.
c.f. #407 and #409.
@alerque Thank you for your reply. I understand what you are saying but all our builds are done in --offline mode.
That said and, after reading your comment, that got me thinking. So, I went looking at our wrapper cargo.mk,
As mentioned, I can see it indeed defaults to --offline but, I also see CARGO_ARGS?= build --release ${DEFAULT_CARGO_ARGS}
I've just modified it so it reads CARGO_ARGS?= build --release --frozen ${DEFAULT_CARGO_ARGS} or, CARGO_ARGS?= build --release --locked ${DEFAULT_CARGO_ARGS} but I get the same result as above.
Locking 307 packages to latest Rust 1.77 compatible versions
Adding wasip2 v1.0.1+wasi-0.2.4 (requires Rust 1.82.0)
Adding wit-bindgen v0.46.0 (requires Rust 1.82.0)
Looking at the Cargo.lock in the unpacked release tarball of bacon v3.20.3, I see:
[...]
3074 [[package]]
3075 name = "wasip2"
3076 version = "1.0.1+wasi-0.2.4"
3077 source = "registry+https://github.com/rust-lang/crates.io-index"
3078 checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
3079 dependencies = [
3080 "wit-bindgen",
3081 ]
[...]
3516 [[package]]
3517 name = "wit-bindgen"
3518 version = "0.46.0"
3519 source = "registry+https://github.com/rust-lang/crates.io-index"
3520 checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[...]
i.e. exactly the same versions of these dependencies that have MSRV 1.82.
Fortunately, I always clean my distfiles directory after every build, so it's easy to see:
~> ls | grep wasi
.rw-r--r-- root 125 28 KB Thu Dec 11 07:58:10 2025 wasi-0.11.1+wasi-snapshot-preview1.crate
.rw-r--r-- root 125 129 KB Thu Dec 11 07:58:11 2025 wasip2-1.0.1+wasi-0.2.4.crate
~> ls | grep wit-bindgen
.rw-r--r-- root 125 59 KB Thu Dec 11 07:58:36 2025 wit-bindgen-0.46.0.crate
These were fetched before I actually start the build during what we call The fetch phase. In other words, the locked dependencies already require 1.82, unless I'm missing something.
There's a real problem which can't just be solved by the lock file.
The getrandom crate, which requires rust 1.63 depends on wasip which requires rust 1.82.
wasip2 v1.0.1+wasi-0.2.4
└── getrandom v0.3.4
└── tempfile v3.23.0
├── gix-odb v0.70.0
│ └── gix v0.73.0
│ └── bacon v3.20.3 (/home/dys/dev/bacon)
└── gix-tempfile v18.0.0
├── gix v0.73.0 (*)
├── gix-lock v18.0.0
│ ├── gix v0.73.0 (*)
│ ├── gix-index v0.41.0
│ │ ├── gix v0.73.0 (*)
│ │ └── gix-worktree v0.42.0
│ │ └── gix v0.73.0 (*)
│ ├── gix-ref v0.53.1
│ │ ├── gix v0.73.0 (*)
│ │ ├── gix-config v0.46.0
│ │ │ └── gix v0.73.0 (*)
│ │ ├── gix-discover v0.41.0
│ │ │ └── gix v0.73.0 (*)
│ │ └── gix-protocol v0.51.0
│ │ └── gix v0.73.0 (*)
│ └── gix-shallow v0.5.0
│ ├── gix v0.73.0 (*)
│ └── gix-protocol v0.51.0 (*)
└── gix-ref v0.53.1 (*)
https://crates.io/crates/getrandom/0.3.4/dependencies
@Canop Happy with your answer, thanks!
I'm glad to have verified that we are not downloading extra stuff at build time, as we are not supposed to do that.
Feel free to close this, as said this was not an issue to us to begin with and I'm happy that you pinpointed the exact issue.
So although bacon itself is fine with 1.77, some of it's crate dependencies are not. To me this formally turns bacon's MSRV into 1.82 which, should be fine everywhere these days.
Feel free to close this
No, I'd like the MSRV to be real.
Not sure yet about the best path: update bacon's MSRV or find a way to remove dependencies to unconsistent crates (which isn't easy).
The getrandom crate, which requires rust 1.63 depends on wasip which requires rust 1.82.
Is it possible that the wasip crate is actually incorrectly reporting it's MSRV? I've actually run test builds using Rustc 1.77 and don't seem to have a problem in that scenario. Perhaps the 1.82 requirement is only relevant for features that are not used here?
Not sure. It's quite some work to investigate as it requires to look at older versions, as new versions of getrandom have a MSRV of 1.85.
It's probably related to conditionnally compiled code, and probably code which has about no chance of being compiled for bacon (maybe wasm related).
The difference is in bacon features. The Bacon MSRV is valid for the default feature set. It does not cover all the optional features, specifically the audio feature requires a newer compiler.
None of Bacon v3.17.0, v3.18.0, v3.19.0, or v3.20.1 could be built with Cargo/Rustc 1.77. They all fail for various reasons. By contrast v3.20.3 can be built successfully using default features.
I believe this is a valid approach, many projects include things in optional features that fall outside the project MSRV. A less common approach used by some crates (e.g. snafu) is to default to a higher MSRV and have features for enabling reduced MSRV.
The difference is in bacon features. The Bacon MSRV is valid for the default feature set.
I don't think it's related to bacon features but to features or platforms in some dependencies. getrandom ultimately comes from the gix dependency.
You're right though that the "real" MSRV might not be 1.82 as it's unlikely to be really needed.
I know this is slightly out of topic but, why not just bumping to 1.85 and edition = 2024?
Would this cause trouble on any distro?
If we can get confident that wasip and wit-bindgen are only needed when compiling for wasm, which can't happen, then the real MSRV would still be 1.77
If we can get confident that
wasipandwit-bindgenare only needed when compiling for wasm, which can't happen, then the real MSRV would still be 1.77
Argh ... I've just cleaned my build log, else I could provide a list of everything that was actually built with default features. Would you like me to repeat the build? In the meantime I've just merged the package update.
No need for your log, I think. If somebody has enough time to look at the code asking for wasip and wit-bindgen, that would probably help close the issue. But the issue is probably not severe anyway.
Sometimes scroll back helps, it was still on my terminal ...
===> Building for bacon-3.20.3
Compiling proc-macro2 v1.0.103
Compiling unicode-ident v1.0.22
Compiling quote v1.0.42
Compiling libc v0.2.177
Compiling memchr v2.7.6
Compiling cfg-if v1.0.4
Compiling smallvec v1.15.1
Compiling regex-syntax v0.8.8
Compiling aho-corasick v1.1.4
Compiling parking_lot_core v0.9.12
Compiling syn v2.0.111
Compiling thiserror v2.0.17
Compiling once_cell v1.21.3
Compiling scopeguard v1.2.0
Compiling crossbeam-utils v0.8.21
Compiling stable_deref_trait v1.2.1
Compiling lock_api v0.4.14
Compiling regex-automata v0.4.13
Compiling parking_lot v0.12.5
Compiling bstr v1.12.1
Compiling tinyvec_macros v0.1.1
Compiling tinyvec v1.10.0
Compiling thiserror-impl v2.0.17
Compiling fastrand v2.3.0
Compiling unicode-normalization v0.1.25
Compiling gix-trace v0.1.13
Compiling crossbeam-channel v0.5.15
Compiling gix-utils v0.3.0
Compiling home v0.5.9
Compiling crc32fast v1.5.0
Compiling bitflags v2.10.0
Compiling same-file v1.0.6
Compiling zlib-rs v0.5.2
Compiling gix-validate v0.10.0
Compiling walkdir v2.5.0
Compiling gix-path v0.10.20
Compiling prodash v30.0.1
Compiling typenum v1.19.0
Compiling version_check v0.9.5
Compiling generic-array v0.14.7
Compiling byteorder v1.5.0
Compiling heapless v0.8.0
Compiling hash32 v0.3.1
Compiling libz-rs-sys v0.5.2
Compiling flate2 v1.1.5
Compiling block-buffer v0.10.4
Compiling crypto-common v0.1.7
Compiling gix-features v0.43.1
Compiling digest v0.10.7
Compiling itoa v1.0.15
Compiling cpufeatures v0.2.17
Compiling serde_core v1.0.228
Compiling sha1 v0.10.6
Compiling faster-hex v0.10.0
Compiling rustix v1.1.2
Compiling sha1-checked v0.10.0
Compiling synstructure v0.13.2
Compiling errno v0.3.14
Compiling gix-hash v0.19.0
Compiling winnow v0.7.14
Compiling zerofrom-derive v0.1.6
Compiling allocator-api2 v0.2.21
Compiling jiff v0.2.16
Compiling equivalent v1.0.2
Compiling foldhash v0.1.5
Compiling zerofrom v0.1.5
Compiling hashbrown v0.15.5
Compiling yoke-derive v0.7.5
Compiling zerovec-derive v0.10.3
Compiling gix-hashtable v0.9.0
Compiling yoke v0.7.5
Compiling displaydoc v0.2.5
Compiling memmap2 v0.9.9
Compiling getrandom v0.3.4
Compiling zerovec v0.10.4
Compiling serde v1.0.228
Compiling signal-hook v0.3.18
Compiling serde_derive v1.0.228
Compiling tinystr v0.7.6
Compiling litemap v0.7.4
Compiling icu_locid_transform_data v1.5.1
Compiling writeable v0.5.5
Compiling unicode-segmentation v1.12.0
Compiling convert_case v0.7.1
Compiling icu_locid v1.5.0
Compiling tempfile v3.23.0
Compiling gix-fs v0.16.1
Compiling gix-date v0.10.5
Compiling gix-actor v0.35.4
Compiling gix-object v0.50.2
Compiling icu_provider_macros v1.5.0
Compiling icu_properties_data v1.5.1
Compiling derive_more-impl v2.0.1
Compiling icu_provider v1.5.0
Compiling gix-chunk v0.4.11
Compiling cfg_aliases v0.2.1
Compiling icu_normalizer_data v1.5.1
Compiling log v0.4.28
Compiling icu_locid_transform v1.5.0
Compiling gix-tempfile v18.0.0
Compiling icu_collections v1.5.0
Compiling litrs v1.0.0
Compiling document-features v0.2.12
Compiling icu_properties v1.5.1
Compiling gix-lock v18.0.0
Compiling mio v1.1.0
Compiling signal-hook-registry v1.4.7
Compiling thiserror v1.0.69
Compiling utf8_iter v1.0.4
Compiling utf16_iter v1.0.5
Compiling write16 v1.0.0
Compiling gix-commitgraph v0.29.0
Compiling thiserror-impl v1.0.69
Compiling icu_normalizer v1.5.0
Compiling idna_adapter v1.2.0
Compiling gix-revwalk v0.21.0
Compiling signal-hook-mio v0.2.5
Compiling derive_more v2.0.1
Compiling percent-encoding v2.3.2
Compiling utf8parse v0.2.2
Compiling anstyle-parse v0.2.7
Compiling form_urlencoded v1.2.2
Compiling crossterm v0.29.0
Compiling idna v1.1.0
Compiling nix v0.29.0
Compiling regex v1.12.2
Compiling gix-quote v0.6.0
Compiling gix-sec v0.12.0
Compiling anstyle-query v1.1.5
Compiling colorchoice v1.0.4
Compiling autocfg v1.5.0
Compiling anstyle v1.0.13
Compiling is_terminal_polyfill v1.70.2
Compiling serde_json v1.0.145
Compiling lazy-regex-proc_macros v3.4.2
Compiling anstream v0.6.21
Compiling num-traits v0.2.19
Compiling url v2.5.7
Compiling gix-ref v0.53.1
Compiling gix-glob v0.21.0
Compiling crossbeam-epoch v0.9.18
Compiling strict v0.2.0
Compiling shell-words v1.1.0
Compiling clap_lex v0.7.6
Compiling ryu v1.0.20
Compiling unicode-bom v2.0.3
Compiling heck v0.5.0
Compiling strsim v0.11.1
Compiling clap_derive v4.5.49
Compiling clap_builder v4.5.53
Compiling lazy-regex v3.4.2
Compiling gix-command v0.6.2
Compiling crokey-proc_macros v1.3.0
Compiling crossbeam-deque v0.8.6
Compiling gix-url v0.32.0
Compiling coolor v1.1.0
Compiling gix-traverse v0.47.0
Compiling nix v0.30.1
Compiling gix-packetline v0.19.1
Compiling gix-bitmap v0.2.14
Compiling crossbeam-queue v0.3.12
Compiling filetime v0.2.26
Compiling camino v1.2.1
Compiling bitflags v1.3.2
Compiling clru v0.6.2
Compiling fnv v1.0.7
Compiling ref-cast v1.0.25
Compiling gix-index v0.41.0
Compiling gix-pack v0.60.0
Compiling crokey v1.3.0
Compiling kqueue-sys v1.0.4
Compiling crossbeam v0.8.4
Compiling clap v4.5.53
Compiling gix-transport v0.48.0
Compiling xterm-query v0.5.2
Compiling gix-ignore v0.16.0
Compiling gix-revision v0.35.0
Compiling gix-shallow v0.5.0
Compiling gix-config-value v0.15.1
Compiling maybe-async v0.2.10
Compiling ref-cast-impl v1.0.25
Compiling serde_derive_internals v0.29.1
Compiling minimad v0.14.0
Compiling unicode-width v0.1.14
Compiling paste v1.0.15
Compiling iana-time-zone v0.1.64
Compiling anyhow v1.0.100
Compiling arc-swap v1.7.1
Compiling termimad v0.34.1
Compiling gix-odb v0.70.0
Compiling chrono v0.4.42
Compiling schemars_derive v1.1.0
Compiling gix-protocol v0.51.0
Compiling gix-config v0.46.0
Compiling gix-refspec v0.31.0
Compiling gix-worktree v0.42.0
Compiling terminal-light v1.8.0
Compiling kqueue v1.1.1
Compiling gix-discover v0.41.0
Compiling proc-status v0.1.1
Compiling gix-diff v0.53.0
Compiling cargo-platform v0.1.8
Compiling toml_parser v1.0.4
Compiling semver v1.0.27
Compiling serde_spanned v1.0.3
Compiling toml_datetime v0.7.3
Compiling dirs-sys-next v0.1.2
Compiling dyn-clone v1.0.20
Compiling is_executable v1.0.5
Compiling shlex v1.3.0
Compiling diff v0.1.13
Compiling yansi v1.0.1
Compiling toml_writer v1.0.4
Compiling file-size v1.0.3
Compiling notify-types v2.0.0
Compiling arrayvec v0.7.6
Compiling pretty_assertions v1.4.1
Compiling vte v0.15.0
Compiling notify v8.2.0
Compiling cli-log v2.1.0
Compiling toml v0.9.8
Compiling clap_complete v4.5.61
Compiling schemars v1.1.0
Compiling directories-next v2.0.0
Compiling cargo_metadata v0.19.0
Compiling gix v0.73.0
Compiling ctrlc v3.5.1
Compiling clap-help v1.5.0
Compiling iq v0.4.0
Compiling glob v0.3.3
Compiling rustc-hash v2.1.1
Compiling unicode-width v0.2.2
Compiling bacon v3.20.3 (/usr/pkgsrc/devel/bacon/work/bacon-3.20.3)