I guess I am suggesting that instead of maintaining the whole major/
minor thing (not including file format) that we relax a bit and say
that any give feature we choose to remove or add has to go through two
release cycles, which according to your averages, would equal just
over 1 year's time. If people can't adapt to a coming change that was
announced a year ago, then I have to wonder why they need to upgrade
at all. (OK, that is a little strong, but...)
And mind you, I am not set in stone about this, I'm just starting the
conversation, being a bit of a devils advocate. I would like to know
if there is a way we can retain Lucene's solid stability and maturity
and encourage new and better features and not have to maintain so much
deprecated code.
I especially think this shorter cycle is useful when it comes to
deprecated features (not that there is much difference between
removing methods and adding methods.) Basically, we have code in
Lucene that we all agree should not be used, yet we leave it sitting
in there for, on average 2 years or more. Dropping that to be 1 year,
on average, is not going to all of a sudden break everyone and make
Lucene unstable. Besides, if people like the deprecated methods so
much, why upgrade in the first place? No one is forcing them.
Usually, the answer is there is some new feature somewhere else that
is needed, but that just shows that people are willing to invest the
time to get better features in the first place. Besides, just because
we can remove things, doesn't mean we have to remove them. For
instance, some bigger features that we improve, we may want to
deprecate for more than one full release cycle.
Fieldable is, in my mind a prime example of needing the ability to
announce additions. Let's say we come up with some new-fangled Field
type called Magic. This thing is so beautiful we all wonder how we
ever lived without it. Great. Now all we need to do is add an
isMagic() declaration onto Fieldable and we're good. Oops, can't do
that. Gotta wait 2 more years for 4.0. Seriously, we have to be
locked into an interface for 2 years or more? And oh by the way, in
that 2 years, Lucene has been left in the dust b/c every other open
source search engine out there already has Magic capabilities.
Furthermore, that gives us one 6 month window (+/-) to get it right
for the next 2 years. I know, it's a bit over the top, but I think it
demonstrates the point. I also don't see what is unstable about
telling the community, well in advance, that the following API changes
are coming, please plan accordingly. Most projects out there don't
even do that. Seriously, in Maven you get updates to functionality
without even knowing you are getting them and I am no where near
advocating for that.
And again, I still think the more pertinent issue that needs to be
addressed is how to better handle bugs in things like Tokenization,
etc. where people may have dependencies on broken functionality, but
haven't fully comprehended that they have such a dependency. I don't
think those fixes/deprecations should have to wait for a major release.
Does anyone have experience w/ how other open source projects deal
with this? Do they have explicit policies? Is it ad hoc? I know for
instance, in a certain library I was using that the difference between
what was announced as a beta and as 1.0 was quite different. Granted,
one could expect that a bit more out of something that was going from
0.X to 1.0, but still it was a pretty significant, more or less
unannounced change (unless you count following all the commit messages
as announcement) and it will require a decent amount of work to upgrade.
-Grant
On Jan 17, 2008, at 6:58 PM, Steven A Rowe wrote:
Hi Grant,
On 01/17/2008 at 7:51 AM, Grant Ingersoll wrote:
Our minor release cycles are currently in the 3-6 months range
and our major release cycles are in the 1-1.5 year range.
Since 2.0.0, including 2.3.0 - assuming it will be released in the
next week or so - the minor release intervals will have averaged
about 6.5 months, over three releases.
Historically, the major release cycle intervals have roughly been:
1.0 - 6 months (March 2000 - October 2000)
2.0.0 - 6 years (October 2000 - May 2006)
Six years is an incredibly long time to maintain backward
compatibility.
Assuming there will be a 2.4 release, and then 3.0 following it,
it's pretty optimistic (IMHO) to think that it will be released
before June 2008, so for 3.0, that would be:
3.0.0 - 2 years (May 2006 - May 2008)
Two years doesn't seem so long in comparison :).
I think giving someone 4-8 (or whatever) months is more than
enough time to prepare for API changes. I am not sure how
this would effect Index changes, but I do think we should
KEEP our current index reading policy where possible. This
may mean that some deprecated items cannot be removed until
a major release and I think that is fine.
Given the 6.5 month average minor release interval for the most
recent major release, and the relatively low probability that this
will shrink appreciably, you seem in essense to be advocating
altogether abandoning backward API compatibility from one (minor)
release to the next.
However, below you are advocating a minimum of one "test balloon"
release between incompatible changes:
On 01/17/2008 at 3:41 PM, Grant Ingersoll wrote:
[N]o interface/deprecation changes would be done without announcing
it
and there being at least one release in the meantime. Thus, if we
wanted to add isFancySchmancy() onto Fieldable today, it would have
to
be announced, patch provided and referenced, a release without it
(i.e.
2.3) and then it would be available in 2.4. By ad-hoc, I meant
that we
wouldn't just announce it and then have it show up in 2.3 and not
give
people time to digest it.
If I understand you correctly, a major release series could contain
a whole series of non-aligned overlapping back-incompatible changes,
since you are allowing individual features to alter backward
incompatibility independently of other features. I think this is
actually worse than just abandoning back-compatibility, since users
would have to look up information on each individual feature to be
able to figure out whether they can do a drop-in upgrade.
Steve
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------
Grant Ingersoll
http://lucene.grantingersoll.com
http://www.lucenebootcamp.com
Lucene Helpful Hints:
http://wiki.apache.org/lucene-java/BasicsOfPerformance
http://wiki.apache.org/lucene-java/LuceneFAQ
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]