Versioning is something almost every developer hates
to do (as it is boring work he doesn't need), but it
is also something that is vital for every client
programmer.

When software is alpha, it is okay to not have a
versioning system in place. For beta software
(where beta means: we will create a supported
release based on this code once we have tested
it enough and removed bugs), versioning is vital,
especially when there are multiple components
(framework, unstable framework, cornerstone,
phoenix) that make up a system.

Therefore, I propose to adopt some kind of versioning
system, and make following it obligatory.

Here's the idea (borrowed from the linux people):

an even number means "more stable" while an odd number
means "less stable". This leads to:

4.0 means a stable, final release
4.0.x means an update or bugfix of 4.0
4.1 means a beta that adds new features to 4.0,
where the important interfaces (i.e. lifecycle)
are not broken.
4.2 is the stable release of 4.1. It is usually
a little better than 4.0.x.

etc etc.
Deprecation is possible within a version number,
whereas removal of an interface or public class
requires a new version number (i.e. from 4 to 5).

Alpha code has a first version number that is
uneven. Alpha code that moves to beta code
gets a "b" appended to its version number. So:

3.3 means alpha code without any support which is
not guaranteed to even run
3.4 means alpha code that can compile and run with
relatively few errors, but that gets no support
at all.
3.4.x means a small change from 3.4.
3.5 means a bigger change from 3.4.
3.8b means a beta version of 3.7. It is not guaranteed
that the next version will be 4.0 (i.e. stable),
though. We can also go for 3.9 which is again alpha,
then 3.10 and then 3.10b which is a beta again.

but: the only obligatory for alpha code is that it
uses an uneven first version number.


I realise most of you hate a straight-jacket like
this (I do to), but you'll probably recognise the
advantages as well. I drafted it all this way
because many people are somewhat familiar with it.

----------------------------------------------------------------
What this means in a concrete way (not solid and not
part of my proposal (yet)):
        - the current framework code in the avalon proposal is
          3.7. Once the dust settles, it is moved to 3.8b (beta).
          It'll stay there for a while for testing, and will then
          go to 4.0. (note: while I'm not very happy with the
          current proposed setup, I recognise the need for a beta
          real soon so I'll shut up and accept)

        - the rest of the code in that proposal is 3.3. It'll
          take more than a few cycles 'till we get this to 4.0.

        - I suggest we just synchronise phoenix and cornerstone
          to have them follow these version numbers. So the current
          phoenix and cornerstone are 3.2.x until they get updated
          to work with the proposal code, and then they'll be 3.3
          as well.
          Once the specification implementation (i.e. avalon.*)
          moves to 3.14b or something, we can start on building a
          beta of phoenix and cornerstone. This means 4.0 of phoenix
          and cornerstone will be released say 3 months after
          the 4.0 for the Avalon implementation.

What it could mean as well:
        - 5.x is a big move from all of this (if I have it my way
          phoenix will be the RI of the specification), which will
          lead to a
        - 6.x that is truely broadly usable and stable.
        - Hopefully many other Jakarta projects will like and accept
          4.0 and they'll become avalon-enabled, which could then
          lead to a wealth of programs available for/optimised for
          avalon 6.x.
        - 7.x and up will probably be reworkings of 6.x to be
          compatible with the Java Server Framework JSR, and in
          the end support for running on cellphones and playstations =)

--------------------------------------------------------------------
Anyway, can I have 3 hurrays (or at least some +1s) for the
adoption of a versioning system,

- where 3.x is alpha/beta code with some suggestions for versioning,
but where these are not obligatory?
- where 4.x is beta/stable code with a tight versioning
system?

here's mine for both: +1

LSD

<java:sig>
        About LSD  = new PersonalInfo();
        LSD.name("Leo Simons");
        LSD.email("[EMAIL PROTECTED]");
        LSD.URL( [
                http://www.leosimons.com, // personal website
                http://www.atfantasy.com, // fantasy RPG portal
                http://www.the-sign.nl    // web-design company
        ] );
        LSD.quote("Buh!");
        email.setSig((String)LSD);
</java:sig> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to