On Feb 19, 2008 12:35 PM, Kevin Menard <[EMAIL PROTECTED]> wrote:
> I'm going to have to chew this over some more because there are some
> pretty important ramifications here.  This is more a stream of thoughts.
>
> If the "5" is here to stick, perhaps we should move away from the
> traditional MAJOR.MINOR.PATCH scheme. For example, PostgreSQL uses
> something similar to MAJORA.MAJORB.PATCH.  E.g., the move from 8.2 to
> 8.3 is considered to be just as major as the move from 7.x to 8.x.  This
> was done, I believe, in an attempt to curb insanely high version
> numbers.

So, really, 5.MAJOR.MINOR.PATCH?

I have a *significant* interest in keeping the version number at 5.

>
> Allowing deprecated cruft to amass is clearly going to impact the
> framework.  I'd rather see a policy that states a deprecated feature is
> guaranteed to stick around for maybe 3 minor releases after an
> appropriate replacement is provided.  The pitfall here is that the
> number of releases is meant to give ample time for a reasonable
> transition, but may conflict with the notion of releasing early and
> often.  A developer shouldn't have to worry about deprecated API
> removals simply because a new minor version was released as the result
> of an API addition.

I kind of interpret this as meaning a MAJOR increment means cruft has
fallen out.

>
> Likewise, we don't want to force someone to have to upgrade to a new API
> in order get a bugfix.  Drawing from my experience with T4, the upgrade
> to T4.1 was not nearly as smooth as I would have hoped for, but was
> necessitated due to bug fixes only being available on that line.  Of
> course, parallel branch development is unduly harsh on a group of
> volunteer contributors.
>
> The old even-odd system may be interesting to look at, too.  5.1.x is
> unstable and all bets are off.  5.2 is the stable version, with 5.2.x
> being bugfixes.  5.3.x becomes the next development branch.  It may
> strike a nice compromise between version diarrhea and API stability,
> while allowing the dev team to produce quality releases with minimal
> hoop jumping.

This is a good idea whose true usefulness I never previously
appreciated.  So we would follow option #2 in trunk, work on 5.1.x,
release more "previews", but when it reaches a stable point, number it
5.2.0 and start work on 5.3.x (which targets a stable 5.4, etc.)

>
> --
> Kevin Menard
> Servprise International, Inc.
> Remote reboot & power control for your network
> www.servprise.com                  +1 508.892.3823 x308
>
>
>
> > -----Original Message-----
> > From: Howard Lewis Ship [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, February 19, 2008 2:38 PM
> > To: Tapestry development
> > Subject: Release numbering issues
> >
> > Tapestry 5 is, in my opinion, nearing the point where a stable release
> > is appropriate.
> >
> > Once Tapestry 5 does reach stable, we will need to careful guard
> > backwards compatibility, and to express that backwards compatibility
> > in the version number.
> >
> > I've started keeping a log of changes that may affect people upgrading
> > from one release to another:
> >
> http://tapestry.formos.com/nightly/tapestry5/tapestry-core/upgrade.html
> >
> > The Apache Portable Runtime includes some useful guidelines:
> > http://apr.apache.org/versioning.html
> >
> > MAJOR.MINOR.PATCH
> >
> > MAJOR is a major API changes, such as Tapestry 4 to Tapestry 5.  Let's
> > just say that's staying at "5", regardless what some dickless troll
> > says.
> >
> > The pain of things is that removing something is forbidden without a
> > major API change. Deprecate, yes.  Remove, no. That also means
> > maintaining compatibility; so when you deprecate, you must keep the
> > old implementation and juggle it in terms of the new implementation.
> >
> > MINOR represents additions to the APIs.  It is incremented when adding
> > a new public interface (annotation, class, component, etc.), or adding
> > a method to a new public interface.
> >
> > PATCH means no API change at all, it means binary compatibility.
> > Really, it means existing code can be upgraded without even a
> > recompile. End users should be able to switch between releases the
> > with same MAJOR.MINOR number with the expectation that nothing breaks.
> >
> > At some point, some version of Tapestry is going to be the release
> > candidate, say Tapestry 5.0.12.  If it survives in the wild for a
> > period of time (a few weeks?) we can then vote it the final release
> > and update the Tapestry project site ... there will be links
> > identifying the stable version of Tapestry on the main page, and on
> > the downloads page.
> >
> > Option #1: Add a sub-patch number.
> >
> > So let's assume that 5.0.12 is out there and there's a release branch.
> >  Meanwhile, work is proceeding on new features in the trunk (with a
> > version number of 5.0.13-SNAPSHOT).
> >
> > If there's a bug in 5.0.12 that we want to fix, I would propose that
> > the work occurs in the 5.0.12 branch and that we create a new release
> > candidate: 5.0.12.1.
> > Alternate: 5.0.12a.
> >
> > Meanwhile, work continues on 5.0.13-SNAPSHOT, but when someone changes
> > an API, the number immediately jumps to 5.1.0-SNAPSHOT.
> >
> > Option #2: Assume an API change after a release
> >
> > Trunk immediately jumps to 5.1.0-SNAPSHOT.  Problems in the 5.0.12
> > release candidate are fixed as 5.0.13.  Problem: what if the release
> > candidate requires an API change as part of a bug fix?
> >
> > I think this might be the way to go, the easiest to manage.
> >
> > THOUGHTS
> >
> > You might understand, in this context, why I've been doing some
> > refactoring now, as it's in some ways the "last chance".
> >
> > I purposely laid out the public vs. internal structure so that
> > backwards compatibility would be achievable.  People should not have
> > an expectation that any code that imports anything from an internal
> > package will be PATCH compatible.
> >
> > TapestryModule is a grey area, as it defines both public and private
> > services.  Again, a private service will be in an internal package and
> > therefore not covered by backwards compatibility.
> >
> > Components are going to be tricky, as they don't have an public
> > interface to hide behind. Changes to components.
> >
> > While 5.1.x is under development, to we run it as I've been running
> > 5.0.x?  I.e., just patch number changes regardless.  In other words,
> > is backwards compatibility, as reflected in version numbers, something
> > that applies to every publically available release, or only to final
> > stable releases?  I would tend toward the latter ... 5.1.x and 5.1.y
> > may not be API compatible but that's ok, they're alpha.
> >
> > Should we incorporate alpha into the version number?  5.1-ALPHA.x?  Or
> > just have a release matrix on the project site that states "5.0.12 is
> > stable, 5.1.x is currently alpha".
> >
> > If we assume that Option #2 is the way to go, I can change the release
> > number in JIRA from "5.0 Next Release" to "5.1".
> >
> > --
> > Howard M. Lewis Ship
> >
> > Creator Apache Tapestry and Apache HiveMind
> >
>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



-- 
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

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

Reply via email to