I figured I’d take this discussion up with the experts and founding fathers. ;)

https://github.com/semver/semver/issues/508

-jake


> On Apr 4, 2019, at 8:23 AM, Anthony Baker <aba...@pivotal.io> wrote:
> 
> Let’s separate the discussion into these parts:
> 
> - What does SemVer say and how do we apply it
> - When should we remove deprecated code
> - Should we remove the admin source code entirely
> 
> 
> 1) SemVer
> 
> Straight from the spec:
> 
>> Major version X (X.y.z | X > 0) MUST be incremented if any backwards 
>> incompatible changes are introduced to the public API
> 
> @Jens - doesn’t “new major version” imply n.0.0?
> 
> Downstream consumers of SemVer-compliant software expect that “backwards 
> compatibility” means they can upgrade to a new minor or patch release and 
> things will continue to just work—no changes required.  If you think about 
> how we upgrade our library dependencies we have that same expectation.  When 
> I upgrade from log4j 2.11.1 to log4j 2.11.2 I don’t expect to have to modify 
> any source code.  
> 
> IMO, the clarity that SemVer brings to the question of “Can I upgrade 
> safely?” Is its main benefit.  If we blur the lines and break stuff without 
> signaling via major versions, then our users will be less inclined to trust 
> us and will upgrade less frequently IMO.
> 
> 3) Deprecation
> 
> Unlike users, SemVer places no value judgement on version numbers and assumes 
> that major version numbers are “free” (aka infinite).  Some projects have 
> major versions like 42.0.0 (wow!).  Unfortunately most users *do* expect 
> certain things like new features from major versions.  And if the cost of the 
> upgrade is higher than the value gained from the upgrade then there’s a 
> strong disincentive to move forward.  We’ve all seen OSS communities that 
> have fragmented due to the cost of changing to a new major version (e.g. 
> python).  I’d sure like to avoid that.
> 
> Clearly we have a lot of long-deprecated API’s that we want to clean up.  
> That’s important to *us*.  I also want to understand why our *users* will 
> want to upgrade to a geode-2.0.0 release.  Let’s spin off a separate thread 
> to discuss what that looks like and how we handle the transition using 
> branches, prereleases, or other mechanisms to manage breaking changes.
> 
> 2) Admin source code
> 
> This is a grey area for me.  While technically it is part of the API, it’s 
> also true that it’s been broken / unusable (not to mention obsolete) for the 
> entire time it’s been part of the geode project.  +1 to remove.
> 
> 
> Anthony
> 
> 
>> On Apr 4, 2019, at 6:36 AM, Jens Deppe <jensde...@apache.org> wrote:
>> 
>> I'm not sure if I'm interpreting various parts of this conversation
>> correctly, but it seems that one view being assumed is that the actual
>> removal of deprecated APIs *must* happen in the first version of a major
>> release bump. i.e. for this discussion that would be *2.0.0*. I don't
>> believe this is a correct interpretation of the following; taken from
>> https://semver.org/
>> 
>> Before you completely remove the functionality *in a new major release*
>>> there should be at least one minor release that contains the deprecation so
>>> that users can smoothly transition to the new API.
>> 
>> 
>> There is no mention of it needing to happen in the *n.0.0* version; just
>> *sometime* within a new major version.
>> 
>> Given that, these APIs were definitely deprecated before 1.0 and I believe
>> we're within the definition of *semver* to be free to remove them now.
>> 
>> +1 to removing them any time before 2.0.0.
>> 
>> --Jens
>> 
>>> On Wed, Apr 3, 2019 at 7:38 PM Jacob Barrett <jbarr...@pivotal.io> wrote:
>>> 
>>> That’s your interpretation of semver. I interpret The API not to be broken
>>> within a major as those that are still valid when the major is released
>>> despite the availability of deprecated symbols from previous major. Just
>>> because I can access symbols does not make it API. API is the combination
>>> of documentation, annotation and availability of the symbols. If the
>>> symbols are available but marked deprecated and not documented anymore then
>>> it is. It API.
>>> 
>>> Yes under your interpretation it would require that availability be
>>> removed at the major release too so that a consumer that ignore deprecation
>>> warnings when compiling with the new version got a compilation or runtime
>>> error later up updating a minor.
>>> 
>>> I think that error is well deserved. We do a disservice to our customers
>>> by allowing them to continue to limp along on deprecated, unmaintained and
>>> untested APIs because we missed an arbitrary window to remove the symbols.
>>> 
>>> If however the community agrees with you interpretation then we must make
>>> sure a ticket is created for the next major with a list of deprecated items
>>> and updated when new items are deprecated so that the task is performed at
>>> the major release. A chore needs to be undertaken to remove all deprecated
>>> APIs at the start of each major development cycle. The short of it is we
>>> can’t miss this arbitrarily limiting window.
>>> 
>>> -Jake
>>> 
>>> 
>>>> On Apr 3, 2019, at 3:58 PM, Alexander Murmann <amurm...@apache.org>
>>> wrote:
>>>> 
>>>> Would we announce that we aren't following semver anymore because bumping
>>>> the major version is somehow too expensive?
>>>> 
>>>>> On Wed, Apr 3, 2019 at 3:29 PM Kirk Lund <kl...@apache.org> wrote:
>>>>> 
>>>>> 1) +1 YES. If we continue to *not* have at least one major release per
>>>>> year, then I 100% support the removal of deprecated APIs and features
>>> in a
>>>>> minor release such as 1.10. If we decide to have at least one major
>>> release
>>>>> per year, then I'd be willing to revisit this and consider not allowing
>>>>> removal in a minor release. I do *not* support perpetually deferring
>>> major
>>>>> releases to avoid facing the removal of deprecated APIs -- that's just
>>>>> ridiculous as it keeps our maintenance costs much higher than they need
>>> to
>>>>> be.
>>>>> 
>>>>> 2) +1 to remove anything in 1.10, or any other minor release, that was
>>>>> already deprecated in Geode 1.0
>>>>> 
>>>>>> On Tue, Apr 2, 2019 at 5:05 PM Dan Smith <dsm...@pivotal.io> wrote:
>>>>>> 
>>>>>> Hi devs,
>>>>>> 
>>>>>> The org.apache.geode.admin package has been deprecated for about 7
>>> years
>>>>>> [1].
>>>>>> 
>>>>>> I'd like to remove it, or at least move it to a separate module. I
>>>>> actually
>>>>>> started some work to move it to a separate module [2]. However in the
>>>>>> course of this process, I've found that this module has extremely
>>> little
>>>>>> test coverage, so I'm not confident in the move. For example, it has a
>>>>>> whole JMX manager feature (different than our current JMX manager)
>>> which
>>>>>> does not appear to have any tests. This JMX manager feature won't work
>>> as
>>>>>> shipped unless you find and add some mx4j jars to your classpath.
>>>>>> 
>>>>>> I think the best course of action is probably to remove it entirely.
>>>>>> However, this does bring up a couple of questions:
>>>>>> 
>>>>>> 1) Is it ok in general to remove deprecated API in a non X.0 release
>>> (eg
>>>>>> geode 1.10 instead of geode 2.0)?
>>>>>> 
>>>>>> 2) How about in this case, when this feature has been deprecated for so
>>>>>> long, and may or may not work?
>>>>>> 
>>>>>> -Dan
>>>>>> 
>>>>>> [1]
>>>>>> 
>>>>>> 
>>>>> 
>>> https://geode.apache.org/releases/latest/javadoc/org/apache/geode/admin/package-summary.html
>>>>>> [2] Draft PR for moving the org.apache.geode.admin to a separate
>>> module -
>>>>>> https://github.com/apache/geode/pull/3392
>>>>>> 
>>>>> 
>>> 
> 

Reply via email to