Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

initiate a project Governance document #2112

Closed
wants to merge 5 commits into from

Conversation

fturib
Copy link
Contributor

@fturib fturib commented Sep 20, 2018

Why is this pull request needed and what does it do?

In order to graduate on last level inside CNCF organization, we need to clarify our GOVERNANCE rules.

Description

On advise of @caniszczyk , I started with a copy of the governance doc from fluentd, which, itself is extracted from Kubernetes' governance doc.
Then I tuned the text to adapt to CoreDNS project.

Please pay attention to these points:

1- MAINTAINERS are defined as the individuals assigned to the team 'maintainers' (from Github project). It is not the same as Reviewers or Approvers defined into OWNER.md

2- VOTE is defined by Organization + individual maintainers. This vote would be used to agree on a direction to the project. I am not sure, so far, it was used formerly. We may want to be able to have a 2/3 majority when it comes to vote. Which means a limited number of MAINTAINERS that are really focus on CoreDNS project. (as of today we have 2 Orgs + 2 individuals).

3- I made up the content of the paragraph "Projects". We may want to tune that description.

@corbot corbot bot requested a review from SuperQ September 20, 2018 15:36
@corbot
Copy link

corbot bot commented Sep 20, 2018

Thank you for your contribution. I've just checked the OWNERS files to find a suitable reviewer. This search was successful and I've asked superq (via /OWNERS) for a review.

If you have questions or suggestions for this bot, please file an issue against the miekg/dreck repository.

The bot understands the commands that are listed here.

@fturib fturib requested review from miekg, johnbelamaric, caniszczyk, chrisohaver and yongtang and removed request for SuperQ September 20, 2018 15:36
@miekg
Copy link
Member

miekg commented Sep 21, 2018 via email

@fturib
Copy link
Contributor Author

fturib commented Sep 21, 2018

I think maintainers should be defined in the OWNERS file and then this triggles
through (manually) to github teams and org. Upside here is that adding a
maintainer is done via PR which gives it way more visibility.

Yes, good idea. would need a PR and then the vote process with 2/3

We don't track organization for any of the maintainers, so i'm not sure how we
think that would work.

That is to ensure that one single org cannot take over the project. And also it ensures diversity in the votes.
eg as of today, Infoblox would have one vote, although have 2 maintainers. From the proposed doc. the first one the 2 that vote define the vote for the org.

What about unresponsive maintainers if we need a 3/4 vote for adding or
removing maintainers?

That is a good point ! (the threshold is 2/3). We need that each maintainer is really actively involved in the project. The vote is important and meaningful.
I guess there are several ways to ensure:

  • have a difference between 'reviewer' and 'maintainers'. 2 different roles ? - and promote to maintainers only really active people on the project ? or have a limited number of seat ?
  • have a description of responsibility of 'maintainer' as a voter. Have a way to move 'maintainers' out if not active ? a diplomatic way ... let say a list of 'emeritus maintainers' ?

GOVERNANCE.md Outdated
- CoreDNS project artifacts (website, deployments, CI, etc ...)
- External plugin
- other DNS processing related
- Be supported by 2/3 majority of organization
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/organization/organizations/

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hum.. I will take the proposition of John. 'majority of organization vote acceptance'

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

John suggested 'majority organization vote for acceptance'... which i think is more clear than 'majority of organization vote acceptance'

GOVERNANCE.md Outdated

Maintainers will be added to the __coredns__ GitHub organization and added to the GitHub maintainers team.

After 6 months a maintainer will be made an "owner" of the GitHub organization.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will create a lot of owners. Essentially all maintainers will also be owners?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess yes. And will be removed if no more maintainer.

GOVERNANCE.md Outdated

## Github Project Administration

Maintainers will be added to the __coredns__ GitHub organization and added to the GitHub maintainers team.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use of "organization" is confusing here. This is presumably different than the maintainers' organizations we speak of in the prior section. Can we say "project" instead?

Maintainers will be added to the coredns GitHub project and added to the project's maintainers team.

Or, since adding to the maintainer team implies/requires adding to the project...

Maintainers will be added to the coredns GitHub project maintainers team.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree.

@miekg
Copy link
Member

miekg commented Sep 21, 2018 via email

@yongtang
Copy link
Member

I think in the owners (or maintainers) file, the following format might help:

Assume A and B belongs to the same company or organization (so only one with *):

maintainers:
  - A *
  - B 
  - C *

Copy link
Member

@johnbelamaric johnbelamaric left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like it.

GOVERNANCE.md Outdated

## Projects

The CoreDNS organization is open to receive new sub-projects under its umbrella. To apply a project as part of the __CoreDNS__ organization, it has to met the following criteria:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/To apply a project as part of/To accept a project into/

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make sense.

GOVERNANCE.md Outdated
- CoreDNS project artifacts (website, deployments, CI, etc ...)
- External plugin
- other DNS processing related
- Be supported by 2/3 majority of organization
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Receive a 2/3 majority organization vote for acceptance.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I take it.

GOVERNANCE.md Outdated
- other DNS processing related
- Be supported by 2/3 majority of organization

The submission process starts as a Pull Request on CoreDNS repository with the required information mentioned above. Once a project is accepted, it's considered a __CNCF sub-project under the umbrella of CoreDNS__
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change "on CoreDNS repository" to "on the coredns/coredns repository".

GOVERNANCE.md Outdated

The CoreDNS community adheres to the following principles:

- Open: CoreDNS is open source. See repository guidelines.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a link to the guidelines

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I forgot the "below" -> "See repository guidelines, below"

@miekg
Copy link
Member

miekg commented Sep 21, 2018 via email

@yongtang
Copy link
Member

yongtang commented Sep 21, 2018

I think working for a company but remain independent is a situation that makes sense. In CNCF, when sign up the CLA (https://github.com/cncf/cla), there is an option to either sign up as an individual, or as part of the corporation.

If the CLA is signed as corporation (or use corporate email for PR/issue/GitHub activity), then the maintainer will be considered as part of the entity, and the rule of "no two maintainer vote from the same entity" apply.

On the other hand, if the CLA is signed as an individual (and use individual email for PR/issue/GitHub activity), then the maintainer could be considered as independent. Thus not restricted by "no two maintainer vote from the same entity".

I don't think it is of a concern, though I think it makes sense to put a reasonable cap (say 2 or 3) on independent maintainers working for the same company. Maybe a FIFO rule? If 2 independent maintainers work for the same corporation, then the 3rd independent maintainer who work for the same company at the same time, will have to wait for one of the other maintainers to step down, to be able to vote.

GOVERNANCE.md Outdated

New maintainers are proposed by an existing maintainer and are elected by a 2/3 majority organization vote.

Maintainers can be removed by a 2/3 majority organization vote.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Software have life cycles and maintainers on any projects have as well. In the past Hadoop, OpenStack may have those as well. Though in order to avoid drama (saw that happen in some other open source communities), it might be better to specify what will trigger a removal. Ethnical or no contribution? May want to specify at least some criteria.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also especially personal contributors might go into read-only mode for a bit due to other work taking priority, but come back more actively afterwards. Focusing on the full-time, corporate backed activity might result in personal contributors being considered inactive and push them out. But maybe that's a special case, but this always bugged me in other projects such as K8s.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Focusing on the full-time, corporate backed activity might result in personal contributors being considered inactive and push them out.

It completely depends on how we define "active".... and how long in-activity is permitted. If the required activity level is very high, then corporate backed contributors get more voting power. If a very low level of activity is permitted, with long periods of complete in-activity, then individuals get more collective voting power.

As Yong says, I think we'll want to define more precisely what "contributing" means... but I assume it broadly means commits, code reviews, and or participation in meetings and issue discussions, relating to any repositories in the CoreDNS project. Also, we'll want to define required frequency of contributions to be considered active.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yongtang : Looks like I misunderstood you comment above.
You request a change : can you be more specific on what text you would like to add or change or delete ?

Software have life cycles and maintainers on any projects have as well. In the past Hadoop, OpenStack may have those as well. Though in order to avoid drama (saw that happen in some other open source communities), it might be better to specify what will trigger a removal. Ethnical or no contribution? May want to specify at least some criteria.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think CoreDNS maintainers serve the bridges between community members. Reviewing PRs (with Code of Conduct) is the best bridge for the community.

## Expectations of Maintainers

Maintainers are the bridges between members of the CoreDNS community. Maintainers
actively participate in PR reviews. Maintainers are expected to respond to
assigned PRs in a reasonable time frame, either providing insights, or assign the
PRs to other maintainers.
## Changes in Maintainership

Maintainers who fail to meet the principles of CoreDNS community can be removed
by a 2/3 majority organization vote.

@codecov-io
Copy link

codecov-io commented Sep 24, 2018

Codecov Report

Merging #2112 into master will decrease coverage by 0.05%.
The diff coverage is n/a.

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #2112      +/-   ##
==========================================
- Coverage   55.86%   55.81%   -0.06%     
==========================================
  Files         203      203              
  Lines        9991     9991              
==========================================
- Hits         5581     5576       -5     
- Misses       3987     3990       +3     
- Partials      423      425       +2
Impacted Files Coverage Δ
plugin/proxy/lookup.go 71.66% <0%> (-3.34%) ⬇️
plugin/route53/route53.go 82.4% <0%> (-2.78%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d9efa96...94cb50d. Read the comment docs.

@fturib
Copy link
Contributor Author

fturib commented Sep 24, 2018

I udpated with easy fix comments.
But the workflow about maintainers is not resolved yet.

@fturib
Copy link
Contributor Author

fturib commented Sep 24, 2018

I remove all below proposition to be clear that it is no more on the table (at least not from me).

for MAINTAINERS, looks like we may need here to be more clear on the process, and have a way to step-up and step-down for the MAINTAINERS that avoid friction whenever possible. Which means knowing in advance the responsibilities and the rules to keep a good list of active MAINTAINERS

## MAINTAINERS change triggered by PRs and votes
There is a specific file MAINTAINERS.md that we need to modify each time there is a change in the list of maintainers. Most likely there will need a vote for approval before merging.

## MAINTAINERS responsibilities
* participate to the votes. On each call to vote, the MAINTAINER cannot remain silent. It either vote YES, either vote NO, either provide a comment for no decision. A vote is open for 2 weeks, unless it reaches an agreement before that delay.

* have a significant involvement in the project, measured by 'activity'.

## NEW MAINTAINERS
- Any reviewer that have the required level activity, that make the request can be elected as MAINTAINERS if it get the needed 2/3 vote of existing maintainers
- a former MAINTAINER can also asked to re-added to the list with the same process as for a reviewer

## STEPPING DOWN MAINTAINER
- Volunteering (no more personal time to involve in the project). Need a PR, but no need for vote.
- After an evaluation of activity, Maintainers below the level are automatically proposed for removing from maintainers. Need vote. And vote can be refused if other maintainer wills it after the failing maintainers is providing explanations.
- specific divergence in directions in the project. Need vote.

Whatever the reason, a former maintainer is always part of the list of 'emeritus maintainers'.
However he is removed from the Gihub 'maintainers' list, and lost its 'owner' privilege on the github project.

## MEASURING ACTIVITY
- Voting : it is important that every MAINTAINERS participate actively to the votes.
=> MAINTAINERS should not miss more than 2 votes in a row (or 2 votes since last evaluation of activity ?)
- Project activity: I guess we can get an easy measure from Github stats (need to be easy to collect and neutral statistic). We need an average of XX events per month.

NOTE: for instance, k8s just provided a minimum of 50 event of activity on the repo during the last year to have the right to vote for the steering committee.
## TRIGGERING EVALUATION OF ACTIVITY
- by default evaluation happen every 3 months.
- an evaluation should be trigger when we do not reach to get enough total votes. When a PR with vote as not enough feedback to take a decision.

NOTE: Change in measuring activity and decisions can still be made, using a PR with vote on the "GOVERNANCE.md" file.

@miekg
Copy link
Member

miekg commented Sep 25, 2018 via email

@chrisohaver
Copy link
Member

We should also have a timeout. I think we need to define what is "active" but also for how long a person can be inactive before being voted out. Even if we say 1 contribution per month to be considered active, without at a timeout one rough month can get you ejected. Life happens.

Also, how would organization's activity/timeout be counted? Per individual or as a group?
I imagine that since there is a 1 vote limit for an organization, the activity would be tracked as a group. That is, if we implement a "1 contribution per month" requirement for activity, and there is a organization contributing with 3 members, then only 1 contribution per month from that organization is required to keep all members active (not 1 from each member).

@fturib
Copy link
Contributor Author

fturib commented Sep 26, 2018

+1 I think we should have the governance to allow for this mode.

That mean we allow a mode when a MAINTAINERS declare himself "on-hold" or "read-only". He is for a temp time out of the MAINTAINERS (I mean, we do not count on him for votes and do not care its activity during that time) but can comeback as active MAINTAINER when he wish w/o a vote.

There should be a max delay for the "read-only" mode - let say 6 months.

@yongtang
Copy link
Member

yongtang commented Sep 27, 2018

I think there are separate issues here:

  1. Keep the status of Maintainer.
  2. Keep the voting right as part of the Maintainer.

As far as I know, CoreDNS is a open source project, not an corporate product. So it is hard to imagine CoreDNS project will be running like inside a company with any KPI metric nonsense.

Many people comes here to contribute in their FREE time, not collecting any paycheck. I just don't think it makes much sense to require people spending their FREE time (without collecting paycheck) to be so involved, are forced to be evaluated in a short interval every 3 month?

Unlike corporate, if you push people out, they may not like to come back. Remember there are so many open source projects and people certainly could work on other projects.

I am fine if a maintainer is not active then he or she does not have the right to vote for a period. If it is too long, say a year or so, yes everything is on the table.

But I just don't think it makes sense to require people to devote their FREE time to be evaluated every several months. Are we making CoreDNS project a corporate project?

@fturib
Copy link
Contributor Author

fturib commented Sep 27, 2018

Hi @yongtang. Thanks for the feedback.
I do not want to push CoreDNS in as a corporate project !.
And i agree that this activity measure is both not welcoming, neither easy to setup.
I would rather keep simple, have each maintainer inform themselves when 'read-only' or step down if not anymore interested by the project.

However, initially the point was to ensure we have MAINTAINERS that keep active, on the vote side, because we need 2/3 for important votes.

How about:

having an anniversary date where each year the MAINTAINERS need to declare themselves as still active on the project ?
The one that did not vote during the year could just step down by themselves .. or after a talk with other maintainers of the project.

It would be more 'positive' way.

@yongtang
Copy link
Member

My understanding of the maintainer/committer of CoreDNS project is: a person who is able to help maintaining open source CoreDNS project in technical aspect: review, evaluate, and merge pull requests. That is the most important thing a maintainer should be involved.

@yongtang
Copy link
Member

I hope CoreDNS remains an open source project with a focus on technical side.

@caniszczyk
Copy link
Contributor

caniszczyk commented Sep 27, 2018 via email

@fturib
Copy link
Contributor Author

fturib commented Sep 28, 2018

I updated the document, following most of the comments ..

  • individuals declare if they contribute for an organization/company or as un-affiliated

  • integrate an "Expectation from Maintainers"

  • adapt Maintainership

  • make OWNER the main source of list of Maintainers

  • removed the automatic move to "owner" of Github project

  • OWNER : added a begin of list of maintainers - based on current list in the 'maintainers' team of Github (2 organization, 2 individuals)
    Here, @miekg : can you say what is the full list of maintainers ? and verify the format I used is conform with maybe an automated process of the OWNER document. Thanks!

@miekg
Copy link
Member

miekg commented Sep 28, 2018 via email

@fturib
Copy link
Contributor Author

fturib commented Sep 28, 2018

The removal of someone if a thorny item. Possibly this can be solved easily if
someone reaches out via email to ask what is the matter.

@miekg , There is already a thread going on on mailing list maintainers@coredns.io ... do you receive it ?

@miekg
Copy link
Member

miekg commented Sep 28, 2018 via email

fturib added 5 commits October 16, 2018 16:59
…or as un-affiliated

- integrate an "Expectation from Maintainers"
- adapt Maintainership with a loose removal event
- make OWNER the main source of list of Maintainers
- removed the automatic move to "owner" of Github project
- added a begin of list of maintainers - based on current list in the 'maintainers' team of Github (2 organization, 2 individuals)
… and change, project

- define the decision making process by consensus and vote if cannot.
@fturib
Copy link
Contributor Author

fturib commented Oct 16, 2018

Closing as too much change.
Created a new PR #2203 with the last version from Miek's proposition + decision making process defined

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants