[prev in list] [next in list] [prev in thread] [next in thread] 

List:       log4j-dev
Subject:    Re: AppenderSkeleton.isActive, etc
From:       Curt Arnold <carnold () apache ! org>
Date:       2005-02-28 17:25:22
Message-ID: a98ba559ad5d99191c5719ef903385bd () apache ! org
[Download RAW message or body]


On Feb 28, 2005, at 10:00 AM, Ceki Gülcü wrote:
> Curt's changes preserve absolute backward compatibility. Although
> quite reasonable, they add an additional layer of
> complexity. Preserving backward compatibility is a very important
> goal. At the same time, it can eventually lead to over-convoluted and
> unmaintainable code. In my opinion, it is more economical to ask
> authors of appenders to make small updates to their code in order to
> adapt to changes in log4j 1.3. Note that we are talking about small,
> easily performed adaptations. I believe that trying to preserve
> *perfect* backward compatibility is beyond our resources.
>
> To summarize, I think that log4j committers have to choose between:
>
> 1) For the sake of improvement, we allow for small changes, even in
>    core interfaces, at the cost of perfect backward compatibility.
>
> 2) No, perfect backward compatibility is an overriding principle, more
>    important than other considerations.
>
> Comments?
>

It shouldn't be a decision between an absolute fanatical perfect 
backwards compatibility and total chaos.  However if I had to choose 
one at this time I would choose fanatical backwards compatibility.  
What I have been suggesting is that our general policy is to preserve 
backwards compatibility and that we discuss any exceptions either on 
discovery or prior to committing and require a vote when we knowingly 
break backwards compatibility.

A substantial proportion of code that uses log4j has to run in the 
context of another application or server and has no control over the 
version of log4j that is in use.  I think it highly desirable that code 
that worked properly with 1.2 would continue to work properly.  If 
there are compelling reasons and no reasonable alternative, we could 
consider adding additional requirements (like adding the detach method 
RepositorySelector) that can work under both 1.2 and 1.3.  Only under 
the most extraordinary conditions, should we be forcing applications to 
choose between 1.2 and 1.3 or to add substantial complexity to be able 
to operate in both environments.

As I mentioned in a previous email, it appears that several significant 
projects have found themselves having to choose between 1.2 and 1.3.  
We should review the problems that they encountered and attempt to 
resolve them.  They are serving as advance warning of the problems that 
will be encountered in much greater number as log4j 1.3 is evaluated by 
the wider body of log4j users.  Breaking Hivemind may not be a big 
deal, but it may be a warning that we are breaking 10 or 100 times the 
number of non-ASF applications.

At this point I would consider the "core" interfaces like Appender and 
Layout nearly untouchable.  The have proven that they are sufficient to 
represent the essential characteristics of their abstraction.  Any 
additional enhancement or optimization could be exposed using 
additional interfaces or hidden within implementations.

In this particular instance, I would -1 both the additions to the 
Appender interface and the renaming of the activateOptions virtual 
method.  The objectives of both (as have been revealed so far) could be 
accomplished without breaking backwards compatibility with very minimal 
additional complexity.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic