> So we avoid 6.1, 7.2, etc?  Does this imply that each release is allowed to 
> make breaking changes (assuming they followed the “correct” deprecation 
> process)? 
Yes and no.

A release can't make a breaking change *relative to the immediately preceding 
release*, if something has been deprecated. 

A release *can* make a breaking change *from another actively supported 
release* if it's not an adjacent release and the feature was signaled as 
deprecated in the interim release.

On Fri, Apr 11, 2025, at 10:39 AM, Jon Haddad wrote:
> +1.
> 
> It's the proper signal to the community.  A .1 release could still be done as 
> an exception, but I have a hard time thinking of a case other than supporting 
> a newer JDK without any other changes. 
> 
> On Fri, Apr 11, 2025 at 7:19 AM Jeremiah Jordan <jerem...@apache.org> wrote:
>> +1 from me.
>> No more wondering what the next version number will be.
>> No more wondering what version I can upgrade from to use the new release.
>> 
>> -Jeremiah
>> 
>> On Apr 10, 2025 at 3:54:13 PM, Josh McKenzie <jmcken...@apache.org> wrote:
>>> 
>>> This came up in the thread from Jon on "5.1 should be 6.0".
>>> 
>>> I think it's important that our release versioning is clear and simple. The 
>>> current status quo of:
>>> - Any .MINOR to next MAJOR is supported  
>>> - Any .MAJOR to next MAJOR is supported  
>>> - We reserve .MAJOR for API breaking changes
>>>     - except for when we get excited about a feature and want to .MAJOR to 
>>> signal that
>>>     - or we change JDK's and need to signal that
>>>     - or any of another slew of caveats that require digging into NEWS.txt 
>>> to see what the hell we're up to. :D
>>> - And all of our CI pain that ensues from the above
>>> 
>>> In my opinion the above is overly complex and could use simplification. I 
>>> also believe us re-litigating this on every release is a waste of time and 
>>> energy that could better be spent elsewhere on the project or in life. It's 
>>> also a signal about how confusing our release versioning has been for the 
>>> community.
>>> 
>>> Let's leave aside the decision about whether we scope releases based on 
>>> time or based on features; let's keep this to the discussion about how we 
>>> version our releases.
>>> 
>>> So here's what I'm thinking: a new release strategy that doesn't use .MINOR 
>>> of semver. Goals:
>>> - Simplify versioning for end users
>>> - Provide clearer contracts for users as to what they can expect in releases
>>> - Simplify support for us (CI, merges, etc)
>>> - Clarify our public API deprecation process
>>> 
>>> Structure / heuristic:
>>> - Online upgrades are supported for all GA supported releases at time of 
>>> new .MAJOR
>>> - T-1 releases are guaranteed API compatible
>>> - We use a deprecate-then-remove strategy for API breaking changes
>>> 
>>> This would translate into the following for our upcoming releases (assuming 
>>> we stick with 3 supported majors at any given time):
>>> 6.0:
>>> - 5.0, 4.1, 4.0 online upgrades are supported (grandfather window)
>>> - We drop support for 4.0
>>> - API compatibility is guaranteed w/5.0
>>> 7.0:
>>> - 6.0, 5.0, 4.1 online upgrades are supported (grandfather window)
>>> - We drop support for 4.1
>>> - API compatibility is guaranteed w/6.0
>>> 8.0:
>>> - 7.0, 6.0, 5.0 online upgrades are supported (fully on new paradigm)
>>> - We drop support for 5.0
>>> - API compatibility guaranteed w/7.0
>>> 
>>> So: what do we think?

Reply via email to