# Docker maintainers file
#
# This file describes who runs the docker/docker project and how.
# This is a living document - if you see something out of date or missing, speak up!
#
# It is structured to be consumable by both humans and programs.
# To extract its contents programmatically, use any TOML-compliant
# parser.
#
# 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",
			"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 = "arnaud@docker.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 = "mstanleyjones"

	[people.mlaventure]
	Name = "Kenfe-Mickaël Laventure"
	Email = "mickael.laventure@docker.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.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"

