Skip to content

[DISCUSSION] Define a MSRV (Minimum Supported Rust Version) policy #9082

@alamb

Description

@alamb

Is your feature request related to a problem or challenge?

As crates that DataFusion depends on release new versions, sometimes they require newer versions of Rust than the minimum supported by DataFusion. This means we can't update to those newer libraries. Recent examples:

However, we have no "MSRV" policy that says when we should update the MSRV so it isn't clear when we should increase the version, in issues like #8997

We currently have a MSRV of 1.70 which seems to have been released about 6 months ago: https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1700-2023-06-01 and we are starting to hit dependencies that require new versions

Background

DataFusion now has a minimum supported rust version that we test with a CI run: https://github.com/apache/arrow-datafusion/blob/15f59d9861082a4d5d39bddce63d81cc7b9fb299/.github/workflows/rust.yml#L496

And the minimum supported rust version is defined in Cargo.toml https://github.com/apache/arrow-datafusion/blob/15f59d9861082a4d5d39bddce63d81cc7b9fb299/Cargo.toml#L31

And we document what we test: https://github.com/apache/arrow-datafusion?tab=readme-ov-file#rust-version-compatibility

🎉

Describe the solution you'd like

I propose we adopt a policy of "last two stable version of Rust" which will result in DataFusion being close to but not quite bleeding edge and compatible with most of the rest of the crate ecosystem

This would result in DataFusion upgrading the MSRV roughly every 6 weeks, given the most recent release history of Rust
https://github.com/rust-lang/rust/blob/master/RELEASES.md

Describe alternatives you've considered

We could also adopt a policy like "Stable version of rust that is at most 3 months old" (or 6 months) (edited: previously this said "at least 3 months")

So for example, a 6 month policy at the time of writing, 2024-01-31, would mean supporting:

Additional context

I think our previous convention (due to testing constraints) was simply to support the most recent version of rust

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions