On Sat, 12 Oct 2002, Glenn wrote:

Glenn, thanks I had deleted Jim's message and I was re-creating it.  You
made it so I didn't have to.   :-)

> On Sat, Oct 12, 2002 at 05:11:29PM -0400, Jim Jagielski wrote:
> > This is going to sound like a grumpy old man talking, but it's sounding
> > more and more like that 2.0 tree is considered, by many of the
> > developers, little more than a playground to hack around in. There
> > seems very little regard for end users or developers ("API changes
> > with every release... yeah, so what."). Are people hacking 2.0
> > (or 2.1) because it's fun to do and a neat project, or is there
> > a desire that *people actually use the code*?
> > 
> > I'm certainly not saying that we ship broken or stupid code simply
> > to get it out, but certainly people should be aware that, when all
> > is said and done, isn't the whole idea of ASF projects is that
> > people are encouraged to use them? Yeah, we should allow the API
> > to grow and mature, but having it "constantly" change means, at
> > a very core level, we have no idea what it should be doing or
> > how it should be doing it.  [...]

I think there is a much easier way to satisfy everybody and stay in the
2.0 tree.  The problem right now, is that the MMN isn't granular
enough.  All we know, is that we broke binary compatibility.  But, we
don't know where it was broken, which means that all modules must be
re-compiled.  But, let's take the auth changes as an example.  We had to
bump the MMN with these changes, because of what was done.  But, the only
modules that were affected, were auth modules.  That means that anybody
who has a filter oesn't need to re-compile.

If we modularize the MMN, and provide a way for module authors to query
the MMN at a granular level, most of the MMN bumps become much more
trivial.  Let me explain what I mean.

#define MAJOR_MMN 00000
#define AUTH_MMN  000
#deifne FILTER_MMN 000
...


#define MMN MAJOR_MMN,AUTH_MMN,FILTER_MMN

int check_auth_api(int module_number)
{
    if GET_AUTH_MMN(module_number) < AUTH_MMN) {
        return false;  /* May want to just exit with an error here */
    }
    return true;
}

Now, and auth module just needs to call check_auth_api() in
register_hooks.  If it returns false, the module needs to exit, or things
will fail.  If it returns true, then all is good.

If the module doesn't call any of the individual check_*_aupi() functions,
then the best we can do is to check the whole thing the way we do now.

The advantage to this, is that it allows us to bump the MMN when we need
to, but that bump is less likely to affect as many people.

I see how to implement the whole thing if this will satisfy people.

Ryan

Reply via email to