release_policy.rfc.txt 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. ***********************************************************************
  2. ********************* Release Policy (RFC) ****************************
  3. ***********************************************************************
  4. We suggest this structure of the proposal document as part of a tiny
  5. social process in order to find a decision in a cooperativ and common
  6. way.
  7. I. Driver
  8. =========
  9. (What is the problem and what solution did we find?)
  10. In the past it was sometimes unclear when and how the community would reach its
  11. next release. Members were lacking in orientation and felt demotivated.
  12. Another minor concern not yet analysed in depth was the expectation to show the
  13. public that the GNUnet project is still active and making progress. With an old
  14. release distributed by popular linux distributions it was hard to showcase
  15. people the GNUnet features and encourage to participate in the project.
  16. To show people how the GNUnet project is releasing its software we hereby
  17. document the current release model:
  18. * All main development (e.g. towards 0.12.x) continues on master.
  19. * Developers can continue to develop features in their own feature
  20. branches, but are encouraged to frequently merge into master (as long as they
  21. don't break the build) to avoid divergence and to detect issues from a
  22. merge/rebase early.
  23. * 0.11.x releases *must* be protocol-compatible to 0.11.0. So once
  24. master is NOT protocol-compatible to 0.11.0, development for 0.11.x
  25. must continue in an 0.11-branch where we only cherry-pick those
  26. changes from master that preserve protocol-compatibility.
  27. * better CI may allow us to detect breaking changes before merges in the future
  28. (but we shall never fault anybody for breaking stuff in master in non-obvious
  29. ways);
  30. * actual _release policy_:
  31. - tests must pass
  32. - no compiler warnings for -Wall
  33. - acceptance tests (manual feature test) must succeed
  34. - no known "release critical" bugs (where RC has no formal definition,
  35. mostly we rather explicitly declare certain bugs as "not critical")
  36. - Whenever API changes happen the person making that changes should update
  37. dependencies or at least work with people who hack on the dependencies to
  38. coordinate the adjustments
  39. o buildbots are happy (if running)
  40. o static analysis is happy (if available, false-positives => ignore)
  41. o documentation is reasonably up-to-date
  42. + reasonable test coverage (if too terrible => move subsystem to experimental?)
  43. + texinfo (HTML+PDF) and doxygen happy? Ideally without warnings!
  44. + nobody screaming bloody murder because of almost-completed features/bugfixes
  45. almost ready to be merged?
  46. Legend: -: absolutely mandatory; o: important; +: nice to have
  47. For further information see: https://trunkbaseddevelopment.com/
  48. II. Evaluation Criteria
  49. =======================
  50. (what are criteria to interpret the results as success if we review
  51. the problem and solution after a year or so)
  52. III. Concerns (of team members)
  53. ===============================
  54. (if there are concerns of team members, write them down here to later
  55. review)
  56. I disagree that "bugs tend to accumulate until they are not managable".
  57. The real issue is that neither writing testcases nor fixing bugs are
  58. fun tasks volunteers like to do. As you write yourself: you want a
  59. sense of achievement, recognition, "new features". So as long as that
  60. is what you are motivated to do, you will not get stable, well-tested
  61. code. I don't have a magic bullet to motivate you to write more tests,
  62. or to improve existing tests. -CG
  63. Your argument is good. Two or three of us thought that the problem is about
  64. missing releases which we feld demotivating. We thought, we were stuck
  65. somewhere. But as you state, it is us not doing the necessary work. What I
  66. still find useful is to document the release process. In consequence I
  67. changed the problem statement. -xrs
  68. I also disagree that releases have to be 'known bug free'. That bar is
  69. way too high. However, there are obviously 'critical' bugs, but what
  70. they are is another debate. But not all bugs are critical. Also,
  71. I would distinguish between 'standard' and 'experimental' subsystems.
  72. Experimental subsystems should build. They don't have to run, or do
  73. anything useful. Not even tests have to pass for a release IMO. -CG
  74. Thank you, I agree and changed it. -xrs
  75. Git is also not a "release model". Git is a software development
  76. tool. But introducing branches in Git won't fix bugs. It also won't
  77. improve test coverage. It won't test the code on a broad range of
  78. platforms. It also doubt it will give you the recognition you crave.
  79. More importantly, what you describe is already happening, and
  80. partially has contributed to the problems. Bart kept his own CADET
  81. hacks in his personal branch for years, hence without much feedback or
  82. review. The secushare team kept their patches in their own branch,
  83. hence revealing interesting failure modes when it was finally merged.
  84. Martin kept some of his ABE-logic in his own branch (that one was
  85. merged without me noticing major problems). Anyway, what you propose
  86. as Option 1 is already largely done, except that certain CI tasks
  87. simply cannot be productively done pre-merge right now (and I'm all
  88. for improving that situation). -CG
  89. With resprect to changes kept in branches the reason why I personally keep
  90. changes back is because it takes very long for me to get something really
  91. working in C. Before that I either not worth it or I don't want to blame
  92. other before not being sure it's not my fault.
  93. Can we track branches? Can we write a little cronjob that checks for branches
  94. that are to long undercover with the aim to recommend the responsible person
  95. to merge soon?
  96. - xrs
  97. Finally, there is one last elephant with respect to branches and
  98. merging that I would like you to consider. Given that GNUnet is highly
  99. modular, you have largely benefited from the modular architecture and
  100. been able to hack in your respective corners, unaffected by other
  101. modules (modulo bugs in dependencies). That is great, and the desired
  102. development mode. It has the critical advantage that bugs in modules
  103. that nobody depends upon (auction, rps, social) can be in 'master' and
  104. won't disturb anything. As most new development usually happens on the
  105. leaves of the dependency graph, that is great. However, occasionally
  106. there are architectural changes. Not of the type where the graph
  107. changes, but where key API assumptions change. We recently had one for
  108. the GNU Name System with the dropping of ".gnu". Before, CADET
  109. changed the semantics and parameter for 'port'. In the future, CORE
  110. will introduce protocol versioning. Whenever such a change happens,
  111. it usually falls upon the person making that change to update
  112. dependencies as well (or at least to work with people who hack on the
  113. dependencies to coordinate the adjustments). That way, changing an
  114. API for in-tree dependencies is a minor nuisance. However, if
  115. branches exist, making sure that API changes do not break _any_ branch
  116. somewhere is impractical. So at least at times where "major" API
  117. rewrites are happening, it is important to minimize the number of
  118. branches. -CG
  119. Thank you for clarifying. I added the API aspect above. -xrs
  120. IV. Doing
  121. =========
  122. (who does what within which time frame?)
  123. Let me list what I think needs doing:
  124. 1) Better CI setup: build on multiple platforms, build of
  125. "arbitrary" branches, reporting of regressions with
  126. decent diagnostics (!) to developers (not the crap
  127. Gitlab gives where I don't even easily get a stack
  128. trace on a core dump).
  129. 2) A culture of fixing "other people"'s bugs: test case failures,
  130. portability issues, Mantis reports, all the non-sexy
  131. stuff. Not the 'psycstore' was written by tg, so no
  132. need for !tg to try to fix it, or the "I use sqlite,
  133. why should I bother with postgres?"-crap I have heard
  134. too often.
  135. 3) Improving test cases: better code coverage, more corner
  136. cases, complex deployment scenarios (NAT!), etc.;
  137. less manual testing by hand, more writing automated
  138. tests.
  139. 4) There are also some bigger architectural changes ahead
  140. that I have mentioned in other places. Without those,
  141. we won't be able to serve non-expert users. So help
  142. with those would be welcome, but in terms of _process_
  143. I think 1-3 is what matters.
  144. Note that none of this really adds up to a "release policy".
  145. We should thing and talk about point 2 and 3 more in depth with the question
  146. in mind, how to make this task more attractive for the community :-)
  147. V. Previous Versions
  148. ====================
  149. (if we found some flaws in the solution, and we want to change the
  150. release policy, we document the old ones here as previous versions.
  151. the goal is establish a learn process.)
  152. IV. References
  153. ==============
  154. (if there are references to paper, web pages and other sources.)