Trustin Lee wrote:
On 10/28/06, *Emmanuel Lecharny* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    IMHO, switching to Java 5 deserve a special number, and to follow what
    has been done by tomcat team, it seems to be a good idea to switch to
1.5, just to be able to tell : "the current version is using Java 5".

Do we move to 1.6 or 2.6 when we move to Java 6?

Hehe I see what you mean. However I think moving from 1.0 to 1.5 was more arbitrary. We could have jumped from 1.0 to 1.23 etc.


    An question could be : "will mina+java5 be stable or not?". If the
    answer is "yes", then you should use 2.0 instead of 1.5. Major versions
    are supposed to bring huge refactoring, with potentially API breakage
    and modification. If you are using java 5, this will likely be the
    case,
    except if you decide to use Java 5 just to get rid of backported code.


That 2.0 *can't* be 'stable' but our versioning scheme says its stable. That's the point of my idea.

I hear you and this is a problem with our scheme but I think there are viable alternatives (workarounds). I explain some of them down below.

    So, to gather my opinion, here is what I think :
    - If you want to switch to Java 5 with no change in the API, in order to
    get rid of backported code, then 1.5 is the number


We won't do this.

Hmmm sorry I don't know who is we in this context?

Anyway, Alex told me that the change of the platform
means increasing major version number.  WDYT, Alex?

Really I think both are viable however the option depends on your circumstances. The key here is to send a audible message to the user that something big has changed right?

When the user starts shopping for MINA/ApacheDS upgrades they'll see the big jump from 1.0 -> 1.5 or from 1.0 -> 2.0 and that big jump will mean something to them. However there are subtle differences between the jump from 1.0 -> 1.5 and the 1.0 -> 2.0 jumps. I think the decision to where to jump from 1.0 with a change in the JDK is up the perceived stability of the product and your intension for introducing more features right after this change. Let me explain ...

Say you want to make this jump to JDK 5 for MINA and discontinue support for JDK 1.4. However right after you do that, you don't want to introduce new features right away but just release a stable product. So if the product is relatively stable after changing to JDK 5.0 then go ahead and mark it for a 2.0 and do a release candidate or two just to be sure. Again there are no feature additions between release candidates. But if you're confident the release candidates may not even be necessary then just do a release without candidates. You could have also jumped from 1.0 to 1.4 (or 1.6 or 1.8 etc) to convey the same meaning but a 1.0 -> 2.0 jump might be louder and in line with a move to discontinue support for JDK 1.4.

Now if you want to jump to JDK 5 and continue adding features in a feature branch then make a jump from 1.0 -> 1.5 or from 1.0 -> 2.1. Again no matter what you do with the major number, make sure you jump more than 1 hop on the minor number and land on an odd minor number: 1.3, 1.5, 1.7, 1.9 ... 1.23 or 2.1, 2.3 ... etc.

    - If you want to use Java 5 features, like enum, generics, concurrence,
    then it should be a 2.0


Again, 2.0 means 'stable' from '0', but it can't be stable because it is the first release in the new major version number.

Ok then just jump to a 1.5 or to a 2.1 instead of an even release. No one says you have to release a 2.0 and cannot skip it ;).

    Btw, I think that 1.1, 1.2, etc ... should not change the 1.0 API. If I
    check out the trunk, I can see that some classes have been deleted, and
    some methods have been changed. Please use "deprecated" tag, this is
    exactly what it is good for. If you need to change the existing API,
    then do it in a 2.0 trunk, not in a 1.x trunk. It will be more and more
    important as many people will use Mina...


It's not what we have been doing so far and we didn't create our initial versioning scheme to work in the manner you are saying. For example, 1.2 and 1.3 can have very different API and feature set. But 1.2 and 1.2.1 will have the same API and the same features. Of course, if the API design is so great, then 1.2 and 1.4 will have the same API but different features.

Notes about stable minor number jumps:
=====================================

Really nothing says you have to maintain the API across them. It's nice to be able to sure! But this happens with really mature API's. And certainly using the deprecation facilities is a polite thing to do.

An evolving API however will need to change rapidly. However if a release early release often strategy is used there is a good chance to be able to use deprecations properly.

Again though minor number jumps do not mean you're guaranteed to have the same API. Designers should try to use deprecations to protect against yanking APIs but can add new methods and classes as they please. The occasional impolite surprise where you just lost that method or that interface might occur and is allowed as long as it's not going to force you to totally rewrite dependent software.

HTH,
Alex


Reply via email to