Hi everyone,

I think now is a good time to start thinking about 3.7.x development from 
master into 3.7-dev and to setup master to take breaking changes for the next 
major release. I opted to delay this after the last release to temporarily save 
some of the admin burden of 4 active branches.

I think this gives a good opportunity to revisit our versioning scheme. The 
current scheme 
(https://tinkerpop.apache.org/docs/current/dev/developer/#versioning) is 
EPOCH.MAJOR.MINOR.PATCH, where EPOCH has been fixed at 3 since 2015, and the 
PATCH digit has never been utilized.

I suggest that we move to a more standard semantic versioning scheme 
(https://semver.org/) with just MAJOR.MINOR.PATCH starting with 4.0.0. I would 
expect the MAJOR and MINOR numbers to essentially retain the same roles as they 
have now (4.x.x -> 5.0.0 would be comparable to 3.6.x -> 3.7.0). I don’t expect 
we would utilize the PATCH release often, but I would for it to be a formalized 
process for publishing partial releases (perhaps only updating a single 
component) which can hopefully skip much of the overhead of a full release. 
We’ve previously deployed release-candidate convenience binaries for some GLV’s 
in the past for certain users in this fashion, it would be good to bring this 
into a proper release.

I believe this versioning system is more aligned with what most developers are 
used to. Additionally, I hope that dropping the EPOCH value will allow us to be 
a little more aggressive with changes in major releases (perhaps introducing a 
type system or schema capability).

It would also be useful if we started publishing end-of-life dates for major 
releases to give users a clearer picture of expected support. I would suggest 
as a starting point 1 year of active support (adding new features, acting as 
the main target branch for non-breaking changes) and 2 years of security 
support (branch is kept open for critical bug fixes and security patches). If 
we plan to maintain roughly 1 major release per year, this remains somewhat in 
line with current support timelines. We would presumably retain the right to do 
additional releases for a branch beyond the promised support window if we ever 
deemed it necessary.

Let me know if you have any thoughts on this change. If there is no feedback, I 
will assume a lazy consensus in favour of adopting semantic versioning and 
moving the master branch to 4.0.0-SNAPSHOT development. There are still some 
details to be worked out regarding patch releases under the new system (it 
isn’t completely fleshed out for the current system either). I intend to follow 
up soon with a more specific patch release proposal depending on the feedback 
here.

Thanks,

Cole Greer

Reply via email to