# 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.

		people = [
			"aaronlehmann",
			"akihirosuda",
			"anusha",
			"coolljt0725",
			"cpuguy83",
			"crosbymichael",
			"dnephin",
			"duglin",
			"estesp",
			"jhowardmsft",
			"johnstep",
			"justincormack",
			"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 = [
			"alexellis",
			"andrewhsu",
			"anonymuse",
			"chanwit",
			"fntlnz",
			"gianarb",
			"programmerq",
			"rheinwein",
			"ripcurld",
			"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 = [
			# Harald Albers is the mastermind behind the bash completion scripts for the
			# Docker CLI. The completion scripts moved to the Docker CLI repository, so
			# you can now find him perform his magic in the https://github.com/docker/cli repository.
			"albers",

			# Andrea Luzzardi started contributing to the Docker codebase in the "dotCloud"
			# era, even before it was called "Docker". He is one of the architects of both
			# Swarm and SwarmKit, and its integration into the Docker engine.
			"aluzzardi",
			
			# 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",

			# Evan Hazlett is the creator of of the Shipyard and Interlock open source projects,
			# and the author of "Orca", which became the foundation of Docker Universal Control
			# Plane (UCP). As a maintainer, Evan helped integrating SwarmKit (secrets, tasks)
			# into the Docker engine.
			"ehazlett",

			# Arnaud Porterie (AKA "icecrime") was in charge of maintaining the maintainers.
			# As a maintainer, he made life easier for contributors to the Docker open-source
			# projects, bringing order in the chaos by designing a triage- and review workflow
			# using labels (see https://icecrime.net/technology/a-structured-approach-to-labeling/),
			# and automating the hell out of things with his buddies GordonTheTurtle and Poule
			# (a chicken!).
			# 
			# A lesser-known fact is that he created the first commit in the libnetwork repository
			# even though he didn't know anything about it. Some say, he's now selling stuff on
			# the internet ;-)
			"icecrime",

			# 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!").
			# 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",

			# Alexander Morozov contributed many features to Docker, worked on the premise of 
			# what later became containerd (and worked on that too), and made a "stupid" Go
			# vendor tool specificaly for docker/docker needs: vndr (https://github.com/LK4D4/vndr).
			# Not many know that Alexander is a master negotiator, being able to change course
			# of action with a single "Nope, we're not gonna do that".
			"lk4d4",

			# Madhu Venugopal was part of the SocketPlane team that joined Docker.
			# As a maintainer, he was working with Jana for the Container Network
			# Model (CNM) implemented through libnetwork, and the "routing mesh" powering
			# Swarm mode networking.
			"mavenugo",

			# 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.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.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.ripcurld]
	Name = "Boaz Shuster"
	Email = "ripcurld.github@gmail.com"
	GitHub = "ripcurld"

	[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"
