# 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",
			"aluzzardi",
			"anusha",
			"coolljt0725",
			"cpuguy83",
			"crosbymichael",
			"dnephin",
			"duglin",
			"estesp",
			"icecrime",
			"jhowardmsft",
			"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.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.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"

