| | 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 | }}} |