# 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",
			"kolyshkin",
			"mhbauer",
			"mlaventure",
			"runcom",
			"stevvooe",
			"thajeztah",
			"tianon",
			"tibor",
			"tonistiigi",
			"unclejack",
			"vdemeester",
			"vieux",
			"yongtang"
		]

	[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",
			"olljanat",
			"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 specifically 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 = "akihiro.suda.cz@hco.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.kolyshkin]
	Name = "Kir Kolyshkin"
	Email = "kolyshkin@gmail.com"
	GitHub = "kolyshkin"

	[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.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.olljanat]
	Name = "Olli Janatuinen"
	Email = "olli.janatuinen@gmail.com"
	GitHub = "olljanat"

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