Given the lack of positive feedback to semantic versioning perhaps we
should table your proposal until you can convince other developers of
its benefits?  I do not exactly oppose this idea, but I see its
advantages as modest and smaller then the transition costs.

On Tue, Aug 19, 2014 at 10:36:58PM +0000, Everett Toews wrote:
> Let’s see what we can agree on and move forward on those points.
> 
> 1. 6 month major release cadence.
> 
> That would mean the next releases are roughly:
> 
> * 2.0.0 mid-Sept
> * 2.1.0 early-Nov
> * 2.2.0 late-Dec 
> * 2.3.0 mid-Feb
> * 3.0.0 early-Mar
> 
> 2. Minor point upgrades do not introduce breaking changes. e.g. "users 
> upgrading from an earlier 3.x should be able to use a later
> 3.x release without source modification.” (pasted from Gaul’s previous email 
> below).
> 
> Can everyone agree on those two points?
> 
> Regards,
> Everett
> 
> 
> 
> On Jul 11, 2014, at 11:45 PM, Everett Toews <everett.to...@rackspace.com> 
> wrote:
> 
> > On Jul 7, 2014, at 6:53 PM, Andrew Gaul <g...@apache.org> wrote:
> > 
> >> Sorry, I still do not understand and cannot reconcile these paragraphs
> >> against earlier mails.  Do we branch from master every six months or
> >> not?  
> > 
> > Yes, we branch every 6 months.
> > 
> >> Do we increase the major version every six months?  
> > 
> > Yes, we increment the major version every 6 months.
> > 
> >> From your
> >> example, it appears that we create a 3.x branch from master and continue
> >> releasing 3.x from there.  
> > 
> > I think I see the confusion here. Trying to use text to communicate this 
> > was a bad idea. Maybe this diagram clears it up. It’s really not that much 
> > different than what we do now except for the major (instead of minor) 
> > release cadence.
> > 
> > https://docs.google.com/drawings/d/1TDcsLyYPhWpcYEoNo8ohH9AMlpXJB3ywp1CzYCY9C38/edit?usp=sharing
> >  
> > 
> >> This runs counter to my previous
> >> understanding that master would be 3.x until we branched for the first
> >> breaking change.
> >> 
> >> Also I want to expand your example to explain how this will hurt
> >> development on master, specifically diking out bad code.  Imagine you
> >> want to removing something like InputStreamMap after 3.0 releases:
> >> 
> >> 3.0
> >> 3.1 - deprecate older API in master
> >> 3.x
> >> 4.0 - master branches to 4.x, commit removal to master
> >> 4.x
> >> 5.x - removal ships to users
> >> 
> >> In this example, we delay committing the removal to master for almost
> >> six months (from 3.1 to 4.0) and delay communicating preferred
> >> mechanisms on the release branch for the same interval.  Changes are not
> >> isolated and earlier changes block subsequent work, e.g., removing
> >> InputStreamMap enabled some ByteSource changes.  Not being able to push
> >> these changes to master will make development much harder.  Use of extra
> >> development branches partially addresses this, although does not publish
> >> these changes to all developers.
> > 
> > I’m aware of this scenario and I would argue that it can be mitigated by 
> > better planning. If the deprecation and been well planned, it would have 
> > landed just prior to 3.0 and then the removal ships to users in 4.0. I 
> > realize that historically we haven’t been very good at planning but I don’t 
> > think that’s a good reason to not try to get better at this stuff.
> > 
> >>> Not having a predictable deprecation policy guarantees that users will be 
> >>> more likely to stay marooned on old versions because they’ll have no idea 
> >>> at what point things will break on them.
> >> 
> >> Perhaps we did not communicate this clearly, but jclouds has had a
> >> predictable deprecation policy for at least the last three years.  Users
> >> can upgrade from an earlier 1.7.x release to a later 1.7 release and
> >> breaking changes were only introduced in 1.8.0.  Sometimes a given 1.7.x
> >> release contained new deprecation annotations but otherwise applications
> >> continue to work.  Despite this, users choose not to upgrade to the
> >> latest micro releases.
> > 
> > When you follow something reasonably close to semver you don’t have to 
> > worry about this kind of communication because everybody already knows it. 
> > Every time I encounter a new project I automatically assume semver unless 
> > it’s otherwise stated because there’s really no alternative assumption to 
> > make. I’d argue that this is what most developers do.
> > 
> >>> I think making potentially breaking changes every 6 months is actually 
> >>> very progressive in the world of Java. I think it’s a good trade off 
> >>> between providing a stable and predictable platform for users to build 
> >>> the businesses upon vs improving that platform in backwards incompatible 
> >>> ways.
> >> 
> >> I believe that providing flexibility to evolve jclouds will benefit our
> >> future users as well as existing ones.  Shackling ourselves to
> >> restrictive deprecation policies hurts a fair number of people who
> >> prefer to use a more rational cloud abstraction.
> > 
> > Just as throwing it open to making deprecations at any point hurts a fair 
> > number of people who prefer to use a more stable and predictable cloud 
> > abstraction.
> > 
> >> I believe some
> >> positive changes simply will not happen with the proposed system.
> >> 
> >> In the interests of not talking past each other, I want to summarize
> >> some points in this thread as I understand them.  
> > 
> > Thanks for this. Agreed that we need to focus the discussion a bit more. So 
> > I’m only going to reply to this email to keep us on one email thread.
> > 
> >> First, we all agree
> >> that users upgrading from an earlier 3.x should be able to use a later
> >> 3.x release without source modification.  
> > 
> > Yes. Agreed.
> > 
> >> We disagree whether users
> >> should experience new deprecation warnings when upgrading.  
> > 
> > Yes. We disagree. My main point of contention here is that there needs to 
> > be a minimum amount of time for users to react to changes. 
> > 
> > You feel that 6 weeks is acceptable, such as in the case of 3.3 to 4.0. 
> > 
> > I feel that 6 weeks is far too short and have been arguing for 6 months. 
> > 
> >> Second, we
> >> disagree whether users should experience breaking changes when upgrading
> >> from 3.x to 4.x.  
> > 
> > I’m not so sure we disagree here. Because users are upgrading across a 
> > major release boundary there could be breaking changes.
> > 
> > But breaking changes should only be in 4.0 and *not* in 4.1, 4.2, or 4.3.
> > 
> >> We agree that users can experience breakages from 2.x
> >> to 4.x, with some intermediate deprecations.
> > 
> > Yes. We agree (with my same caveat about breaking changes above).
> > 
> >> Lastly we disagree on
> >> whether master can introduce breaking changes at any point, or only
> >> after some branching a major release from master.
> > 
> > Yes. We disagree. This goes back to my main point of contention.
> > 
> > Again, to me it really seems like the BlobStore is your main concern for 
> > being able to break things more quickly in order to rapidly improve the 
> > existing code. The ComputeService and other APIs don’t seem to be in such a 
> > state in general.
> > 
> > What if you could work on the BlobStore and deprecate at any point between 
> > 2.0 and 3.0?
> > 
> > If the BlobStore API had stabilized by 3.0 then perhaps it could move to 
> > the more conservative deprecation proposal. Thoughts?
> > 
> > Regards,
> > Everett
> > 
> > 

-- 
Andrew Gaul
http://gaul.org/

Reply via email to