Note: this deprecates the fine-grained, high-overlap cascading MAINTAINERS files,
and replaces them with a single top-level file, using a new structure:
* More coarse grained subsystems with dedicated teams of maintainers
* Core maintainers with a better-defined role and a wider scope (if it's
not in a subsystem, it's up to the core maintainers to figure it out)
* Architects
* Operators
This is work in progress, the goal is to start a conversation
Signed-off-by: Solomon Hykes <solomon@docker.com>
Signed-off-by: Erik Hollensbe <github@hollensbe.org>
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
Signed-off-by: Tibor Vass <teabee89@gmail.com>
Signed-off-by: Victor Vieux <vieux@docker.com>
Signed-off-by: Vincent Batts <vbatts@redhat.com>
| ... | ... |
@@ -1,9 +1,485 @@ |
| 1 |
-Solomon Hykes <solomon@docker.com> (@shykes) |
|
| 2 |
-Victor Vieux <vieux@docker.com> (@vieux) |
|
| 3 |
-Michael Crosby <michael@crosbymichael.com> (@crosbymichael) |
|
| 4 |
-.mailmap: Tianon Gravi <admwiggin@gmail.com> (@tianon) |
|
| 5 |
-.travis.yml: Tianon Gravi <admwiggin@gmail.com> (@tianon) |
|
| 6 |
-AUTHORS: Tianon Gravi <admwiggin@gmail.com> (@tianon) |
|
| 7 |
-Dockerfile: Tianon Gravi <admwiggin@gmail.com> (@tianon) |
|
| 8 |
-Makefile: Tianon Gravi <admwiggin@gmail.com> (@tianon) |
|
| 9 |
-.dockerignore: Tianon Gravi <admwiggin@gmail.com> (@tianon) |
|
| 1 |
+# Docker maintainers file |
|
| 2 |
+# |
|
| 3 |
+# This file describes who runs the Docker project and how. |
|
| 4 |
+# This is a living document - if you see something out of date or missing, |
|
| 5 |
+# speak up! |
|
| 6 |
+# |
|
| 7 |
+# It is structured to be consumable by both humans and programs. |
|
| 8 |
+# To extract its contents programmatically, use any TOML-compliant |
|
| 9 |
+# parser. |
|
| 10 |
+ |
|
| 11 |
+[Rules] |
|
| 12 |
+ |
|
| 13 |
+ [Rules.maintainers] |
|
| 14 |
+ |
|
| 15 |
+ title = "What is a maintainer?" |
|
| 16 |
+ |
|
| 17 |
+ text = """ |
|
| 18 |
+There are different types of maintainers, with different responsibilities, but |
|
| 19 |
+all maintainers have 3 things in common: |
|
| 20 |
+ |
|
| 21 |
+1) They share responsibility in the project's success. |
|
| 22 |
+2) They have made a long-term, recurring time investment to improve the project. |
|
| 23 |
+3) They spend that time doing whatever needs to be done, not necessarily what |
|
| 24 |
+is the most interesting or fun. |
|
| 25 |
+ |
|
| 26 |
+Maintainers are often under-appreciated, because their work is harder to appreciate. |
|
| 27 |
+It's easy to appreciate a really cool and technically advanced feature. It's harder |
|
| 28 |
+to appreciate the absence of bugs, the slow but steady improvement in stability, |
|
| 29 |
+or the reliability of a release process. But those things distinguish a good |
|
| 30 |
+project from a great one. |
|
| 31 |
+""" |
|
| 32 |
+ |
|
| 33 |
+ [Rules.bdfl] |
|
| 34 |
+ |
|
| 35 |
+ title = "The Benevolent dictator for life (BDFL)" |
|
| 36 |
+ |
|
| 37 |
+ text = """ |
|
| 38 |
+Docker follows the timeless, highly efficient and totally unfair system |
|
| 39 |
+known as [Benevolent dictator for |
|
| 40 |
+life](http://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life), with |
|
| 41 |
+yours truly, Solomon Hykes, in the role of BDFL. This means that all |
|
| 42 |
+decisions are made, by default, by Solomon. Since making every decision |
|
| 43 |
+myself would be highly un-scalable, in practice decisions are spread |
|
| 44 |
+across multiple maintainers. |
|
| 45 |
+ |
|
| 46 |
+Ideally, the BDFL role is like the Queen of England: awesome crown, but not |
|
| 47 |
+an actual operational role day-to-day. The real job of a BDFL is to NEVER GO AWAY. |
|
| 48 |
+Every other rule can change, perhaps drastically so, but the BDFL will always |
|
| 49 |
+be there, preserving the philosophy and principles of the project, and keeping |
|
| 50 |
+ultimate authority over its fate. This gives us great flexibility in experimenting |
|
| 51 |
+with various governance models, knowing that we can always press the "reset" button |
|
| 52 |
+without fear of fragmentation or deadlock. See the US congress for a counter-example. |
|
| 53 |
+ |
|
| 54 |
+BDFL daily routine: |
|
| 55 |
+ |
|
| 56 |
+* Is the project governance stuck in a deadlock or irreversibly fragmented? |
|
| 57 |
+ * If yes: refactor the project governance |
|
| 58 |
+* Are there issues or conflicts escalated by core? |
|
| 59 |
+ * If yes: resolve them |
|
| 60 |
+* Go back to polishing that crown. |
|
| 61 |
+""" |
|
| 62 |
+ |
|
| 63 |
+ [Rules.decisions] |
|
| 64 |
+ |
|
| 65 |
+ title = "How are decisions made?" |
|
| 66 |
+ |
|
| 67 |
+ text = """ |
|
| 68 |
+Short answer: EVERYTHING IS A PULL REQUEST. |
|
| 69 |
+ |
|
| 70 |
+Docker is an open-source project with an open design philosophy. This |
|
| 71 |
+means that the repository is the source of truth for EVERY aspect of the |
|
| 72 |
+project, including its philosophy, design, road map, and APIs. *If it's |
|
| 73 |
+part of the project, it's in the repo. If it's in the repo, it's part of |
|
| 74 |
+the project.* |
|
| 75 |
+ |
|
| 76 |
+As a result, all decisions can be expressed as changes to the |
|
| 77 |
+repository. An implementation change is a change to the source code. An |
|
| 78 |
+API change is a change to the API specification. A philosophy change is |
|
| 79 |
+a change to the philosophy manifesto, and so on. |
|
| 80 |
+ |
|
| 81 |
+All decisions affecting Docker, big and small, follow the same 3 steps: |
|
| 82 |
+ |
|
| 83 |
+* Step 1: Open a pull request. Anyone can do this. |
|
| 84 |
+ |
|
| 85 |
+* Step 2: Discuss the pull request. Anyone can do this. |
|
| 86 |
+ |
|
| 87 |
+* Step 3: Merge or refuse the pull request. Who does this depends on the nature |
|
| 88 |
+of the pull request and which areas of the project it affects. See *review flow* |
|
| 89 |
+for details. |
|
| 90 |
+ |
|
| 91 |
+Because Docker is such a large and active project, it's important for everyone to know |
|
| 92 |
+who is responsible for deciding what. That is determined by a precise set of rules. |
|
| 93 |
+ |
|
| 94 |
+* For every *decision* in the project, the rules should designate, in a deterministic way, |
|
| 95 |
+who should *decide*. |
|
| 96 |
+ |
|
| 97 |
+* For every *problem* in the project, the rules should designate, in a deterministic way, |
|
| 98 |
+who should be responsible for *fixing* it. |
|
| 99 |
+ |
|
| 100 |
+* For every *question* in the project, the rules should designate, in a deterministic way, |
|
| 101 |
+who should be expected to have the *answer*. |
|
| 102 |
+""" |
|
| 103 |
+ |
|
| 104 |
+ [Rules.review] |
|
| 105 |
+ |
|
| 106 |
+ title = "Review flow" |
|
| 107 |
+ |
|
| 108 |
+ text = """ |
|
| 109 |
+Pull requests should be processed according to the following flow: |
|
| 110 |
+ |
|
| 111 |
+* For each subsystem affected by the change, the maintainers of the subsystem must approve or refuse it. |
|
| 112 |
+It is the responsibility of the subsystem maintainers to process patches affecting them in a timely |
|
| 113 |
+manner. |
|
| 114 |
+ |
|
| 115 |
+* If the change affects areas of the code which are not part of a subsystem, |
|
| 116 |
+or if subsystem maintainers are unable to reach a timely decision, it must be approved by |
|
| 117 |
+the core maintainers. |
|
| 118 |
+ |
|
| 119 |
+* If the change affects the UI or public APIs, or if it represents a major change in architecture, |
|
| 120 |
+the architects must approve or refuse it. |
|
| 121 |
+ |
|
| 122 |
+* If the change affects the operations of the project, it must be approved or rejected by |
|
| 123 |
+the relevant operators. |
|
| 124 |
+ |
|
| 125 |
+* If the change affects the governance, philosophy, goals or principles of the project, |
|
| 126 |
+it must be approved by BDFL. |
|
| 127 |
+""" |
|
| 128 |
+ |
|
| 129 |
+ [Rules.DCO] |
|
| 130 |
+ |
|
| 131 |
+ title = "Helping contributors with the DCO" |
|
| 132 |
+ |
|
| 133 |
+ text = """ |
|
| 134 |
+The [DCO or `Sign your work`]( |
|
| 135 |
+https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work) |
|
| 136 |
+requirement is not intended as a roadblock or speed bump. |
|
| 137 |
+ |
|
| 138 |
+Some Docker contributors are not as familiar with `git`, or have used a web based |
|
| 139 |
+editor, and thus asking them to `git commit --amend -s` is not the best way forward. |
|
| 140 |
+ |
|
| 141 |
+In this case, maintainers can update the commits based on clause (c) of the DCO. The |
|
| 142 |
+most trivial way for a contributor to allow the maintainer to do this, is to add |
|
| 143 |
+a DCO signature in a Pull Requests's comment, or a maintainer can simply note that |
|
| 144 |
+the change is sufficiently trivial that it does not substantivly change the existing |
|
| 145 |
+contribution - i.e., a spelling change. |
|
| 146 |
+ |
|
| 147 |
+When you add someone's DCO, please also add your own to keep a log. |
|
| 148 |
+""" |
|
| 149 |
+ |
|
| 150 |
+ [Rules.holiday] |
|
| 151 |
+ |
|
| 152 |
+ title = "I'm a maintainer, and I'm going on holiday" |
|
| 153 |
+ |
|
| 154 |
+ text = """ |
|
| 155 |
+Please let your co-maintainers and other contributors know by raising a pull |
|
| 156 |
+request that comments out your `MAINTAINERS` file entry using a `#`. |
|
| 157 |
+""" |
|
| 158 |
+ |
|
| 159 |
+ [Rules."no direct push"] |
|
| 160 |
+ |
|
| 161 |
+ title = "I'm a maintainer. Should I make pull requests too?" |
|
| 162 |
+ |
|
| 163 |
+ text = """ |
|
| 164 |
+Yes. Nobody should ever push to master directly. All changes should be |
|
| 165 |
+made through a pull request. |
|
| 166 |
+""" |
|
| 167 |
+ |
|
| 168 |
+ [Rules.meta] |
|
| 169 |
+ |
|
| 170 |
+ title = "How is this process changed?" |
|
| 171 |
+ |
|
| 172 |
+ text = "Just like everything else: by making a pull request :)" |
|
| 173 |
+ |
|
| 174 |
+# Current project organization |
|
| 175 |
+[Org] |
|
| 176 |
+ |
|
| 177 |
+ bdfl = "shykes" |
|
| 178 |
+ |
|
| 179 |
+ # The chief architect is responsible for the overall integrity of the technical architecture |
|
| 180 |
+ # across all subsystems, and the consistency of APIs and UI. |
|
| 181 |
+ # |
|
| 182 |
+ # Changes to UI, public APIs and overall architecture (for example a plugin system) must |
|
| 183 |
+ # be approved by the chief architect. |
|
| 184 |
+ "Chief Architect" = "shykes" |
|
| 185 |
+ |
|
| 186 |
+ # The Chief Operator is responsible for the day-to-day operations of the project including: |
|
| 187 |
+ # - facilitating communications amongst all the contributors; |
|
| 188 |
+ # - tracking release schedules; |
|
| 189 |
+ # - managing the relationship with downstream distributions and upstream dependencies; |
|
| 190 |
+ # - helping new contributors to get involved and become successful contributors and maintainers |
|
| 191 |
+ # |
|
| 192 |
+ # The role is also responsible for managing and measuring the success of the overall project |
|
| 193 |
+ # and ensuring it is governed properly working in concert with the Docker Governance Advisory Board (DGAB). |
|
| 194 |
+ # |
|
| 195 |
+ # We are currently looking for a chief operator. Get in touch if you're interested! |
|
| 196 |
+ # |
|
| 197 |
+ "Chief Operator" = "spf13" |
|
| 198 |
+ |
|
| 199 |
+ [Org.Operators] |
|
| 200 |
+ |
|
| 201 |
+ # The operators make sure the trains run on time. They are responsible for overall operations |
|
| 202 |
+ # of the project. This includes facilitating communication between all the participants; helping |
|
| 203 |
+ # newcomers get involved and become successful contributors and maintainers; tracking the schedule |
|
| 204 |
+ # of releases; managing the relationship with downstream distributions and upstream dependencies; |
|
| 205 |
+ # define measures of success for the project and measure progress; Devise and implement tools and |
|
| 206 |
+ # processes which make contributors and maintainers happier and more efficient. |
|
| 207 |
+ |
|
| 208 |
+ |
|
| 209 |
+ [Org.Operators.security] |
|
| 210 |
+ |
|
| 211 |
+ people = [ |
|
| 212 |
+ "erw" |
|
| 213 |
+ ] |
|
| 214 |
+ |
|
| 215 |
+ [Org.Operators."monthly meetings"] |
|
| 216 |
+ |
|
| 217 |
+ people = [ |
|
| 218 |
+ "sven", |
|
| 219 |
+ "tianon" |
|
| 220 |
+ ] |
|
| 221 |
+ |
|
| 222 |
+ [Org.Operators.infrastructure] |
|
| 223 |
+ |
|
| 224 |
+ people = [ |
|
| 225 |
+ "jess", |
|
| 226 |
+ "crosbymichael" |
|
| 227 |
+ ] |
|
| 228 |
+ |
|
| 229 |
+ # The chief maintainer is responsible for all aspects of quality for the project including |
|
| 230 |
+ # code reviews, usability, stability, security, performance, etc. |
|
| 231 |
+ # The most important function of the chief maintainer is to lead by example. On the first |
|
| 232 |
+ # day of a new maintainer, the best advice should be "follow the C.M.'s example and you'll |
|
| 233 |
+ # be fine". |
|
| 234 |
+ "Chief Maintainer" = "crosbymichael" |
|
| 235 |
+ |
|
| 236 |
+ [Org."Core maintainers"] |
|
| 237 |
+ |
|
| 238 |
+ # The Core maintainers are the ghostbusters of the project: when there's a problem others |
|
| 239 |
+ # can't solve, they show up and fix it with bizarre devices and weaponry. |
|
| 240 |
+ # They have final say on technical implementation and coding style. |
|
| 241 |
+ # They are ultimately responsible for quality in all its forms: usability polish, |
|
| 242 |
+ # bugfixes, performance, stability, etc. When ownership can cleanly be passed to |
|
| 243 |
+ # a subsystem, they are responsible for doing so and holding the |
|
| 244 |
+ # subsystem maintainers accountable. If ownership is unclear, they are the de facto owners. |
|
| 245 |
+ |
|
| 246 |
+ # For each release (including minor releases), a "release captain" is assigned from the |
|
| 247 |
+ # pool of core maintainers. Rotation is encouraged across all maintainers, to ensure |
|
| 248 |
+ # the release process is clear and up-to-date. |
|
| 249 |
+ # |
|
| 250 |
+ # It is common for core maintainers to "branch out" to join or start a subsystem. |
|
| 251 |
+ |
|
| 252 |
+ |
|
| 253 |
+ |
|
| 254 |
+ people = [ |
|
| 255 |
+ "unclejack", |
|
| 256 |
+ "crosbymichael", |
|
| 257 |
+ "erikh", |
|
| 258 |
+ "icecrime", |
|
| 259 |
+ "jfrazelle", |
|
| 260 |
+ "lk4d4", |
|
| 261 |
+ "tibor", |
|
| 262 |
+ "vbatts", |
|
| 263 |
+ "vieux", |
|
| 264 |
+ "vish" |
|
| 265 |
+ ] |
|
| 266 |
+ |
|
| 267 |
+ |
|
| 268 |
+ [Org.Subsystems] |
|
| 269 |
+ |
|
| 270 |
+ # As the project grows, it gets separated into well-defined subsystems. Each subsystem |
|
| 271 |
+ # has a dedicated group of maintainers, which are dedicated to that subsytem and responsible |
|
| 272 |
+ # for its quality. |
|
| 273 |
+ # This "cellular division" is the primary mechanism for scaling maintenance of the project as it grows. |
|
| 274 |
+ # |
|
| 275 |
+ # The maintainers of each subsytem are responsible for: |
|
| 276 |
+ # |
|
| 277 |
+ # 1. Exposing a clear road map for improving their subsystem. |
|
| 278 |
+ # 2. Deliver prompt feedback and decisions on pull requests affecting their subsystem. |
|
| 279 |
+ # 3. Be available to anyone with questions, bug reports, criticism etc. |
|
| 280 |
+ # on their component. This includes IRC, GitHub requests and the mailing |
|
| 281 |
+ # list. |
|
| 282 |
+ # 4. Make sure their subsystem respects the philosophy, design and |
|
| 283 |
+ # road map of the project. |
|
| 284 |
+ # |
|
| 285 |
+ # #### How to review patches to your subsystem |
|
| 286 |
+ # |
|
| 287 |
+ # Accepting pull requests: |
|
| 288 |
+ # |
|
| 289 |
+ # - If the pull request appears to be ready to merge, give it a `LGTM`, which |
|
| 290 |
+ # stands for "Looks Good To Me". |
|
| 291 |
+ # - If the pull request has some small problems that need to be changed, make |
|
| 292 |
+ # a comment adressing the issues. |
|
| 293 |
+ # - If the changes needed to a PR are small, you can add a "LGTM once the |
|
| 294 |
+ # following comments are adressed..." this will reduce needless back and |
|
| 295 |
+ # forth. |
|
| 296 |
+ # - If the PR only needs a few changes before being merged, any MAINTAINER can |
|
| 297 |
+ # make a replacement PR that incorporates the existing commits and fixes the |
|
| 298 |
+ # problems before a fast track merge. |
|
| 299 |
+ # |
|
| 300 |
+ # Closing pull requests: |
|
| 301 |
+ # |
|
| 302 |
+ # - If a PR appears to be abandoned, after having attempted to contact the |
|
| 303 |
+ # original contributor, then a replacement PR may be made. Once the |
|
| 304 |
+ # replacement PR is made, any contributor may close the original one. |
|
| 305 |
+ # - If you are not sure if the pull request implements a good feature or you |
|
| 306 |
+ # do not understand the purpose of the PR, ask the contributor to provide |
|
| 307 |
+ # more documentation. If the contributor is not able to adequately explain |
|
| 308 |
+ # the purpose of the PR, the PR may be closed by any MAINTAINER. |
|
| 309 |
+ # - If a MAINTAINER feels that the pull request is sufficiently architecturally |
|
| 310 |
+ # flawed, or if the pull request needs significantly more design discussion |
|
| 311 |
+ # before being considered, the MAINTAINER should close the pull request with |
|
| 312 |
+ # a short explanation of what discussion still needs to be had. It is |
|
| 313 |
+ # important not to leave such pull requests open, as this will waste both the |
|
| 314 |
+ # MAINTAINER's time and the contributor's time. It is not good to string a |
|
| 315 |
+ # contributor on for weeks or months, having them make many changes to a PR |
|
| 316 |
+ # that will eventually be rejected. |
|
| 317 |
+ |
|
| 318 |
+ [Org.Subsystems.Documentation] |
|
| 319 |
+ |
|
| 320 |
+ people = [ |
|
| 321 |
+ "fredlf", |
|
| 322 |
+ "james", |
|
| 323 |
+ "sven", |
|
| 324 |
+ ] |
|
| 325 |
+ |
|
| 326 |
+ [Org.Subsystems.libcontainer] |
|
| 327 |
+ |
|
| 328 |
+ people = [ |
|
| 329 |
+ "crosbymichael", |
|
| 330 |
+ "vmarmol", |
|
| 331 |
+ "mpatel", |
|
| 332 |
+ "jnagal", |
|
| 333 |
+ "lk4d4" |
|
| 334 |
+ ] |
|
| 335 |
+ |
|
| 336 |
+ [Org.Subsystems.registry] |
|
| 337 |
+ |
|
| 338 |
+ people = [ |
|
| 339 |
+ "dmp42", |
|
| 340 |
+ "vbatts", |
|
| 341 |
+ "joffrey", |
|
| 342 |
+ "samalba" |
|
| 343 |
+ ] |
|
| 344 |
+ |
|
| 345 |
+ [Org.Subsystems."build tools"] |
|
| 346 |
+ |
|
| 347 |
+ people = [ |
|
| 348 |
+ "shykes", |
|
| 349 |
+ "tianon" |
|
| 350 |
+ ] |
|
| 351 |
+ |
|
| 352 |
+ [Org.Subsystem."remote api"] |
|
| 353 |
+ |
|
| 354 |
+ people = [ |
|
| 355 |
+ "vieux" |
|
| 356 |
+ ] |
|
| 357 |
+ |
|
| 358 |
+ [Org.Subsystem.swarm] |
|
| 359 |
+ |
|
| 360 |
+ people = [ |
|
| 361 |
+ "aluzzardi", |
|
| 362 |
+ "vieux" |
|
| 363 |
+ ] |
|
| 364 |
+ |
|
| 365 |
+ [Org.Subsystem.machine] |
|
| 366 |
+ |
|
| 367 |
+ people = [ |
|
| 368 |
+ "bfirsh", |
|
| 369 |
+ "ehazlett" |
|
| 370 |
+ ] |
|
| 371 |
+ |
|
| 372 |
+ [Org.Subsystem.compose] |
|
| 373 |
+ |
|
| 374 |
+ people = [ |
|
| 375 |
+ "aanand" |
|
| 376 |
+ ] |
|
| 377 |
+ |
|
| 378 |
+ |
|
| 379 |
+[people] |
|
| 380 |
+ |
|
| 381 |
+# A reference list of all people associated with the project. |
|
| 382 |
+# All other sections should refer to people by their canonical key |
|
| 383 |
+# in the people section. |
|
| 384 |
+ |
|
| 385 |
+ # ADD YOURSELF HERE IN ALPHABETICAL ORDER |
|
| 386 |
+ |
|
| 387 |
+ [people.aanand] |
|
| 388 |
+ Name = "Aanand Prasad" |
|
| 389 |
+ Email = "aanand@docker.com" |
|
| 390 |
+ Github = "aanand" |
|
| 391 |
+ |
|
| 392 |
+ [people.aluzzardi] |
|
| 393 |
+ Name = "Andrea Luzzardi" |
|
| 394 |
+ Email = "aluzzardi@docker.com" |
|
| 395 |
+ Github = "aluzzardi" |
|
| 396 |
+ |
|
| 397 |
+ [people.bfirsh] |
|
| 398 |
+ Name = "Ben Firshman" |
|
| 399 |
+ Email = "ben@firshman.co.uk" |
|
| 400 |
+ Github = "bfirsh" |
|
| 401 |
+ |
|
| 402 |
+ [people.ehazlett] |
|
| 403 |
+ Name = "Evan Hazlett" |
|
| 404 |
+ Email = "ejhazlett@gmail.com" |
|
| 405 |
+ Github = "ehazlett" |
|
| 406 |
+ |
|
| 407 |
+ [people.erikh] |
|
| 408 |
+ Name = "Erik Hollensbe" |
|
| 409 |
+ Email = "erik@docker.com" |
|
| 410 |
+ Github = "erikh" |
|
| 411 |
+ |
|
| 412 |
+ [people.erw] |
|
| 413 |
+ Name = "Eric Windisch" |
|
| 414 |
+ Email = "eric@windisch.us" |
|
| 415 |
+ Github = "ewindisch" |
|
| 416 |
+ |
|
| 417 |
+ [people.icecrime] |
|
| 418 |
+ Name = "Arnaud Porterie" |
|
| 419 |
+ Email = "arnaud@docker.com" |
|
| 420 |
+ Github = "icecrime" |
|
| 421 |
+ |
|
| 422 |
+ [people.jfrazelle] |
|
| 423 |
+ Name = "Jessie Frazelle" |
|
| 424 |
+ Email = "jess@docker.com" |
|
| 425 |
+ Github = "jfrazelle" |
|
| 426 |
+ |
|
| 427 |
+ [people.lk4d4] |
|
| 428 |
+ Name = "Alexander Morozov" |
|
| 429 |
+ Email = "lk4d4@docker.com" |
|
| 430 |
+ Github = "lk4d4" |
|
| 431 |
+ |
|
| 432 |
+ [people.shykes] |
|
| 433 |
+ Name = "Solomon Hykes" |
|
| 434 |
+ Email = "solomon@docker.com" |
|
| 435 |
+ Github = "shykes" |
|
| 436 |
+ |
|
| 437 |
+ [people.sven] |
|
| 438 |
+ Name = "Sven Dowideit" |
|
| 439 |
+ Email = "SvenDowideit@home.org.au" |
|
| 440 |
+ GitHub = "SvenDowideit" |
|
| 441 |
+ |
|
| 442 |
+ [people.tibor] |
|
| 443 |
+ Name = "Tibor Vass" |
|
| 444 |
+ Email = "tibor@docker.com" |
|
| 445 |
+ Github = "tiborvass" |
|
| 446 |
+ |
|
| 447 |
+ [people.vbatts] |
|
| 448 |
+ Name = "Vincent Batts" |
|
| 449 |
+ Email = "vbatts@redhat.com" |
|
| 450 |
+ Github = "vbatts" |
|
| 451 |
+ |
|
| 452 |
+ [people.vieux] |
|
| 453 |
+ Name = "Victor Vieux" |
|
| 454 |
+ Email = "vieux@docker.com" |
|
| 455 |
+ Github = "vieux" |
|
| 456 |
+ |
|
| 457 |
+ [people.vmarmol] |
|
| 458 |
+ Name = "Victor Marmol" |
|
| 459 |
+ Email = "vmarmol@google.com" |
|
| 460 |
+ Github = "vmarmol" |
|
| 461 |
+ |
|
| 462 |
+ [people.jnagal] |
|
| 463 |
+ Name = "Rohit Jnagal" |
|
| 464 |
+ Email = "jnagal@google.com" |
|
| 465 |
+ Github = "rjnagal" |
|
| 466 |
+ |
|
| 467 |
+ [people.mpatel] |
|
| 468 |
+ Name = "Mrunal Patel" |
|
| 469 |
+ Email = "mpatel@redhat.com" |
|
| 470 |
+ Github = "mrunalp" |
|
| 471 |
+ |
|
| 472 |
+ [people.unclejack] |
|
| 473 |
+ Name = "Cristian Staretu" |
|
| 474 |
+ Email = "cristian.staretu@gmail.com" |
|
| 475 |
+ Github = "unclejack" |
|
| 476 |
+ |
|
| 477 |
+ [people.vish] |
|
| 478 |
+ Name = "Vishnu Kannan" |
|
| 479 |
+ Email = "vishnuk@google.com" |
|
| 480 |
+ Github = "vishh" |
|
| 481 |
+ |
|
| 482 |
+ [people.spf13] |
|
| 483 |
+ Name = "Steve Francia" |
|
| 484 |
+ Email = "steve.francia@gmail.com" |
|
| 485 |
+ Github = "spf13" |
| ... | ... |
@@ -195,6 +195,14 @@ Don't know how to use that super cool new feature in the master build? Check |
| 195 | 195 |
out the master docs at |
| 196 | 196 |
[docs.master.dockerproject.com](http://docs.master.dockerproject.com). |
| 197 | 197 |
|
| 198 |
+How the project is run |
|
| 199 |
+====================== |
|
| 200 |
+ |
|
| 201 |
+Docker is a very, very active project. If you want to learn more about how it is run, |
|
| 202 |
+or want to get more involved, the best place to start is [the project directory](https://github.com/docker/docker/tree/project). |
|
| 203 |
+ |
|
| 204 |
+We are always open to suggestions on process improvements, and are always looking for more maintainers. |
|
| 205 |
+ |
|
| 198 | 206 |
### Legal |
| 199 | 207 |
|
| 200 | 208 |
*Brought to you courtesy of our legal counsel. For more context, |
| 201 | 209 |
deleted file mode 100644 |
| ... | ... |
@@ -1,147 +0,0 @@ |
| 1 |
-# The Docker Maintainer manual |
|
| 2 |
- |
|
| 3 |
-## Introduction |
|
| 4 |
- |
|
| 5 |
-Dear maintainer. Thank you for investing the time and energy to help |
|
| 6 |
-make Docker as useful as possible. Maintaining a project is difficult, |
|
| 7 |
-sometimes unrewarding work. Sure, you will get to contribute cool |
|
| 8 |
-features to the project. But most of your time will be spent reviewing, |
|
| 9 |
-cleaning up, documenting, answering questions, and justifying design |
|
| 10 |
-decisions - while everyone has all the fun! But remember - the quality |
|
| 11 |
-of the maintainers' work is what distinguishes the good projects from |
|
| 12 |
-the great. So please be proud of your work, even the unglamourous parts, |
|
| 13 |
-and encourage a culture of appreciation and respect for *every* aspect |
|
| 14 |
-of improving the project - not just the hot new features. |
|
| 15 |
- |
|
| 16 |
-This document is a manual for maintainers old and new. It explains what |
|
| 17 |
-is expected of maintainers, how they should work, and what tools are |
|
| 18 |
-available to them. |
|
| 19 |
- |
|
| 20 |
-This is a living document - if you see something out of date or missing, |
|
| 21 |
-speak up! |
|
| 22 |
- |
|
| 23 |
-## What is a maintainer's responsibility? |
|
| 24 |
- |
|
| 25 |
-It is every maintainer's responsibility to: |
|
| 26 |
- |
|
| 27 |
-1. Expose a clear road map for improving their component. |
|
| 28 |
-2. Deliver prompt feedback and decisions on pull requests. |
|
| 29 |
-3. Be available to anyone with questions, bug reports, criticism etc. |
|
| 30 |
- on their component. This includes IRC, GitHub requests and the mailing |
|
| 31 |
- list. |
|
| 32 |
-4. Make sure their component respects the philosophy, design and |
|
| 33 |
- road map of the project. |
|
| 34 |
- |
|
| 35 |
-## How are decisions made? |
|
| 36 |
- |
|
| 37 |
-Short answer: with pull requests to the Docker repository. |
|
| 38 |
- |
|
| 39 |
-Docker is an open-source project with an open design philosophy. This |
|
| 40 |
-means that the repository is the source of truth for EVERY aspect of the |
|
| 41 |
-project, including its philosophy, design, road map, and APIs. *If it's |
|
| 42 |
-part of the project, it's in the repo. If it's in the repo, it's part of |
|
| 43 |
-the project.* |
|
| 44 |
- |
|
| 45 |
-As a result, all decisions can be expressed as changes to the |
|
| 46 |
-repository. An implementation change is a change to the source code. An |
|
| 47 |
-API change is a change to the API specification. A philosophy change is |
|
| 48 |
-a change to the philosophy manifesto, and so on. |
|
| 49 |
- |
|
| 50 |
-All decisions affecting Docker, big and small, follow the same 3 steps: |
|
| 51 |
- |
|
| 52 |
-* Step 1: Open a pull request. Anyone can do this. |
|
| 53 |
- |
|
| 54 |
-* Step 2: Discuss the pull request. Anyone can do this. |
|
| 55 |
- |
|
| 56 |
-* Step 3: Accept (`LGTM`) or refuse a pull request. The relevant maintainers do |
|
| 57 |
-this (see below "Who decides what?") |
|
| 58 |
- + Accepting pull requests |
|
| 59 |
- - If the pull request appears to be ready to merge, give it a `LGTM`, which |
|
| 60 |
- stands for "Looks Good To Me". |
|
| 61 |
- - If the pull request has some small problems that need to be changed, make |
|
| 62 |
- a comment adressing the issues. |
|
| 63 |
- - If the changes needed to a PR are small, you can add a "LGTM once the |
|
| 64 |
- following comments are adressed..." this will reduce needless back and |
|
| 65 |
- forth. |
|
| 66 |
- - If the PR only needs a few changes before being merged, any MAINTAINER can |
|
| 67 |
- make a replacement PR that incorporates the existing commits and fixes the |
|
| 68 |
- problems before a fast track merge. |
|
| 69 |
- + Closing pull requests |
|
| 70 |
- - If a PR appears to be abandoned, after having attempted to contact the |
|
| 71 |
- original contributor, then a replacement PR may be made. Once the |
|
| 72 |
- replacement PR is made, any contributor may close the original one. |
|
| 73 |
- - If you are not sure if the pull request implements a good feature or you |
|
| 74 |
- do not understand the purpose of the PR, ask the contributor to provide |
|
| 75 |
- more documentation. If the contributor is not able to adequately explain |
|
| 76 |
- the purpose of the PR, the PR may be closed by any MAINTAINER. |
|
| 77 |
- - If a MAINTAINER feels that the pull request is sufficiently architecturally |
|
| 78 |
- flawed, or if the pull request needs significantly more design discussion |
|
| 79 |
- before being considered, the MAINTAINER should close the pull request with |
|
| 80 |
- a short explanation of what discussion still needs to be had. It is |
|
| 81 |
- important not to leave such pull requests open, as this will waste both the |
|
| 82 |
- MAINTAINER's time and the contributor's time. It is not good to string a |
|
| 83 |
- contributor on for weeks or months, having them make many changes to a PR |
|
| 84 |
- that will eventually be rejected. |
|
| 85 |
- |
|
| 86 |
-## Who decides what? |
|
| 87 |
- |
|
| 88 |
-All decisions are pull requests, and the relevant maintainers make |
|
| 89 |
-decisions by accepting or refusing pull requests. Review and acceptance |
|
| 90 |
-by anyone is denoted by adding a comment in the pull request: `LGTM`. |
|
| 91 |
-However, only currently listed `MAINTAINERS` are counted towards the |
|
| 92 |
-required majority. |
|
| 93 |
- |
|
| 94 |
-Docker follows the timeless, highly efficient and totally unfair system |
|
| 95 |
-known as [Benevolent dictator for |
|
| 96 |
-life](http://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life), with |
|
| 97 |
-yours truly, Solomon Hykes, in the role of BDFL. This means that all |
|
| 98 |
-decisions are made, by default, by Solomon. Since making every decision |
|
| 99 |
-myself would be highly un-scalable, in practice decisions are spread |
|
| 100 |
-across multiple maintainers. |
|
| 101 |
- |
|
| 102 |
-The relevant maintainers for a pull request can be worked out in 2 steps: |
|
| 103 |
- |
|
| 104 |
-* Step 1: Determine the subdirectories affected by the pull request. This |
|
| 105 |
- might be `src/registry`, `docs/source/api`, or any other part of the repo. |
|
| 106 |
- |
|
| 107 |
-* Step 2: Find the `MAINTAINERS` file which affects this directory. If the |
|
| 108 |
- directory itself does not have a `MAINTAINERS` file, work your way up |
|
| 109 |
- the repo hierarchy until you find one. |
|
| 110 |
- |
|
| 111 |
-There is also a `hacks/getmaintainers.sh` script that will print out the |
|
| 112 |
-maintainers for a specified directory. |
|
| 113 |
- |
|
| 114 |
-### I'm a maintainer, and I'm going on holiday |
|
| 115 |
- |
|
| 116 |
-Please let your co-maintainers and other contributors know by raising a pull |
|
| 117 |
-request that comments out your `MAINTAINERS` file entry using a `#`. |
|
| 118 |
- |
|
| 119 |
-### I'm a maintainer. Should I make pull requests too? |
|
| 120 |
- |
|
| 121 |
-Yes. Nobody should ever push to master directly. All changes should be |
|
| 122 |
-made through a pull request. |
|
| 123 |
- |
|
| 124 |
-### Helping contributors with the DCO |
|
| 125 |
- |
|
| 126 |
-The [DCO or `Sign your work`]( |
|
| 127 |
-https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work) |
|
| 128 |
-requirement is not intended as a roadblock or speed bump. |
|
| 129 |
- |
|
| 130 |
-Some Docker contributors are not as familiar with `git`, or have used a web based |
|
| 131 |
-editor, and thus asking them to `git commit --amend -s` is not the best way forward. |
|
| 132 |
- |
|
| 133 |
-In this case, maintainers can update the commits based on clause (c) of the DCO. The |
|
| 134 |
-most trivial way for a contributor to allow the maintainer to do this, is to add |
|
| 135 |
-a DCO signature in a Pull Requests's comment, or a maintainer can simply note that |
|
| 136 |
-the change is sufficiently trivial that it does not substantivly change the existing |
|
| 137 |
-contribution - i.e., a spelling change. |
|
| 138 |
- |
|
| 139 |
-When you add someone's DCO, please also add your own to keep a log. |
|
| 140 |
- |
|
| 141 |
-### Who assigns maintainers? |
|
| 142 |
- |
|
| 143 |
-Solomon has final `LGTM` approval for all pull requests to `MAINTAINERS` files. |
|
| 144 |
- |
|
| 145 |
-### How is this process changed? |
|
| 146 |
- |
|
| 147 |
-Just like everything else: by making a pull request :) |