On Thu, Jan 19, 2017 at 6:12 PM, David Zuelke <d...@heroku.com> wrote: > I don't know any framework/language/library out there that handles it that > strictly. Nginx, or Ruby, or PHP, or whatever... > > From x.y.z to x.y.z+1, retain full compatibility. > > From x.y.z to x.y+1.0, keep external API compatibility, break ABI if needed, > break internal API if absolutely needed > > From x.y.z to x+1.0.0, break anything you want. > > One issue IMO is that there are a lot of things in flight for 2.6 and 3.0, > and some of these are features, while other are big architectural overhauls. > The former are for 2.6, and the latter very clearly belong into 3.0. There's > no reason why both can't be worked on concurrently.
That's what I'm proposing... a model where x.y.[0-#] releases remain consistent, like all the packages you mention above, and unlike httpd. I liked your highlight of "if [absolutely] needed". That's where our trunk (2.next) has spent four years diverging from 2.current, mostly unnecessarily. The fact that the code *could* be backported to 2.4.x (in your PHP and Ruby examples, such backports aren't even acceptable) means that it *could* have stayed consistent on our 2.next trunk.