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