Description
I would like to request the below be discussed at a meeting, or at least get team feedback before moving forward.
Context
Currently we maintain two branches for libc
: main
, which is intended to be 1.0, and libc-0.2
which is the current crates.io release. PRs are made against either channel (I usually request main
so that always stays the most up to date) then get cherry picked to the other.
Usually this flow works okay, but there is a substantial difference in minimum supported versions: libc-0.2
is tested down to 1.19 and main
is tested with 1.63. This makes some things difficult to keep in sync, e.g. #[repr(align(...))]
and const fn
cannot be used on 0.2. Cleaning these things up in main
isn't even easy because it means cherry picks get conflict prone.
Proposal
I would like to create a new stable release of 0.3 that brings minimum versions closer to what we want for 1.0 and documents these in the README. Closing the gap in supported versions should make it easier to keep the branches in sync and do the desired pre-1.0 refactoring.
In particular, I am interested in the following versions:
- MSRV: 1.63.0, released 2022-08-11 (default on Debian stable, released 2023-06)
- musl: 1.2.3, released 2022-04-07 Rebase of "Upgrade musl supported version to 1.2.3" libc#3791 (supports Debian stable and Alpine stable)
- FreeBSD: unknown, maybe 11 or 12 (up to target maintainers, cc @asomers)
- Emscripten: 3.1.42, released 2023-06 if this seems reasonable to the target maintainers
- ESP-IDF: v5.0, released 2022-02
- Edition: 2021
All of these versions were selected because they allow removing version-specific configuration for those platforms. There might be some other targets that we would like to specify a minimum or tested version for, I'll check with the target maintainers.
Out of these changes, the only one that actually needs a merge before we can release is musl; everything else can just be a documentation change and then clean up the legacy support at some point after the release.
We might be able to do a few other breaking changes if they are small or ready (relevant milestone) but it seems better to keep 0.3 scoped to version changes.
Remaining for 1.0
There are still a handful of things we need to figure out between 0.3 and 1.0:
- How should extra traits be handled Discussion about removing
extra_traits
in 1.0 libc#3880 - Minimum glibc version Minimum Supported glibc version libc#1412
- What exactly should the scope of
libc
be Deprecate all Linux kernel APIs libc#1391
MSRV
#72 covers this ad nauseam and doesn't have a concrete conclusion. That thread has a lot of requests to support Debian stable but not too much for anything older than that, and 1.63 is what main
has been testing on CI anyway. In the interest of avoiding too much of a bikeshed, I would only like to ask if anyone objects to 1.63 as too recent, i.e. that we should be supporting something older than latest Debian.
We can revisit a more official version policy before 1.0.