Fellow Avaloners,

Greetings and salutations.

Warning:  This is a LONG email.  This is the sort of email you should
print out and take with you to a nice quiet place and ponder over.  :)

We've seen a lot of discussion about Avalon's mission and future.
This email is an attempt to not only summarize those points, but also
better frame the real arguments which are being made.  I have tried to
be objective in every way possible.

I am sending this message to both the developers mailing list and the
users mailing list because I value the feedback of both groups.  I
hope that the consensus which we build will come from both users and
developers.

Okay, here we go...

Let's start by separating concerns. :-)  

I am going to describe what I believe to be the issues central to all
the debates here in Avalon in two ways.  Yes, essentially, that means
I'll be repeating myself, but I believe the points raised have
multiple aspects and by viewing more than one dimension, we'll get a
better understanding of the problem.

All of this resolves around the question of "What is Avalon's
mission?"  The two ways I'll approach this are:

  1. Community Scope 
  2. Framework Specification 

Let's start with community scope.

Should Avalon be a sort of "umbrella" project for multiple container
implementations or should there be a single Avalon platform and/or
product?

This question is really at the heart of a lot of the recent
discussions.  Traditionally, Avalon has been about the framework API.
Anything not in the framework has been up for grabs for the container
implementer.  The great advantage to this approach is that we end up
with a lot of diversity and freedom to explore a number of different
solutions.  This means we have specialized containers for various
scenarios.  You get to use the right tool for the right job.

At the same time, the approach has left us with incompatibilities
between our own containers.  You have to have a very good
understanding of Fortress, Merlin and Phoenix to write an application
which will run cleanly under all three.  This puts a strain on both
our developers and our users.  I can't even begin to count the number
of times someone has asked, "What container should I use?" and the
question is absolutely warranted given the situation.

I can see how someone may not be concerned with these
incompatibilities.  For example, Cocoon still uses ECM.  As long as
ECM works for them, why should they be concerned that their components
don't work in Merlin (or whatever)?  Why not just be pragmatic about
things and just use what works?

While this argument has merit, I believe it misses out on what Avalon
set out to deliver.  I don't believe we intended on creating a
component oriented framework where reuse was a secondary
consideration.  Seeking to rectify this situation seems (to me)
perfectly in line with our charter and mission.

Which brings me to the opposite side of the spectrum.  Rather than
have Avalon as a home to any and all IoC containers and frameworks,
the Avalon community could focus on a single platform, a single
product, a single meta-data/meta-info description.  We could unite
behind a single reference implementation container.  It would simplify
our documentation, our efforts, and hopefully allow us to be more
effective in bringing a true IoC/SoC/COP framework to the world.  If
nothing else, it would allow more component reuse and hopefully
dispel some user confusion.

Of course, this approach has is drawbacks as well.  It leaves less
room for alternate containers and implementations.  Competing ideas
may be sidelined and specialized containers perhaps harder to support.
We may not have the flexibility we now enjoy to solve problems our own
way.  It would require everyone to agree on a single platform and be
willing to work on that platform.

Now, at one point I thought the problem was just as simple as this --
Avalon is either "IoC Central" or it's about a single product.  But
then I began thinking of it in another way:

Framework Specification.

In addition to thinking about the differences in the scope of the
Avalon community, we can also think about the framework specification
itself.  Instead of seeing two completely opposing sides, imagine now
a larger spectrum.  At one end is our current framework (just the
avalon-framework-api.jar), on the other end is an entire container
reference implementation (something like Merlin).  With this
perspective, we can see that a lot of the arguments align along this
concept -- what should be part of the framework?

In other words, what makes an Avalon container an "Avalon" container
or an Avalon component an "Avalon" component?  It's a matter of
describing a specification or a test compatibility kit (TCK) which
defines what it means to be Avalon compatible.  Leo Simons already
pointed out a lot of the issues surrounding a TCK and how it could
range from the simple (our current framework) to the complex (a
complete container spec).

I like using analogies, so here we go -- imagine the Avalon car
company.  We decide we're going to make cars.  Now we need to decide
on some basic specifications.  These can range from the very flexible
(only requirement that it has four wheels) or the very specific (you
only get to choose the color).  In a similar sense, this is what we're
talking about when we describe the framework specification.

At the same time, this is really the same issue as the community scope
issue.  Under the Avalon umbrella scheme, the spec is only the current
basic framework API.  Fortress, Phoenix, Merlin already all fit that
spec.  Under the Avalon-as-one-product idea, the specification might
be much more strict and include things like meta-data, packaging,
standard extensions, etc.  So really, it's the same problem, just
another way to describe it.

So we have two questions:

1. Community Scope:  IoC central versus a single product?
2. Framework Specification: What is part of the framework?

All the debates and proposals are due to the fact that not all
Avaloners agree on the points of community scope and framework
specification.  Those who favor a more flexible framework
specification want to ensure Avalon can be used in a multitude of
scenarios.  One size doesn't always fit all.  Those who favor a more
strict specification see the current framework as full of holes which
has allowed the current mess of incompatible components. Until we can
agree on these basic issues, there will always be competing agendas,
mixed signals, and unnecessary arguments over implementation details.
In a sense, Avalon has been suffering from 'identity crisis' for some
time now.

Most of us agree the status quo is not what we would like it to be.
That's not to say Avalon is in horrible shape.  We have some awesome
containers and products already.  But we all know it could be better.
Better for the developers.  Better for our users.

At this point, I hope you have a clear understanding of the issues of
scope and specification.  If you do not, please try re-reading some of
the latest email threads, keeping these perspectives in your mind.  I
think you'll find yourself understanding both sides of the issue,
seeing the pros and cons of everyone's argument.

Despite all I've written so far, I still sometimes wonder, "Is this
even an issue?  Are we just working ourselves up over nothing?"  I
believe this is sometimes the case.  For example, it's very easy for
'implementation creep' to enter into these discussions.  That is, when
discussing a specification, naturally one begins to think about
implementation details and sooner or later we find ourselves arguing
about implementation issues while we still haven't even agreed that a
specification should exist!  At times like this it's easy to argue
around in circles and never get anywhere.  That's partly because we
aren't addressing the basic problem first and moving forward one small
step at a time.  Therefore, I do believe we have some real issues to
discuss that are important, but they can be easily lost in tangents
and details.

With that in mind, let's risk a look at a couple "implementation
details" -- specific proposals from the last week or two.  Only this
time, let's look at them under the light of our more basic, more
abstract, questions:

  Niclas's Unifying Vision

  Basically, Niclas's big argument is that our components don't work
  cross-container.  As far as he is concerned, the framework is
  incomplete because it allows for these sorts of discrepancies.  He
  would like to extend the framework to include a more complete set of
  container-component contracts so that if you followed this
  specification, your component would work in any true
  Avalon-compliant container.  This would require a TCK or two which
  would help lay out these rules.

  Notice that this idea does not limit us to one container.  As soon
  as the TCK were in place, we could have all sorts of containers --
  enterprise ones like Merlin, embedded ones like Fortress.  The 
  important part to this vision is a fairly strict framework.  His 
  current promotion of Merlin is simply because there's already a
  lot of momentum behind it.  Additionally, it may be easier to start
  on one container and then branch out from there.

  So, in our spectrum of things, Niclas's vision falls fairly strongly
  on the strong framework specification side, but still allows for
  multiple containers once the TCK has been written.


  Stephen's Total Domination

  Stephen's proposal is actually not very different from Niclas's
  vision.  The differences (if any) perhaps rest mostly with what
  should be included in the TCK. Stephen feels that there should be a
  single component model design which would (in my eyes) be heavily
  influenced by the Model Driven Architecture paradigm.  The basis for
  this model can already be seen in Merlin today.  Moreover, this
  strict TCK would lead us to a reference implementation container
  which would most likely evolve from the current Merlin code base.

  Thus Stephen's approach, like Niclas's, is strong on the framework
  specification and also very strong on the single product idea.
  Stephen has informed me that his proposal does leave room for other
  containers as long as they too follow and pass the TCK.


  Berin's Zen Framework

  Berin has already begun work on his Zen framework over at
  d-haven.org.  Berin's approach would also lead to easier component
  reuse, but this would mostly be due to a more forgiving and
  extensible container (I hope I'm getting that correct).  In the end
  this new container framework should be able to support the features
  of our current crop of containers but not be so constrained.

  In this case, we would end up with a much looser framework
  specification (i.e.- "No Framework") but still end up with a single
  platform.  That is, this Zen Framework would supercede our existing
  Avalon framework and containers.


  Leo's Container Aspects

  I'm still getting up to speed on this one, so Leo may need to step
  in and clarify, but essentially, this approach is to build a new way
  to assemble a container from multiple "aspects" or "facilities."
  These container parts would be independent of one another as much as
  possible and easily replaced or extended.

  The aspect approach certainly allows for multiple containers, but in
  effect, they would all be various combinations of aspects, component
  handlers, and facilities.  If I understand correctly this would also
  allow for more flexible framework constraints if one so desired --
  perhaps even "pluggable" framework specifications.  In this way,
  support could be added for the existing Avalon framework and
  container nuances while leaving the option of alternative specs
  open.


  Keeping the Existing Containers Approach

  Finally, another alternative is to simply maintain our current
  course and offer support for Fortress, Phoenix, and Merlin.  In this
  case, we would definitely be supporting multiple containers, though
  there is certainly interest in providing better cross-container
  support.  Of course, it is somewhat difficult to see exactly how to
  do that without resorting to an approach similar to ones listed
  above.


Other ideas of course exist, but what I wanted to do here was give a
sampling of the proposal presented so far and see how they align with
the
ideas of community scope and framework specification.  I'm not doing
this so that we can hash out the merits of each one, but instead to
see how answering the more fundamental questions about Avalon's
mission makes the issue of which proposal much more academic.  At that
point, the remaining proposals would all be dealing with implementing
our mission, not inventing it as well.

See, separation of concerns. :)

Now, some final words:

We care about our users.  No one wants to leave users high and dry as
developers wonder off perusing some holy grail.  Any change in our
mission or any new roadmap would have to provide for the users of all
existing containers.  Such provisions are not hard to add to any of
the existing ideas, so no one should get too worried that support for
your favorite component or container is going to disappear.  Even if
we should all decide tomorrow which path to take, the existing
containers would remain (though perhaps without further development)
until a proper replacement existed.

So, you've put up with me this far.  Now what?

Well, that is exactly the point.  I feel before we can accept any of
the proposals outlined thus far, before we can adopt any sort of
roadmap, we need to have consensus on these basic issues of Avalon's
mission, namely the matters of community scope and framework
specification.  In order to come to a consensus on this, I propose:

  * We offer a period of up to one week for discussion of this matter
    This can include some discussion of the merits of the various 
    proposals; however, please avoid 'implementation creep' as much
    as possible.  Please state your feelings about the more general
    matters of Avalon's mission.  You may consider posting an email
    which answers the following questions:

    1. Why do I use Avalon?
    2. What do I feel Avalon's mission to be?
    3. Where do I see Avalon by the end of 2004?
    4. How do I feel about Avalon as an umbrella project vs. a single
       product?
    5. Should there be a formal framework specification?
    6. If so, what should it consist of?


  * If a clear consensus has not been reached after one week, a vote
    will be held.  The exact nature of the vote will depend, to a
    degree, on the proposal discussions.  Foreseeable items include:
    
     - Avalon as an umbrella project vs. a single product
     - An effort to define a TCK
     - Vote on a specific proposal listed above

I appreciate your patience with me.  I hope that I have clarified some
ideas here and opened some minds.  I may follow up with some further
emails exploring the "why's" behind each proposal and a better break
down of the various pros and cons.  While I'm not certain we can please
everyone, I do believe we can come to a common solution and move
forward in Avalon without every again worrying about our mission, our
vision, or the road ahead together.

Thanks,

-- 
 jaaron  <http://jadetower.org>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to