Transitioning to the new Release Process

Rob T alanb at ucora.com
Thu Jan 10 12:12:53 PST 2013


On Thursday, 10 January 2013 at 15:51:13 UTC, Andrei Alexandrescu 
wrote:
>
> My understanding was that staging is worked on only during the 
> (short) time span from initiating a new release and finalizing 
> that release.
>
> Andrei

There are significant side effects of that approach:

1) There's no beta made available for release. While you can try 
really hard to claim that there is a beta, in practical terms 
there isn't one, because very few people will even know it is 
there, and even less will have the ability to test it. Even if 
someone managed to try it out, not enough time is available to do 
anything significant with it and report back the results for 
refinement.

2) You'll never gain a high degree of stability between releases. 
The reason why is because the poorly tested development copy, is 
the released version, and following point 1) above, it will never 
be sufficiently tested and refined prior to release.

The results we got with the 2.061 release is what the process 
will give you, which is an unstable compiler that no one will 
want to use in a production environment unless they don't mind 
getting fired, in other words what was released is in fact a beta 
release of the unstable development branch.

If our intention is to produce a stable release that is 
maintained, then the process needs to be designed in a way that 
produces one.

The only way stability can happen, is if all development stops on 
a release branch for a sufficient period of time, ie., it enters 
into a maintenance mode where only critical bug fixes are 
introduced.

We don't want to stop the clock however, there's always newer 
exciting things to be done, so the development must proceed, and 
new major releases must follow. The tricky part is to do it in a 
non-disruptive way, that smooths out the instability between 
releases, that's the purpose the beta branch servers, a middle 
ground between stability and instability, but it's far more than 
that, it can also provide the development team with crucial feed 
back from real-world users.

We have to realize that the release process is not intended for 
developers, you have to consider what the users of the compiler 
want to see.

1) Users want to have access to a well maintained release of the 
compiler, where incremental upgrades contain only bug fixes up 
until the next major release, which will contain new features and 
other major improvements.

2) Some users want to have access to a reasonably stable beta 
release. The only reason why a user will want to try a beta 
version, is when the stable released version does not yet have 
something that they want to try out that is available in the 
beta, such as a new feature like UDA's. The beta should be in 
packaged form and available on the download page because you have 
to make it very easy for people to try it.

How we achieve the results may not matter so much, but from what 
I can see, to achieve point 1), the release must come from the 
beta, and there must be a release branch that can receive bug 
fixes. To achieve point 2) which is providing a reasonably stable 
beta for the users to try out, there must be a beta branch. The 
beta branch receives only new features and bug fixes that have 
been fully agreed to and well thought out.

Meanwhile all of the half baked new concepts are contained in the 
development branch (we've pegged it into master), and all the 
experimental stuff resides in the various scattered feature 
branches that only developers and high adventures are willing to 
try out.

--rt


More information about the Digitalmars-d mailing list