Great Message Taher!

Jacques

Le 20/01/2020 à 11:50, Taher Alkhateeb a écrit :
Hello Mathieu and all,

Thank you for this interesting and engaging thread. Before I make my
input, I would like to note that Apache OFBiz and its community from
my experience is welcoming of change and improvements. In my earlier
days in the project we went through massive changes to the system that
made tremendous differences including:

- Moving from ant to gradle
- introducing unit tests
- Redesigning the startup logic and possible flags
- Changing the distribution mechanism (remote dependencies instead of
inside the code base)
- Changing folder structures in components
- many others

While working on all the above, I never faced major obstacles. But the
reason that I did not is I always made a complete, well written
argument about what I'm trying to implement. I always ask for a pair
of eyes to look at my code and give me feedback, and I always engage
with the community. In my opinion, disagreements made me do some of
the best pieces of code because I learn and grow from other people's
input.

The boundary of a public API does not necessarily need to be agreed
upon RIGHT NOW!. I don't think the best way to move forward is to
enforce agreeing on what we should done before hand.

Instead of setting rules and boundaries on what should and should not
be done, I recommend instead collaborating on all work, one piece at a
time. As I said, I've worked on very large issues indeed and had no
problem working it with others and making it eventually to the code
base.

So whenever there is a disagreement or differing points of view, why
not start a new thread specific to that topic and work it out.
Everybody wants the best for the project, and communication is the key
to moving us forward IMHO.

My 2 cents

Cheers,
Taher Alkhateeb

On Sun, Jan 12, 2020 at 4:56 AM Mathieu Lirzin
<mathieu.lir...@nereide.fr> wrote:
Hello Paul, Jacopo and Olivier,

Paul Foxworthy <p...@cohsoft.com.au.INVALID> writes:

Being clearer about it would be a good thing.  There is still the
potential that a change that seems simple and straightforward to one
contributor is disruptive to others. And if it truly is disruptive, we
should collaborate on what comes next. Are the benefits worth the
disruption? Should there be some sort of deprecation, phase-out or
backwards compatibility option? I can't clearly define what "big" is,
but I know it when I see it.
IMO “We Should collaborate” is wishful thinking, because in practice
what happens most of the time is that only one person is doing the work
that he/she is proposing and the rest is doing +1 or -1. When someone
objects it often just means more burden for the person doing the work
because the person objecting will just add extra requirements.

Don't get me wrong, I find that situation normal because nobody is doing
a better job than someone who is motivated about it. Moreover people
with “ideas” but which are not responsible for implementing those tend
to advocate less practicable ideas.

It is just that I don't think we should expect the community to work
collectively better than the norm by relying on collaboration to be able
to get things done.

Jacopo Cappellato <jacopo.cappell...@gmail.com> writes:

There will always be a tension between guaranteeing backward compatibility
for the existing user base and the efforts to maintain our codebase,
enhance/refactor/innovate it.
Considering the peculiar nature of OFBiz, I don't think that trying to
define the areas that are part of the "public API" and then guarantee
backward compatibility only for them, will resolve this tension. In fact
there may be cases in which the "public API" should change in a
non-backward compatible way such as:
* the cost of maintaining a backward compatible feature is too high for our
community (or there is not enough interest in the active community in
maintaining it)
* the change is required to fix a flaw or a security vulnerability
* some fundamental (and important to the community) architectural change
may not be backward compatible
* etc...
Specifying a public API does not mean necessarily preserving it. It just
mean knowing when a border is being crossed:

- The developer changing something that is part of that API
- The user using an undocumented mechanism that happen to be here.

Apart from this, even the definition of "public API" for OFBiz is
troublesome considering for example that potentially any OFBiz service can
be used by "client" code and as a consequence in theory our community
should never change the behavior (or remove) a service.
Ideally yes because the notion of services is about providing something
to others.  To reduce the compatibility cost it should be possible to
make “convenience” services that are only meant to be used locally by
other services, be implemented as a private/package level helper methods
instead of a service.

I don't have specific examples in mind but I am pretty sure that there
exist a lot of those.

There are cases (like the one that triggered this conversation) that may
involve some community discussion because it is difficult to figure out if
the cost (in terms of pains for our users) is worth the gain (in terms of
better/cleaner code): sometimes these discussions can be frustrating but if
we all try to stay open (to the other point of view), positive, flexible,
patient I am sure we will cope with them.
I agree that it is normal to spend some potentially long time discussing
the tradeoffs when considering a change that impact the public API
(whether it just adds a new feature or it breaks/deprecate existing
ones)

However knowing the boundaries between the public/private API is very
useful to understand each other and agree on the extent of those
tradeoffs.

For example in the current situation it happens that Michael is
considering “applications/component-load.xml” part of the implicit
public API¹ and as a consequence requires a community validation, a
deprecation period and a migration guides to be provided. When in the
same time I am considering it as an implementation detail that don't
need such extra work on my side.

Basically listening to each other in the context of an objection to a
change means putting all the burden on the framework developper which
either have to spend time convincing users that they should not use one
thing and migrate to another thing, or adding corner cases inside the
code to preverve the specific behavior expected by users.

Moreover even if the burden is all on the developer this still sucks
because it works only for users involved in the development (subscribed
to ML), but others will have to deal with their own unexpected breakage
without having the developer to help them.

Olivier Heintz <holiv...@apache.org> writes:

4) implementation detail or core choice, often, it's depend of point
of view you use On ERP development / implementation there are multiple
type of people working on it with each one, specifics knowledge,
usage, practice and point of view.  When someone says, it's a big
change, start by trusting him and find out which process is affected
to propose a solution; he doesn't want to block something, he wants to
help you come up with a better solution that solves more cases.
Given that it is very easy to get a convincing argument by saying
“people might depend on …”, I am rather skeptic.

Even if I trust others for providing valuable inputs or proposing good
ideas, I am confident that if someone happen to rely on any mechanism in
production that is considered for removal/rewrite he/she will always
choose a solution that make the person proposing the change to do
whatever is necessary to not require them to do a migration work.

Again I am not saying that this is wrong, I am just saying that this
natural force should be balanced with something assessing that only a
subset of all mechanisms are subjects to such argument and using the
complement of that subset mean that users are on their own and they
should be prepared for breaking changes.

6) what is OFBiz,
   - not only a public API ;-)
   - not only a framework
   - currently not a OOTB ERP  but I hope what, in future, there will contain 
some OOTB applications
In my long term view Apache OFBiz could be like linux, a core/kernel as small 
as possible with multiple components (the plugins) and so with some
distributions.
So, clearly, for me it is not possible to define the boundary between what is 
public (with backward compatibility) and what is only implementation.
Even on data model I can give some examples where not everyone will agree on 
what is in kernel and what is in components
I believe that any effort of modularizing the code base without relying
on a stable public API like moving plugins inside independent
repositories is doomed. I am personnally still not convince that seeking
for dozens of custom plugins is a good idea even with a stable public
API.

Regarding the core + plugins ideal, it is interesting that you brought
the linux kernel example because it is the perfect example of a
monolithic development process where every driver/module (plugin) that
seeks for backward compatibility must be maintained inside the main
repository because there is no guarantee on the interface between the
core and the plugins. A week ago, here is what Linus Torvalds was saying
to people considering developing a module for ZFS (a file system)
outside of the main repository [1].

I am curious about the data model example you have in mind?

[1] https://www.realworldtech.com/forum/?threadid=189711&curpostid=189841

¹ The question about “plugins/component-load.xml” is different because
there is a consensus on the fact that is part of public API however I
have the impression that it is still in alpha state given that plugins
mechanism is relatively new.

--
Mathieu Lirzin
GPG: F2A3 8D7E EB2B 6640 5761  070D 0ADE E100 9460 4D37

Reply via email to