# Moby maintainers file
#
# This file describes the maintainer groups within the moby/moby project.
# More detail on Moby project governance is available in the
# project/GOVERNANCE.md file found in this repository.
#
# It is structured to be consumable by both humans and programs.
# To extract its contents programmatically, use any TOML-compliant
# parser.
#
# TODO(estesp): This file should not necessarily depend on docker/opensource
# This file is compiled into the MAINTAINERS file in docker/opensource.
#
[Org]

	[Org."Core maintainers"]

	# The Core maintainers are the ghostbusters of the project: when there's a problem others
	# can't solve, they show up and fix it with bizarre devices and weaponry.
	# They have final say on technical implementation and coding style.
	# They are ultimately responsible for quality in all its forms: usability polish,
	# bugfixes, performance, stability, etc. When ownership  can cleanly be passed to
	# a subsystem, they are responsible for doing so and holding the
	# subsystem maintainers accountable. If ownership is unclear, they are the de facto owners.

	# For each release (including minor releases), a "release captain" is assigned from the
	# pool of core maintainers. Rotation is encouraged across all maintainers, to ensure
	# the release process is clear and up-to-date.

		people = [
			"aaronlehmann",
			"akihirosuda",
			"albers",
			"aluzzardi",
			"anusha",
			"coolljt0725",
			"cpuguy83",
			"crosbymichael",
			"dnephin",
			"duglin",
			"ehazlett",
			"estesp",
			"icecrime",
			"jhowardmsft",
			"johnstep",
			"justincormack",
			"lk4d4",
			"mavenugo",
			"mhbauer",
			"mlaventure",
			"runcom",
			"stevvooe",
			"tianon",
			"tibor",
			"tonistiigi",
			"unclejack",
			"vdemeester",
			"vieux",
			"yongtang"
		]

	[Org."Docs maintainers"]

	# TODO Describe the docs maintainers role.

		people = [
			"misty",
			"thajeztah"
		]

	[Org.Curators]

	# The curators help ensure that incoming issues and pull requests are properly triaged and
	# that our various contribution and reviewing processes are respected. With their knowledge of
	# the repository activity, they can also guide contributors to relevant material or
	# discussions.
	#
	# They are neither code nor docs reviewers, so they are never expected to merge. They can
	# however:
	# - close an issue or pull request when it's an exact duplicate
	# - close an issue or pull request when it's inappropriate or off-topic

		people = [
			"aboch",
			"alexellis",
			"andrewhsu",
			"anonymuse",
			"chanwit",
			"ehazlett",
			"fntlnz",
			"gianarb",
			"mgoelzer",
			"programmerq",
			"rheinwein",
			"ripcurld0",
			"thajeztah"
		]

	[Org.Alumni]

	# This list contains maintainers that are no longer active on the project.
	# It is thanks to these people that the project has become what it is today.
	# Thank you!

		people = [
			# David Calavera contributed many features to Docker, such as an improved
			# event system, dynamic configuration reloading, volume plugins, fancy
			# new templating options, and an external client credential store. As a
			# maintainer, David was release captain for Docker 1.8, and competing
			# with Jess Frazelle to be "top dream killer".
			# David is now doing amazing stuff as CTO for https://www.netlify.com,
			# and tweets as @calavera.
			"calavera",

			# As a maintainer, Erik was responsible for the "builder", and
			# started the first designs for the new networking model in
			# Docker. Erik is now working on all kinds of plugins for Docker
			# (https://github.com/contiv) and various open source projects
			# in his own repository https://github.com/erikh. You may
			# still stumble into him in our issue tracker, or on IRC.
			"erikh",

			# After a false start with his first PR being rejected, James Turnbull became a frequent
			# contributor to the documentation, and became a docs maintainer on December 5, 2013. As
			# a maintainer, James lifted the docs to a higher standard, and introduced the community
			# guidelines ("three strikes"). James is currently changing the world as CTO of https://www.empatico.org,
			# meanwhile authoring various books that are worth checking out. You can find him on Twitter,
			# rambling as @kartar, and although no longer active as a maintainer, he's always "game" to
			# help out reviewing docs PRs, so you may still see him around in the repository.
			"jamtur01",

			# Jessica Frazelle, also known as the "Keyser Söze of containers",
			# runs *everything* in containers. She started contributing to
			# Docker with a (fun fun) change involving both iptables and regular
			# expressions (coz, YOLO!) on July 10, 2014
			# https://github.com/docker/docker/pull/6950/commits/f3a68ffa390fb851115c77783fa4031f1d3b2995.
			# Jess was Release Captain for Docker 1.4, 1.6 and 1.7, and contributed
			# many features and improvement, among which "seccomp profiles" (making
			# containers a lot more secure). Besides being a maintainer, she
			# set up the CI infrastructure for the project, giving everyone
			# something to shout at if a PR failed ("noooo Janky!").
			# Jess is currently working on the DCOS security team at Mesosphere,
			# and contributing to various open source projects.
			# Be sure you don't miss her talks at a conference near you (a must-see),
			# read her blog at https://blog.jessfraz.com (a must-read), and
			# check out her open source projects on GitHub https://github.com/jessfraz (a must-try).
			"jessfraz",

			# As a docs maintainer, Mary Anthony contributed greatly to the Docker
			# docs. She wrote the Docker Contributor Guide and Getting Started
			# Guides. She helped create a doc build system independent of
			# docker/docker project, and implemented a new docs.docker.com theme and
			# nav for 2015 Dockercon. Fun fact: the most inherited layer in DockerHub
			# public repositories was originally referenced in
			# maryatdocker/docker-whale back in May 2015.
			"moxiegirl",

			# Jana Radhakrishnan was part of the SocketPlane team that joined Docker.
			# As a maintainer, he was the lead architect for the Container Network
			# Model (CNM) implemented through libnetwork, and the "routing mesh" powering
			# Swarm mode networking.
			#
			# Jana started new adventures in networking, but you can find him tweeting as @mrjana,
			# coding on GitHub https://github.com/mrjana, and he may be hiding on the Docker Community
			# slack channel :-)
			"mrjana",

			# Sven Dowideit became a well known person in the Docker ecosphere, building
			# boot2docker, and became a regular contributor to the project, starting as
			# early as October 2013 (https://github.com/docker/docker/pull/2119), to become
			# a maintainer less than two months later (https://github.com/docker/docker/pull/3061).
			#
			# As a maintainer, Sven took on the task to convert the documentation from
			# ReStructuredText to Markdown, migrate to Hugo for generating the docs, and
			# writing tooling for building, testing, and publishing them.
			#
			# If you're not in the occasion to visit "the Australian office", you
			# can keep up with Sven on Twitter (@SvenDowideit), his blog http://fosiki.com,
			# and of course on GitHub.
			"sven",

			# Vincent "vbatts!" Batts made his first contribution to the project
			# in November 2013, to become a maintainer a few months later, on
			# May 10, 2014 (https://github.com/docker/docker/commit/d6e666a87a01a5634c250358a94c814bf26cb778).
			# As a maintainer, Vincent made important contributions to core elements
			# of Docker, such as "distribution" (tarsum) and graphdrivers (btrfs, devicemapper).
			# He also contributed the "tar-split" library, an important element
			# for the content-addressable store.
			# Vincent is currently a member of the Open Containers Initiative
			# Technical Oversight Board (TOB), besides his work at Red Hat and
			# Project Atomic. You can still find him regularly hanging out in
			# our repository and the #docker-dev and #docker-maintainers IRC channels
			# for a chat, as he's always a lot of fun.
			"vbatts",

			# Vishnu became a maintainer to help out on the daemon codebase and
			# libcontainer integration. He's currently involved in the
			# Open Containers Initiative, working on the specifications,
			# besides his work on cAdvisor and Kubernetes for Google.
			"vishh"
		]

[people]

# A reference list of all people associated with the project.
# All other sections should refer to people by their canonical key
# in the people section.

	# ADD YOURSELF HERE IN ALPHABETICAL ORDER

	[people.aaronlehmann]
	Name = "Aaron Lehmann"
	Email = "aaron.lehmann@docker.com"
	GitHub = "aaronlehmann"

	[people.aboch]
	Name = "Alessandro Boch"
	Email = "aboch@docker.com"
	GitHub = "aboch"

	[people.alexellis]
	Name = "Alex Ellis"
	Email = "alexellis2@gmail.com"
	GitHub = "alexellis"

	[people.akihirosuda]
	Name = "Akihiro Suda"
	Email = "suda.akihiro@lab.ntt.co.jp"
	GitHub = "AkihiroSuda"

	[people.aluzzardi]
	Name = "Andrea Luzzardi"
	Email = "al@docker.com"
	GitHub = "aluzzardi"

	[people.albers]
	Name = "Harald Albers"
	Email = "github@albersweb.de"
	GitHub = "albers"

	[people.andrewhsu]
	Name = "Andrew Hsu"
	Email = "andrewhsu@docker.com"
	GitHub = "andrewhsu"

	[people.anonymuse]
	Name = "Jesse White"
	Email = "anonymuse@gmail.com"
	GitHub = "anonymuse"

	[people.anusha]
	Name = "Anusha Ragunathan"
	Email = "anusha@docker.com"
	GitHub = "anusha-ragunathan"

	[people.calavera]
	Name = "David Calavera"
	Email = "david.calavera@gmail.com"
	GitHub = "calavera"

	[people.coolljt0725]
	Name = "Lei Jitang"
	Email = "leijitang@huawei.com"
	GitHub = "coolljt0725"

	[people.cpuguy83]
	Name = "Brian Goff"
	Email = "cpuguy83@gmail.com"
	GitHub = "cpuguy83"

	[people.chanwit]
	Name = "Chanwit Kaewkasi"
	Email = "chanwit@gmail.com"
	GitHub = "chanwit"

	[people.crosbymichael]
	Name = "Michael Crosby"
	Email = "crosbymichael@gmail.com"
	GitHub = "crosbymichael"

	[people.dnephin]
	Name = "Daniel Nephin"
	Email = "dnephin@gmail.com"
	GitHub = "dnephin"

	[people.duglin]
	Name = "Doug Davis"
	Email = "dug@us.ibm.com"
	GitHub = "duglin"

	[people.ehazlett]
	Name = "Evan Hazlett"
	Email = "ejhazlett@gmail.com"
	GitHub = "ehazlett"

	[people.erikh]
	Name = "Erik Hollensbe"
	Email = "erik@docker.com"
	GitHub = "erikh"

	[people.estesp]
	Name = "Phil Estes"
	Email = "estesp@linux.vnet.ibm.com"
	GitHub = "estesp"

	[people.fntlnz]
	Name = "Lorenzo Fontana"
	Email = "fontanalorenz@gmail.com"
	GitHub = "fntlnz"

	[people.gianarb]
	Name = "Gianluca Arbezzano"
	Email = "ga@thumpflow.com"
	GitHub = "gianarb"

	[people.icecrime]
	Name = "Arnaud Porterie"
	Email = "icecrime@gmail.com"
	GitHub = "icecrime"

	[people.jamtur01]
	Name = "James Turnbull"
	Email = "james@lovedthanlost.net"
	GitHub = "jamtur01"

	[people.jhowardmsft]
	Name = "John Howard"
	Email = "jhoward@microsoft.com"
	GitHub = "jhowardmsft"

	[people.jessfraz]
	Name = "Jessie Frazelle"
	Email = "jess@linux.com"
	GitHub = "jessfraz"

	[people.johnstep]
	Name = "John Stephens"
	Email = "johnstep@docker.com"
	GitHub = "johnstep"

	[people.justincormack]
	Name = "Justin Cormack"
	Email = "justin.cormack@docker.com"
	GitHub = "justincormack"

	[people.lk4d4]
	Name = "Alexander Morozov"
	Email = "lk4d4@docker.com"
	GitHub = "lk4d4"

	[people.mavenugo]
	Name = "Madhu Venugopal"
	Email = "madhu@docker.com"
	GitHub = "mavenugo"

	[people.mgoelzer]
	Name = "Mike Goelzer"
	Email = "mike.goelzer@docker.com"
	GitHub = "mgoelzer"

	[people.mhbauer]
	Name = "Morgan Bauer"
	Email = "mbauer@us.ibm.com"
	GitHub = "mhbauer"

	[people.misty]
	Name = "Misty Stanley-Jones"
	Email = "misty@docker.com"
	GitHub = "mistyhacks"

	[people.mlaventure]
	Name = "Kenfe-Mickaël Laventure"
	Email = "mickael.laventure@gmail.com"
	GitHub = "mlaventure"

	[people.moxiegirl]
	Name = "Mary Anthony"
	Email = "mary.anthony@docker.com"
	GitHub = "moxiegirl"

	[people.mrjana]
	Name = "Jana Radhakrishnan"
	Email = "mrjana@docker.com"
	GitHub = "mrjana"

	[people.programmerq]
	Name = "Jeff Anderson"
	Email = "jeff@docker.com"
	GitHub = "programmerq"

	[people.rheinwein]
	Name = "Laura Frank"
	Email = "laura@codeship.com"
	GitHub = "rheinwein"

	[people.ripcurld0]
	Name = "Boaz Shuster"
	Email = "ripcurld.github@gmail.com"
	GitHub = "ripcurld0"

	[people.runcom]
	Name = "Antonio Murdaca"
	Email = "runcom@redhat.com"
	GitHub = "runcom"

	[people.shykes]
	Name = "Solomon Hykes"
	Email = "solomon@docker.com"
	GitHub = "shykes"

	[people.stevvooe]
	Name = "Stephen Day"
	Email = "stephen.day@docker.com"
	GitHub = "stevvooe"

	[people.sven]
	Name = "Sven Dowideit"
	Email = "SvenDowideit@home.org.au"
	GitHub = "SvenDowideit"

	[people.thajeztah]
	Name = "Sebastiaan van Stijn"
	Email = "github@gone.nl"
	GitHub = "thaJeztah"

	[people.tianon]
	Name = "Tianon Gravi"
	Email = "admwiggin@gmail.com"
	GitHub = "tianon"

	[people.tibor]
	Name = "Tibor Vass"
	Email = "tibor@docker.com"
	GitHub = "tiborvass"

	[people.tonistiigi]
	Name = "Tõnis Tiigi"
	Email = "tonis@docker.com"
	GitHub = "tonistiigi"

	[people.unclejack]
	Name = "Cristian Staretu"
	Email = "cristian.staretu@gmail.com"
	GitHub = "unclejack"

	[people.vbatts]
	Name = "Vincent Batts"
	Email = "vbatts@redhat.com"
	GitHub = "vbatts"

	[people.vdemeester]
	Name = "Vincent Demeester"
	Email = "vincent@sbr.pm"
	GitHub = "vdemeester"

	[people.vieux]
	Name = "Victor Vieux"
	Email = "vieux@docker.com"
	GitHub = "vieux"

	[people.vishh]
	Name = "Vishnu Kannan"
	Email = "vishnuk@google.com"
	GitHub = "vishh"

	[people.yongtang]
	Name = "Yong Tang"
	Email = "yong.tang.github@outlook.com"
	GitHub = "yongtang"
