Hello, I never understood what the first version number in GHC is for (the one you refer to as "series", and that recently changed from 8 to 9). To me it makes more sense to have 2 numbers for proper releases and 2 numbers+date (or git hash) for development. So the format would be:
A.B where A is incremented for each release (roughly 6 months apart) and B is incremented for different variations of each release. B resets back to 0 at each 6 month release cycle, so the very first release candidate would be `A.0` with others being `A.1`, `A.2` etc, until the actual release seattles at `A.R`, which would last for about 6 months when we'd go to `A+1`. If we need a bug fix release before the 6 month period has expired, we just bump `B` to `A.(R+1)`, etc. Just my 2c, -Iavor On Fri, May 28, 2021 at 7:49 AM Sylvain Henry <sylv...@haskus.fr> wrote: > 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 >
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs