github.com/scorpionis/docker@v1.6.0-rc7/MAINTAINERS (about) 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 * A pull request can be in 1 of 5 distinct states, for each of which there is a corresponding label 129 that needs to be applied. `Rules.review.states` contains the list of states with possible targets 130 for each. 131 """ 132 133 # Triage 134 [Rules.review.states.0-triage] 135 136 # Maintainers are expected to triage new incoming pull requests by removing 137 # the `0-triage` label and adding the correct labels (e.g. `1-design-review`) 138 # potentially skipping some steps depending on the kind of pull request. 139 # Use common sense for judging. 140 # 141 # Checking for DCO should be done at this stage. 142 # 143 # If an owner, responsible for closing or merging, can be assigned to the PR, 144 # the better. 145 146 close = "e.g. unresponsive contributor without DCO" 147 3-docs-review = "non-proposal documentation-only change" 148 2-code-review = "e.g. trivial bugfix" 149 1-design-review = "general case" 150 151 # Design review 152 [Rules.review.states.1-design-review] 153 154 # Maintainers are expected to comment on the design of the pull request. 155 # Review of documentation is expected only in the context of design validation, 156 # not for stylistic changes. 157 # 158 # Ideally, documentation should reflect the expected behavior of the code. 159 # No code review should take place in this step. 160 # 161 # Once design is approved, a maintainer should make sure to remove this label 162 # and add the next one. 163 164 close = "design rejected" 165 3-docs-review = "proposals with only documentation changes" 166 2-code-review = "general case" 167 168 # Code review 169 [Rules.review.states.2-code-review] 170 171 # Maintainers are expected to review the code and ensure that it is good 172 # quality and in accordance with the documentation in the PR. 173 # 174 # If documentation is absent but expected, maintainers should ask for documentation. 175 # 176 # All tests should pass. 177 # 178 # Once code is approved according to the rules of the subsystem, a maintainer 179 # should make sure to remove this label and add the next one. 180 181 close = "" 182 1-design-review = "raises design concerns" 183 4-merge = "trivial change not impacting documentation" 184 3-docs-review = "general case" 185 186 # Docs review 187 [Rules.review.states.3-docs-review] 188 189 # Maintainers are expected to review the documentation in its bigger context, 190 # ensuring consistency, completeness, validity, and breadth of coverage across 191 # all extent and new documentation. 192 # 193 # They should ask for any editorial change that makes the documentation more 194 # consistent and easier to understand. 195 # 196 # Once documentation is approved (see below), a maintainer should make sure to remove this 197 # label and add the next one. 198 199 close = "" 200 2-code-review = "requires more code changes" 201 1-design-review = "raises design concerns" 202 4-merge = "general case" 203 204 # Docs approval 205 [Rules.review.docs-approval] 206 # Changes and additions to docs must be reviewed and approved (LGTM'd) by a minimum of two docs sub-project maintainers. 207 # If the docs change originates with a docs maintainer, only one additional LGTM is required (since we assume a docs maintainer approves of their own PR). 208 209 # Merge 210 [Rules.review.states.4-merge] 211 212 # Maintainers are expected to merge this pull request as soon as possible. 213 # They can ask for a rebase, or carry the pull request themselves. 214 # These should be the easy PRs to merge. 215 216 close = "carry PR" 217 merge = "" 218 219 [Rules.DCO] 220 221 title = "Helping contributors with the DCO" 222 223 text = """ 224 The [DCO or `Sign your work`]( 225 https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work) 226 requirement is not intended as a roadblock or speed bump. 227 228 Some Docker contributors are not as familiar with `git`, or have used a web based 229 editor, and thus asking them to `git commit --amend -s` is not the best way forward. 230 231 In this case, maintainers can update the commits based on clause (c) of the DCO. The 232 most trivial way for a contributor to allow the maintainer to do this, is to add 233 a DCO signature in a Pull Requests's comment, or a maintainer can simply note that 234 the change is sufficiently trivial that it does not substantivly change the existing 235 contribution - i.e., a spelling change. 236 237 When you add someone's DCO, please also add your own to keep a log. 238 """ 239 240 [Rules.holiday] 241 242 title = "I'm a maintainer, and I'm going on holiday" 243 244 text = """ 245 Please let your co-maintainers and other contributors know by raising a pull 246 request that comments out your `MAINTAINERS` file entry using a `#`. 247 """ 248 249 [Rules."no direct push"] 250 251 title = "I'm a maintainer. Should I make pull requests too?" 252 253 text = """ 254 Yes. Nobody should ever push to master directly. All changes should be 255 made through a pull request. 256 """ 257 258 [Rules.meta] 259 260 title = "How is this process changed?" 261 262 text = "Just like everything else: by making a pull request :)" 263 264 # Current project organization 265 [Org] 266 267 bdfl = "shykes" 268 269 # The chief architect is responsible for the overall integrity of the technical architecture 270 # across all subsystems, and the consistency of APIs and UI. 271 # 272 # Changes to UI, public APIs and overall architecture (for example a plugin system) must 273 # be approved by the chief architect. 274 "Chief Architect" = "shykes" 275 276 # The Chief Operator is responsible for the day-to-day operations of the project including: 277 # - facilitating communications amongst all the contributors; 278 # - tracking release schedules; 279 # - managing the relationship with downstream distributions and upstream dependencies; 280 # - helping new contributors to get involved and become successful contributors and maintainers 281 # 282 # The role is also responsible for managing and measuring the success of the overall project 283 # and ensuring it is governed properly working in concert with the Docker Governance Advisory Board (DGAB). 284 "Chief Operator" = "spf13" 285 286 [Org.Operators] 287 288 # The operators make sure the trains run on time. They are responsible for overall operations 289 # of the project. This includes facilitating communication between all the participants; helping 290 # newcomers get involved and become successful contributors and maintainers; tracking the schedule 291 # of releases; managing the relationship with downstream distributions and upstream dependencies; 292 # define measures of success for the project and measure progress; Devise and implement tools and 293 # processes which make contributors and maintainers happier and more efficient. 294 295 296 [Org.Operators.security] 297 298 people = [ 299 "erw" 300 ] 301 302 [Org.Operators."monthly meetings"] 303 304 people = [ 305 "sven", 306 "tianon" 307 ] 308 309 [Org.Operators.infrastructure] 310 311 people = [ 312 "jfrazelle", 313 "crosbymichael" 314 ] 315 316 # The chief maintainer is responsible for all aspects of quality for the project including 317 # code reviews, usability, stability, security, performance, etc. 318 # The most important function of the chief maintainer is to lead by example. On the first 319 # day of a new maintainer, the best advice should be "follow the C.M.'s example and you'll 320 # be fine". 321 "Chief Maintainer" = "crosbymichael" 322 323 [Org."Core maintainers"] 324 325 # The Core maintainers are the ghostbusters of the project: when there's a problem others 326 # can't solve, they show up and fix it with bizarre devices and weaponry. 327 # They have final say on technical implementation and coding style. 328 # They are ultimately responsible for quality in all its forms: usability polish, 329 # bugfixes, performance, stability, etc. When ownership can cleanly be passed to 330 # a subsystem, they are responsible for doing so and holding the 331 # subsystem maintainers accountable. If ownership is unclear, they are the de facto owners. 332 333 # For each release (including minor releases), a "release captain" is assigned from the 334 # pool of core maintainers. Rotation is encouraged across all maintainers, to ensure 335 # the release process is clear and up-to-date. 336 # 337 # It is common for core maintainers to "branch out" to join or start a subsystem. 338 339 340 341 people = [ 342 "unclejack", 343 "crosbymichael", 344 "erikh", 345 "estesp", 346 "icecrime", 347 "jfrazelle", 348 "lk4d4", 349 "tibor", 350 "vbatts", 351 "vieux", 352 "vishh" 353 ] 354 355 356 [Org.Subsystems] 357 358 # As the project grows, it gets separated into well-defined subsystems. Each subsystem 359 # has a dedicated group of maintainers, which are dedicated to that subsytem and responsible 360 # for its quality. 361 # This "cellular division" is the primary mechanism for scaling maintenance of the project as it grows. 362 # 363 # The maintainers of each subsytem are responsible for: 364 # 365 # 1. Exposing a clear road map for improving their subsystem. 366 # 2. Deliver prompt feedback and decisions on pull requests affecting their subsystem. 367 # 3. Be available to anyone with questions, bug reports, criticism etc. 368 # on their component. This includes IRC, GitHub requests and the mailing 369 # list. 370 # 4. Make sure their subsystem respects the philosophy, design and 371 # road map of the project. 372 # 373 # #### How to review patches to your subsystem 374 # 375 # Accepting pull requests: 376 # 377 # - If the pull request appears to be ready to merge, give it a `LGTM`, which 378 # stands for "Looks Good To Me". 379 # - If the pull request has some small problems that need to be changed, make 380 # a comment adressing the issues. 381 # - If the changes needed to a PR are small, you can add a "LGTM once the 382 # following comments are adressed..." this will reduce needless back and 383 # forth. 384 # - If the PR only needs a few changes before being merged, any MAINTAINER can 385 # make a replacement PR that incorporates the existing commits and fixes the 386 # problems before a fast track merge. 387 # 388 # Closing pull requests: 389 # 390 # - If a PR appears to be abandoned, after having attempted to contact the 391 # original contributor, then a replacement PR may be made. Once the 392 # replacement PR is made, any contributor may close the original one. 393 # - If you are not sure if the pull request implements a good feature or you 394 # do not understand the purpose of the PR, ask the contributor to provide 395 # more documentation. If the contributor is not able to adequately explain 396 # the purpose of the PR, the PR may be closed by any MAINTAINER. 397 # - If a MAINTAINER feels that the pull request is sufficiently architecturally 398 # flawed, or if the pull request needs significantly more design discussion 399 # before being considered, the MAINTAINER should close the pull request with 400 # a short explanation of what discussion still needs to be had. It is 401 # important not to leave such pull requests open, as this will waste both the 402 # MAINTAINER's time and the contributor's time. It is not good to string a 403 # contributor on for weeks or months, having them make many changes to a PR 404 # that will eventually be rejected. 405 406 [Org.Subsystems.Documentation] 407 408 people = [ 409 "fredlf", 410 "james", 411 "sven", 412 "spf13", 413 "mary" 414 ] 415 416 [Org.Subsystems.libcontainer] 417 418 people = [ 419 "crosbymichael", 420 "vmarmol", 421 "mpatel", 422 "jnagal", 423 "lk4d4" 424 ] 425 426 [Org.Subsystems.registry] 427 428 people = [ 429 "dmp42", 430 "vbatts", 431 "joffrey", 432 "samalba", 433 "sday", 434 "jlhawn", 435 "dmcg" 436 ] 437 438 [Org.Subsystems."build tools"] 439 440 people = [ 441 "shykes", 442 "tianon" 443 ] 444 445 [Org.Subsystem."remote api"] 446 447 people = [ 448 "vieux" 449 ] 450 451 [Org.Subsystem.swarm] 452 453 people = [ 454 "aluzzardi", 455 "vieux" 456 ] 457 458 [Org.Subsystem.machine] 459 460 people = [ 461 "bfirsh", 462 "ehazlett" 463 ] 464 465 [Org.Subsystem.compose] 466 467 people = [ 468 "aanand" 469 ] 470 471 [Org.Subsystem.builder] 472 473 people = [ 474 "erikh", 475 "tibor", 476 "duglin" 477 ] 478 479 480 [people] 481 482 # A reference list of all people associated with the project. 483 # All other sections should refer to people by their canonical key 484 # in the people section. 485 486 # ADD YOURSELF HERE IN ALPHABETICAL ORDER 487 488 [people.aanand] 489 Name = "Aanand Prasad" 490 Email = "aanand@docker.com" 491 GitHub = "aanand" 492 493 [people.aluzzardi] 494 Name = "Andrea Luzzardi" 495 Email = "aluzzardi@docker.com" 496 GitHub = "aluzzardi" 497 498 [people.bfirsh] 499 Name = "Ben Firshman" 500 Email = "ben@firshman.co.uk" 501 GitHub = "bfirsh" 502 503 [people.crosbymichael] 504 Name = "Michael Crosby" 505 Email = "crosbymichael@gmail.com" 506 GitHub = "crosbymichael" 507 508 [people.duglin] 509 Name = "Doug Davis" 510 Email = "dug@us.ibm.com" 511 GitHub = "duglin" 512 513 [people.dmcg] 514 Name = "Derek McGowan" 515 Email = "derek@docker.com" 516 Github = "dmcgowan" 517 518 [people.dmp42] 519 Name = "Olivier Gambier" 520 Email = "olivier@docker.com" 521 Github = "dmp42" 522 523 [people.ehazlett] 524 Name = "Evan Hazlett" 525 Email = "ejhazlett@gmail.com" 526 GitHub = "ehazlett" 527 528 [people.erikh] 529 Name = "Erik Hollensbe" 530 Email = "erik@docker.com" 531 GitHub = "erikh" 532 533 [people.erw] 534 Name = "Eric Windisch" 535 Email = "eric@windisch.us" 536 GitHub = "ewindisch" 537 538 [people.estesp] 539 Name = "Phil Estes" 540 Email = "estesp@linux.vnet.ibm.com" 541 GitHub = "estesp" 542 543 [people.fredlf] 544 Name = "Fred Lifton" 545 Email = "fred.lifton@docker.com" 546 GitHub = "fredlf" 547 548 [people.icecrime] 549 Name = "Arnaud Porterie" 550 Email = "arnaud@docker.com" 551 GitHub = "icecrime" 552 553 [people.jfrazelle] 554 Name = "Jessie Frazelle" 555 Email = "jess@docker.com" 556 GitHub = "jfrazelle" 557 558 [people.jlhawn] 559 Name = "Josh Hawn" 560 Email = "josh.hawn@docker.com" 561 Github = "jlhawn" 562 563 [people.joffrey] 564 Name = "Joffrey Fuhrer" 565 Email = "joffrey@docker.com" 566 Github = "shin-" 567 568 [people.lk4d4] 569 Name = "Alexander Morozov" 570 Email = "lk4d4@docker.com" 571 GitHub = "lk4d4" 572 573 [people.mary] 574 Name = "Mary Anthony" 575 Email = "mary.anthony@docker.com" 576 GitHub = "moxiegirl" 577 578 [people.sday] 579 Name = "Stephen Day" 580 Email = "stephen.day@docker.com" 581 Github = "stevvooe" 582 583 [people.shykes] 584 Name = "Solomon Hykes" 585 Email = "solomon@docker.com" 586 GitHub = "shykes" 587 588 [people.spf13] 589 Name = "Steve Francia" 590 Email = "steve.francia@gmail.com" 591 GitHub = "spf13" 592 593 [people.sven] 594 Name = "Sven Dowideit" 595 Email = "SvenDowideit@home.org.au" 596 GitHub = "SvenDowideit" 597 598 [people.tianon] 599 Name = "Tianon Gravi" 600 Email = "admwiggin@gmail.com" 601 GitHub = "tianon" 602 603 [people.tibor] 604 Name = "Tibor Vass" 605 Email = "tibor@docker.com" 606 GitHub = "tiborvass" 607 608 [people.vbatts] 609 Name = "Vincent Batts" 610 Email = "vbatts@redhat.com" 611 GitHub = "vbatts" 612 613 [people.vieux] 614 Name = "Victor Vieux" 615 Email = "vieux@docker.com" 616 GitHub = "vieux" 617 618 [people.vmarmol] 619 Name = "Victor Marmol" 620 Email = "vmarmol@google.com" 621 GitHub = "vmarmol" 622 623 [people.jnagal] 624 Name = "Rohit Jnagal" 625 Email = "jnagal@google.com" 626 GitHub = "rjnagal" 627 628 [people.mpatel] 629 Name = "Mrunal Patel" 630 Email = "mpatel@redhat.com" 631 GitHub = "mrunalp" 632 633 [people.unclejack] 634 Name = "Cristian Staretu" 635 Email = "cristian.staretu@gmail.com" 636 GitHub = "unclejack" 637 638 [people.vishh] 639 Name = "Vishnu Kannan" 640 Email = "vishnuk@google.com" 641 GitHub = "vishh"