[Erp5-dev] ERP5 Release System - proposal
Jean-Paul Smets
jp at nexedi.com
Fri Sep 28 09:20:54 CEST 2007
Hi,
I created http://www.erp5.org/Discussion/ReleaseProcess
and will summarize discussion.
Regards,
JPS.
Shrenik Bhura a écrit :
> Hello,
>
> It would be beneficial if this valuable discussion could be moved and
> continued at the Discussions section of the wiki.
>
> I shall do it 24 hrs from now if all are fine with it. In case of any
> objections/thoughts please let me know prior to that.
>
> Thanks,
> SB
>
> Yoshinori Okuji wrote:
>
>> Hello Łukasz,
>>
>> On Thursday 27 September 2007 12:21, Łukasz Nowak wrote:
>>
>>
>>> We present our idea how to organise release management for ERP5. We
>>> would like to know your opinion about this idea. Any constructive
>>> comments as well as criticism are welcome. We are making this proposal
>>> in good faith - to provide the best possible solution in implementing
>>> and development of ERP5 system, to give as much as possible possibility
>>> to arise community of skilled developers around such great project as
>>> ERP5 is itself.
>>>
>>>
>> First of all, I would like to thank you for writing this proposal. I highly
>> appreciate that you have made significant effort towards a better maintenance
>> process.
>>
>> Let me describe how Nexedi has been maintaining the code, and succeeding in
>> implementing customers' projects so far:
>>
>> - All the code base, including Business Templates, unit tests, functional
>> tests, and many other types of tools, required for generic ERP5, has been
>> always published on the subversion repository. No permission is required to
>> access the source code at any time. Everything is immediately open to anybody
>> in the world freely. This way, more people can take part in the reviewing
>> process, and facilitating contribution. Also, developers recognize more
>> responsibility for the quality, because of the potential risk.
>>
>> - All the test results are sent to the public mailing list erp5-report every
>> day. People are free to check for the current status in the cutting-edge
>> development, thus it is easy to determine the latest stable revision from the
>> history of reports. If a result is good, but the system is still unstable,
>> this only means that we lack tests. Such tests should be complemented as soon
>> as possible, and contribution is very welcome.
>>
>> - Chanages are, in principle, peer-reviewed. Only trivial changes, such as
>> fixing a typo, do not require such a review. Some people are not allowed to
>> directly check in changes, when we still don't know the quality level of code
>> produced by them. Once a person proves that she has a good skill, we give
>> more permissions to her, so that we will not prevent her work. However, even
>> experienced developers, such as me and Jean-Paul, need a peer-review, before
>> committing a significant change. This way, although it may not be perfect,
>> the quality of software is kept acceptally good all the time. Note that I
>> have been using the same policy in another Free Software project for many
>> years successfully.
>>
>> - Backward compatibility is respected all the time. We break backward
>> compatibility, only if it is inevitable. Incompatibility is an evil, because
>> it produces too much work at a time when upgrading a system. We have been
>> publishing the information on incompatibility we made in the public wiki at
>> www.erp5.org, so that others will not get troubled. Still, we are always
>> trying to reduce incompatibility, and only deprecate old usage.
>>
>> - Code base used for a customer's project is taken out of the public
>> subversion repository, under the control by a project manager. A decision is
>> made mostly based on the status of unit tests and functional tests, but also
>> with reviwing recent changes of the code, because some kind of problems may
>> not be very visible only with automatic testing. Then, the code base is
>> upgraded from time to time (the frequency depends on the constraints in a
>> project) so that bug fixes and feature enchancement are incorporated. Again,
>> the decision of which revision should be taken is based on the same criteria
>> as above, as well as project conditions in some cases. This way, we can
>> implement a stable system without much trouble.
>>
>> As the technical leader of ERP5, I have been thinking of how to make releases
>> for some years, in a way that the maintenance cost would be negligible, and
>> woouldn't disturb development and contribution. The important questions are:
>> When and How. I consider that there is no question about "Why". As you
>> pointed out, releases make things more apparent and visible, so they are
>> definitely nice to have.
>>
>> Here are some of my ideas:
>>
>> - When
>>
>> In my understanding, there are three different ways to manage the timings of
>> making releases.
>>
>> One of them is feature-basis. When something significant is made, a new
>> release is published. This is often used in proprietary software products for
>> marketing purpose. Then, bug fixes are provided only in the form of patches.
>> In Open Source development, this does not make sense very much, since patches
>> can be included from the beginning. Instead, feature enhancement increments a
>> major version. For now, I am not talking about how to name versions, so I
>> don't take this way into consideration any more.
>>
>> Another is regularity-basis. If I understand correctly, this is the same as
>> your suggestion. In this scheme, releases are made in the same frequency, no
>> matter whatever is happening. The advantage is that it is guaranteed that the
>> realtime characteristics of releases against the head is quite good, that is,
>> the distribution of delays behind the head is minimized. However, this way
>> has a critical drawback that it does not reflect the reality of development.
>> Sometimes a significant amount of development is performed in a short term,
>> and sometimes not. As the nature of development, changes, in particular,
>> which address new problems, tend to make software less stable. I will discuss
>> this issue more below.
>>
>> The other is quality-basis. A new release is made when the head has good
>> quality of code. This is rather the reverse of the regularity-basis, so the
>> pros/cons are also reversed. This proceeds with the reality of development,
>> thus a delay can be potentially huge, but the quality of a release is well
>> maintained.
>>
>> Of course, in most projects, these ways are more or less mixed. Even if the
>> quality-basis approach is taken, it does not make sense to make a new release
>> every day, only because the quality is high. Even with the regularity-basis
>> one, if the quality cannot meet criteria on time, a delay must be inserted to
>> prevent catastrophy. Many factors should be taken into consideration to keep
>> good release management.
>>
>> As you might know, I have +10-year experience in many other Open Source/Free
>> Software projects. And, I have tried both the regularity-basis and
>> quality-basis ways. Overall, I have found that the quality-basis works far
>> better, because, for example, when a problem can be resolved appropriately by
>> a certain few people, and if they are not available for some reason for a
>> while, the regularity gets broken so easily. Enforcing a release quickly,
>> simply because of the policy, only produces unusable software.
>>
>> Also, I have found that release management is far from trivial. Of course, as
>> you suggested, we use the result of tests for making estimate on stability,
>> but tests may not cover everything. It is sometimes because not all tests are
>> implemented yet. It is sometimes because managers are not capable of
>> determining whether software is stable enough or not. Especially in the
>> preparation of a new release, bug fixes must be encouraged, but contributors
>> have their own time constraints, and may not always follow a release cycle.
>> In this case, managers must be able to define what bug fixes can be postponed
>> with the idea of possible danger, and address problems by themselves,
>> whenever necessary.
>>
>> Another perspective is how to facilitate people to contribute. Usually,
>> excellent developers want good feedback from managers. If they feel that
>> managers fully understand their changes, and evaluate the contribution
>> appropriately, they tend to help managers. Otherwise, they stop. This is not
>> related to whether they are paid or not. For instance, although workers at
>> Nexedi are paid, they are not always paid to contribute publicly. This part
>> really depends on their feeling and will. If they think that managers would
>> not understand their effort, they will just put changes locally and hide
>> them. This has been always the same as in volunteer-based projects, so I am
>> rather sure. Therefore, I believe that highly skilled persons must be
>> selected as release managers for ERP5. Otherwise, release management will
>> corrupt.
>>
>> - How
>>
>> There are two matters to consider: how many branches should be maintained or
>> developed, and how long a branch should be maintained.
>>
>> The simplest approach is to use a single trunk, and no other branch. This is
>> the current way. The benefit is that all the effort heads towards one place,
>> so the efficiency of development is very high. We do not need to worry about
>> forking. The drawback is that the quality can be random along the time, no
>> matter however much effort is put into stabilization.
>>
>> The semi-simple approach is, as you proposed, to use a main trunk, and one
>> branch to keep stability. And, to abandone older branches, once a new branch
>> is created. This is somehow easy and realistic. The benefit is that, without
>> having a lot of maintenance cost, stability is more or less ensured on a
>> branch. The drawback is that this way additionally requires porting changes
>> between a trunk and a branch, thus the development energy is scattered, and
>> extra effort and time are required for the maintenance.
>>
>> For now, I compare only these two. Again, I have experience with both
>> approaches in the past. In short, I met difficulty in the latter approach,
>> because the cost of porting patches was quite higher than I expected. After
>> all, I gave it up, and I chose a single trunk method.
>>
>> The way I did was the following: when I started to feel that I wanted to make
>> a new version, for example, because we had a good set of new functionality, I
>> forced people to stop writing a new feature, but encouraged people to test
>> the head, and fix it. In the meantime, all patches sent to me were waited,
>> and kept pending. Once I was satisified with the quality of code, I put a tag
>> and release it. Then, I restarted the normal cycle of development, and
>> integrating pending contribution.
>>
>> Actually, this was so effective. All contributors understood that this was
>> required, and accepted that patches were in a pending state. Besides stopping
>> people to modify the head brutally, no extra cost was raised.
>>
>> Surely, we must analyze if this way is effective for ERP5 as well, but I feel
>> that this is more appropriate.
>>
>> The reason is really the cost. Unfortuantely, nobody is a superman. I don't
>> think it is a bad thing to have a stable branch, but at the same time, I
>> doubt if it is feasible. If we use branching, another team for a branch would
>> be necessary to be formed, just like the security team in Debian, because the
>> backporting is surprisingly hard and time-consuming.
>>
>> If anybody wants to perform the backporting job, I would appreciate very much.
>> But be prepared that it is not trivial at all. One must be able to say what
>> is a pure fix, and must be able to segregate safe parts of patches from a
>> trunk, and adapt API usage, and so on. For now, I don't think this is
>> feasible with the current size of our community, but I would be very happy if
>> I am wrong.
>>
>> So, at the moment, my suggestion is to use a single trunk. We have proven that
>> writing tests for a good coverage makes projects successful, because tests
>> always notify us of the current status, and what must be fixed, without any
>> branching. Release managers should promote people to write more tests for
>> missing parts, and negotiate with developers when next release should be
>> made, so that others can collaborate.
>>
>> Now, this mail is getting too long, but let me describe some more additional
>> notes.
>>
>> - It is a very good idea to describe API changes. We already do upgrade notes,
>> but this is a nice complement.
>>
>> - Upgrade tests must be automated very well, otherwise it is too costly. Not
>> only unit tests, but also functional tests must be performed. Currently, the
>> number of functional tests is not good enough, in particular about
>> configuration-related stuff. Contribution is very welcome.
>>
>> - Release management may not be independent of development management. Both
>> are very tightly coupled, because releasing depends on the status of
>> development. Only experts can perform this kind of job, so that other
>> developes will listen to their advise.
>>
>> - I myself prefer co-maintenance, that is, having multiple maintainers. This
>> has a significant advantage in that even if one is not available (sick, busy,
>> or whatever), the project will not be stalled. I was proposed to be a
>> co-maintainer in a project, and it worked very well, so I'm proposing others
>> to do the same with me these days. I like it. For ERP5, 2-3 persons will be
>> good. Having too many is no good.
>>
>> I hope my message would be useful for further discussion. Please let me know
>> what you think.
>>
>> Regards,
>> YO
>>
>>
>
>
--
Jean-Paul Smets-Solanes, Nexedi CEO - Tel. +33(0)6 62 05 76 14
Nexedi: Consulting and Development of Libre / Open Source Software
http://www.nexedi.com
ERP5: Libre/ Open Source ERP Software for small and medium companies
http://www.erp5.org
More information about the Erp5-dev
mailing list