Changes between Initial Version and Version 1 of AlternateProcessProposal


Ignore:
Timestamp:
Jun 11, 2007, 3:24:26 PM (15 years ago)
Author:
Nicola Musatti
Comment:

Initial version

Legend:

Unmodified
Added
Removed
Modified
  • AlternateProcessProposal

    v1 v1  
     1{{{
     2#!html
     3<h1>The Boost Development Process - A proposal</h1>
     4<h2>Abstract</h2>
     5With this document I would like to present my contribution to the
     6currently ongoing discussion on how to improve the Boost development
     7process. I tried to focus on changes that may be applied now,
     8in the 1.35 release time frame, rather than envision a more
     9revolutionary approach that would take a
     10long time to be put in practice. For this reason I tried to avoid
     11placing requirements on the availability of tools that would take a
     12significant amount of
     13time to be developed. Most of the concrete changes I
     14suggest revolve around the future structure of the Boost Subversion
     15repository and the ways to use it, as I expect that this will already
     16require a significant amount of work and impact the every day activity
     17of each developer.<br>
     18
     19The key elements of my proposal are a three part Subversion
     20repository structure and a staged development process, inspired by the
     21one used for GCC. <br>
     22
     23I also concentrated on the changes
     24with respect to the current process and did not attempt to provide a
     25complete description.<br>
     26
     27<h2>The Subversion repository</h2>
     28The Subversion repository should be divided in the following areas:<br>
     29
     30<ul>
     31  <li><span style="font-family: monospace;">development</span>
     32- This shall contain one directory for each library, under which the
     33customary Subversion directories shall be found: <span style="font-family: monospace;">trunk</span>, <span style="font-family: monospace;">tags</span> and <span style="font-family: monospace;">branches</span>.
     34Subdirectories will be under full control of their respective library
     35owners who shall be free to adopt the tagging/branching policy of their
     36preference.</li>
     37</ul>
     38
     39<div style="margin-left: 40px;"><span style="font-family: monospace;">development<br>
     40&nbsp;+spirit<br>
     41&nbsp;| +trunk<br>
     42&nbsp;| | +boost<br>
     43&nbsp;| | | +spirit<br>
     44&nbsp;| | +libs<br>
     45&nbsp;| | &nbsp; +spirit<br>
     46&nbsp;|&nbsp;+tags<br>
     47&nbsp;|&nbsp;+branches<br>
     48&nbsp;+serialization</span></div>
     49
     50<ul>
     51  <li><span style="font-family: monospace;">integration</span>
     52- This
     53shall be structured as the current Boost development tree in CVS and
     54will play the role currently played by both <span style="font-family: monospace;">HEAD</span> and the
     55Release
     56Candidate branches.</li>
     57
     58  <li><span style="font-family: monospace;">release</span>
     59- This shall
     60also be structured as the current Boost development tree and will
     61mostly serve as a work area for the release manager and as an official
     62source for the most current stable version.</li>
     63</ul>
     64
     65Developers will be free to choose whether to base their development
     66environment on the Integration branch, the Release branch or some
     67previous revision of either, combined with a development branch of
     68their library, and possibly also of some other libraries theirs depends
     69on.<br>
     70
     71Tests will be continuously run on the integration branch to which
     72developers will merge their work when they see fit, provided they
     73follow the restrictions placed by the current development stage.<br>
     74
     75<h2>The release cycle</h2>
     76Each release cycle should take three months and be divided in three one
     77month stages:<br>
     78
     79<ul>
     80  <li>During Stage 1 new library additions and major changes to
     81existing ones shall be allowed. It is understood that during this stage
     82the integration branch may remain "broken" for short periods of time,
     83where by broken it is meant that checkins related to one library may
     84cause tests in other libraries or the overall build to fail. Developers
     85are not expected to give precedence to handling failed tests in their
     86own libraries during stage 1.</li>
     87
     88  <li>In Stage 2 only less extensive changes to existing
     89libraries
     90shall be allowed. Developers whose checkins to integration cause
     91breakage are expected to give precedence to fixing such problems. The
     92Release Manager may ask developers to back out their changes if s/he
     93feels that either they are too extensive or fixing problems takes too
     94long. Developers are encouraged to deal with failing tests in their
     95libraries, but "all green" test results are not an objective for this
     96stage.</li>
     97
     98  <li>Stage 3 is devoted to bug fixing and to preparing for
     99release.
     100All activity on the integration branch shall be devoted to ensure that
     101tests either pass or are marked expected on all the primary platforms.
     102When&nbsp;"all green" test results are achieved, the Release
     103Manager
     104will merge the integration branch &nbsp;to the release one. Towards
     105the end of this stage the Release Manager will evaluate, together with
     106the developers, whether the latest revision on the Release branch is a
     107reasonable candidate for official release or additional time should be
     108devoted to try and reach an additional, more complete "all green"
     109revision. When the agreed upon revision becomes available the Release
     110Manager proceeds to
     111package the release. In case of delays an attempt shall be made to
     112preserve the subsequent release cycle by compressing its stage 1 and
     113possibly stage 2 phases; should a release be completed earlier than
     114scheduled the time saved shall be devoted to the subsequent stage 1 and
     1152 phases.</li>
     116</ul>
     117
     118<h2>Supported platforms and testing</h2>
     119At the start of a release cycle the set of currently supported
     120platforms should be evaluated. The minimum non negotiable criterium for
     121the inclusion of a platform is the availability of a volunteer to run
     122the regression tests&nbsp;for the duration of the release cycle.
     123Ideally one or more platform mantainers should be identified who are
     124willing to help developers with problems specific to their platform.
     125This is especially important for less common platforms or compilers.
     126Other criteria for the selection of supported platforms are beyond the
     127scope of this document.<br>
     128
     129The chosen platforms are assigned to a core set of testing volunteers,
     130who commit to running tests regularly for the duration of the release
     131cycle. Each single platform/compiler/variant combination should only be
     132tested by a single volunteer. During stages 1 and 2 test results for
     133additional combinations are accepted and included in the result
     134reports, even if they are sporadical. Tests that are older than a given
     135amount of time are excluded from the reports. During stage 3 only test
     136results for the supported platforms are included in the reports.<br>
     137
     138Tests are run continuously on the integration branch, except that the
     139Release Manager may ask that a test run be performed on the release
     140branch instead, to ensure that merging didn't cause any problem.<br>
     141
     142<h2>Tools present and future</h2>
     143Apart from issues connected with the move to Subversion, the present
     144proposal is meant to be applicable without introducing new tools or
     145modifying the existing ones. On the other hand there are a few
     146improvements that would be desirable.<br>
     147
     148First and foremost the reliability of incremental tests should be
     149verified and fixed.<br>
     150
     151Developers should be encouraged to run tests locally in their
     152development environment on as many compilers as possible. This is
     153already possible with the present tool combination, but in perspective
     154it would be a very good thing if the very same tools used for official
     155regression tests could be made to work locally.<br>
     156
     157Another area where an increase in ease of use would be desirable is the
     158specification of expected errors. At the very least splitting the
     159current single file configuration among the libraries should be
     160considered.
     161
     162<h2>Evolution</h2>
     163Many interesting ideas have emerged from the ongoing discussion that,
     164while highly desirable, cannot be put in practice in a short time,
     165mainly due to the requirements they place on the development
     166infrastructure. While the main focus of this proposal is what can be
     167put in practice for the next release cycle, I believe that some of
     168these idea should be considered as an evolution path.
     169
     170<h3>Dependency management and&nbsp;partitioning</h3>
     171In the not so long run the necessity of partitioning Boost in more
     172manageable packages will have to be addressed. In this respect work on
     173a plan to takle issues such as inter-library dependency management and
     174package level versioning should start as soon as possible.<br>
     175
     176On the other hand even a sensible decision on the course to take is
     177going to take months and we cannot wait that long to address the
     178problems of the current development process. In order to limit the risk
     179of causing delays a complete strategy will have to be devised and
     180prototyped and all the required tools shall have to be developed and
     181tested before moving in such a direction.<br>
     182
     183Personally I'm not convinced that partitioning should take place at the
     184single library level, except for some of the larger ones. I also fear
     185that per library, on demand testing is going to prove too complicate to
     186be viable, however I admit that such topics should be given more
     187consideration. I'm also convinced that proponents of switching to a
     188single library oriented process haven't addressed integration issues in
     189a convincing way.&nbsp; &nbsp; <br>
     190
     191<h3>Financial support</h3>
     192One topic that wasn't addressed so far is how to ensure that sufficient
     193time is devoted, not only to library development but above all to
     194management. In my opinion the only definitive answer is professional
     195involvement, i.e. Boost needs a few individuals to devote paid time to
     196it. I realize that this is a thorny issue, because it contrasts with
     197Boost's current status of non-entity, but I'm convinced that part of
     198the problem has to do with the fact that voluntary work alone cannot
     199guarantee the degree of continuous commitment that a project this size
     200requires, the heroic efforts put in by some of the most experienced
     201people around here notwithstanding.<br>
     202
     203At the very least companies that use Boost for commercial development
     204should consider hiring experts if they require a superior support level
     205or some different form of packaging.
     206
     207<h2>Open issues</h2>
     208This proposal fails to address several important topics:
     209<ul>
     210  <li>Testing of release variants. It is certainly desirable that
     211at least for the most popular platforms regression tests are run for
     212both the debug and the release variant. The main obstacle is resource
     213availability, even though the rationalization of the current resources
     214may produce some benefit in this respect.</li>
     215
     216  <li>It has been correctly pointed out that release quality
     217criteria should include more than just regression test
     218results.&nbsp;</li>
     219
     220  <li>Providing tool support for the enforcement of stage policy
     221should be considered.</li>
     222
     223  <li>Some of the problems faced during the development of 1.34.0
     224have to do with communication among developers. These should also be
     225addressed. The languishing of bug reports is in my opinion related to
     226these problems.</li>
     227
     228  <li>This proposal should address how bugfix
     229releases should be handled. Hoping that they won't be necessary is not enough :-)</li>
     230
     231  <li>I believe it's way to early to address changes in our
     232numbering scheme.</li>
     233
     234  <li>I have no idea about what can be found at&nbsp;<span style="font-family: monospace;">http://beta.boost.org:8081/</span> ; I'm currently behind a firewall that blocks all http traffic that doesn't use port 80.</li>
     235</ul>
     236
     237<h2>Acknowledgements</h2>
     238
     239The ideas in this document draws on Beman Dawes's and Gennadiy Rozental's proposals, and on the
     240comments of many participants in the&nbsp;<a href="http://lists.boost.org/Archives/boost/2007/06/122705.php">Boost
     241Development Environment proposal</a> discussion thread.
     242}}}