Skip to content

Release strategy #205

@dhardy

Description

@dhardy

Hello people,

so I've effectively become the current maintainer of rand; @alexcrichton has now given me permission to push out new releases too. This issue is to clarify my plans with the various people watching/contributing here and get some feedback.

First up, I won't be directly merging my branch. It contains a lot of changes, some of which need further review and further tweaking. It exists more as a preview of roughly where we're aiming, and to allow development using the new error type. Quite a lot of what's in this branch depends on the new error type and changes to the Rng trait, and merging those into rand now would be quite a significant breaking change — and one that might change more, since some items should get pushed to the rand-core crate, and this still needs some development before RFC approval (dhardy#18 being the main unsolved issue).

That brings me to the topic of releases. @est31 has requested a new release with a minor change. There are multiple ways we could do this:

  • Conservative: backport desired non-breaking changes to 0.3, hold off on 0.4 for now. [Not preferred due to requirement to maintain an extra branch and make more merges; also due to long delay before releasing most changes.]
  • Eager: release 0.4 with current changes, have no qualms about releasing 0.5, 0.6, ..., 0.20, etc. given small breaking changes.
  • Unstable series: release 0.4 and document it as "unstable" for the time being, keep pushing breaking changes there.
  • Hybrid: continue making "patch" releases with new features (tracking the master branch closely) but avoid all API breakage.

Personally, I prefer the idea of using an unstable series. It's not strictly SemVer but works well with the RERO philosophy: we consider 0.3 stable and only make minimal (if any) changes, while 0.4 is considered unstable until some point in the future where we fix it and stop making significant changes.

There is also the question of what exactly constitutes a breaking change. In theory a deprecation is just a warning that some thing will be removed in the future, but some people I've worked with in the past interpret compiler warnings as serious issues which must be solved immediately, which makes introducing deprecations themselves problematic. There are also changes which are difficult to fully test, e.g. the new JitterRng is highly platform dependent. I think therefore it may be best to initially release all deprecations and significant new features in a new or existing unstable channel (i.e. eager or unstable series strategy above).

Any thoughts, questions? Can't say too much about time-line, but this all takes time (especially allowing for reviews).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions