Hi devs,

We currently have 4 branches of GHC in flight: 8.10, 9.0, 9.2 and HEAD

Latest releases:
- 8.10.4: 2021/02/06
- 9.0.1: 2021/02/04
- 9.2.1-alpha2: 2021/04/23

Considering:

1) 8.10 branch should be stable but a lot of stuff has been merged for 8.10.5. To the point that 8.10.5 should probably be a "major release in the 8.10 series".

2) 9.0.1 is the latest major release but it shouldn't be used before 9.0.2 is released because of bugs and regressions (9.0.2 branch contains a fix for a critical bug in 9.0.1 [1] since March).

3) We might release 9.2.1 and 9.0.2 approximately at the same time which will be quite confusing for users ("9.0.2 in the 9.0 series and 9.2.1 in the 9.2 series").

4) The first major number is meaningless.

Proposition:

Switch to A.B.C[.D] version scheme where:
- A: major release ("series")
- B: major release in the A series if B>0 and C=0; beta release if B=0
- C: bugfix release for A.B (if C>0) or beta release number (if B=0)
- D: date when building in tree, not for releases

It might be clearer exposed like this:

showVersion = \case
  [a,b,c,d] -> "Dev version of " ++ showVersion [a,b,c] ++ " built on " ++ show d
  [a,0,c]   -> "beta " ++ show c ++ " in series " ++ show a
  [a,b,0]   -> "Major release " ++ show [a,b] ++ " in series " ++ show a
  [a,b,c]   -> "Bugfix release " ++ show c ++ " for " ++ show [a,b]
  _         -> undefined

> showVersion [9,0,1,20211028]
"Dev version of beta 1 in series 9 built on 20211028"
> showVersion [9,0,1]
"beta 1 in series 9"
> showVersion [9,0,2]
"beta 2 in series 9"
> showVersion [9,1,0]
"Major release [9,1] in series 9"
> showVersion [9,1,1]
"Bugfix release 1 for [9,1]"
> showVersion [9,2,0]
"Major release [9,2] in series 9"
> showVersion [10,1,0]
"Major release [10,1] in series 10"

Effects:

1) We could use C for bugfix versions which are to be released much faster than major versions. 2) B would be used for the old series we maintain. We backport a lot more stuff than before in older releases it seems, so it would be more PVP compliant to bump a major version number.
3) A would be used for the usual 6-month major releases.
4) We could make major releases in the 8 series (e.g. 8.10.5 could be released as 8.11.0) 5) We could advertise 9.0.1 as a beta (as everyone seems to consider .1 releases) 6) 9.2.1 final could be released either as 9.3 (next major in the 9 series if we just forget about 9.0.* and 9.2.*) or as 10.1.0 (first major in the 10 series). 7) No difference anymore between even/odd version numbers (for reference the current scheme is explained in [2])

Any thoughts?
Sylvain


[1] https://mail.haskell.org/pipermail/haskell-cafe/2021-March/133540.html
[2] https://gitlab.haskell.org/ghc/ghc/-/wikis/working-conventions/releases

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to