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 :) |