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

Proposed governance and maintenance policy #58

Merged
merged 7 commits into from Nov 13, 2014
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
159 changes: 159 additions & 0 deletions new/governance_policy.md
@@ -0,0 +1,159 @@
---
RFC: unassigned
Author: Adam Jacob <adam@getchef.com>
Status: Draft
Type: Process
---

# Chef Board of Governance

Chef was designed from the outset to have a very open structure, including open design, open contribution, and consistent use of tools across the project. Given the large numbers of contributors, users, and companies with a stake in the future of the project, Chef leadership is looking to establish an advisory board, as part of its long term commitment to open governance.

The purpose of this RFC is to create that governance board and define how it will work.

## Definitions

Before talking about certain roles and ideals, we want to make sure we’re clear about what we mean:

<dl>
<dt>CBGB</dt><dd>Means the Chef Board for Governance – the group of up to 12 representatives who will advise on the roadmap and core criteria of the Project.</dd>

<dt>Company Leadership</dt><dd>Means the CEO of Chef Software Inc.</dd>

<dt>Corporate Contributor</dt><dd>Means a company that (a) is one of the top eight companies in terms of non-trivial pull requests in the past six months as measured by contributions by all employees; (b) a company that has employees as Maintainers who make significant contributions to the Project; and (c) has committed to integrate Chef software into its products.</dd>
Copy link
Contributor

Choose a reason for hiding this comment

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

is this one a) AND b) AND c) or is it a) OR b) AND c)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

All.


<dt>Leadership</dt><dd>Means the CBGB, Company Leadership, and Project Maintainers.</dd>

<dt>Lieutenant</dt><dd>Means someone who (a) is willing to perform the duties of a Lieutenant; (b) receives an absolute majority of affirmative votes of existing Lieutenants; and (c) is approved as a Lieutenant by the Project Lead.</dd>

<dt>Project</dt><dd>Means the Chef open source software and all applicable policies and procedures and guidelines.</dd>

<dt>Project Lead</dt><dd>means a leader in the Chef Community. The initial Project Lead will be Adam Jacob.</dd>

<dt>Project Maintainers</dt><dd>means the current list of maintainers, lieutenants, and project lead as defined in the Maintenance Policy.</dd>

<dt>Scope</dt><dd>Means the issues under the CBGB purview such as: (a) advising on the long term roadmap; (b) project policies and procedures around maintenance and contributions; and (c) long term governance model. All initiatives within the Chef Project are required to reside within the Scope.</dd>

<dt>User/Contributor</dt><dd> Means (a) an organization that uses Chef and that has published at least one use case; and/or (b) an individual contributor to the Project who is not a Company employee or Corporate Contributor.</dd>
</dl>

## Purpose

The primary purpose of the CBGB is to advise the Leadership on matters related to supporting the long-term governance, structure, and roadmap of the Project.

## What’s Included

The following main areas are included in this proposal:

* Provide a forum for individuals, users, and companies to discuss the issues within the CBGB Scope.

* Provide guidance and input to Leadership, and where possible, present a consistent and consolidated opinion from the broader Chef community.
Copy link
Contributor

Choose a reason for hiding this comment

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

the Leadership is defined as the Company Leadership + CBGB, so maybe this should say Company Leadership?


* Produce a formal, twice yearly report to the Leadership and broader Chef community of the status of and progress made in all areas under the purview of the CBGB.

* Promote and support the use of Chef in a manner consistent with the Scope.

## What’s NOT Included

The CBGB is not:

* Intended to serve as a decision-making governance board. The CBGB advises, but does not manage, the Leadership.
Copy link
Contributor

Choose a reason for hiding this comment

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

As above, should say Company Leadership probably.

Copy link
Contributor

Choose a reason for hiding this comment

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

The "Leadership" is defined above as "the CBGB and Company Leadership (Chef Software CEO)." Do we mean instead "Project Lead and Lieutenants" ?


* Intended to replace existing mechanisms for community input, governance, or contribution.

* Intended to assume a formal, fiduciary role with respect to the Project. The CBGB membership will not be asked to provide funds to the Project, assume liabilities with respect to the Project or their activities, or assume responsibility for enforcing either trademarks or CBGB recommendations.

## Scope

The CBGB is expected to provide input and formal recommendations regarding the project Scope. It can modify its Scope by a majority vote of its members.

### Membership and Voting:

The CBGB will have up to 12 members.

Composition of CBGB:

* (1) Project Lead: Adam Jacob

* (4) Users/Contributors

* (4) Corporate Contributors:

* (3) Lieutenants:

#### Membership Term

Except for the Project Lead, who will serve an indefinite term unless replaced as provided herein, each member of the CBGB will serve a term of 12 months and no member will serve more than two consecutive terms.

#### Voting and Selection Process

The selection process is intended to be open, transparent, and guided by objective criteria for membership.

* The CBGB shall elect a Chair and Vice Chair from amongst their members to serve a renewable 6 month term.

* The Chair or Vice-Chair shall prepare an agenda for and preside over regular meetings of the CBGB. These meetings shall occur as frequently as the CBGB determines is in the project’s best interest, but no less than quarterly

* The Project Lead will appoint a temporary chair to set the agenda for the first meeting and preside until the election shall occur.

* The CBGB may fill any vacancy arising by removal or resignation by a simple majority vote to fill the remainder of the term of the vacating member.

* The rules of election and membership outlined in this section may be varied by a resolution of the CBGB supported by more than two thirds of its voting membership.

* All Project contributors are welcome as participants and observers at CBGB meetings

#### Selection and Succession

##### Selection

* Project Lead: Initial Project Lead will be Adam Jacob. Any new Project Lead candidate will be selected by a majority vote of the Lieutenants, and approved by Company Leadership. This selection will happen according to the Maintenance Policy.

* All Other Seats: Candidates who meet the criteria for each group identified above will be elected by at least a majority vote of all qualified voters: +1
Copy link
Contributor

Choose a reason for hiding this comment

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

What defines "qualified voters"? I think maybe this was a thought that got cut off.


##### Succession

(i) Project Lead: If a new Project Lead is nominated and receives majority vote of the Lieutenants, and not vetoed by Company Leadership.

(ii) All Other Seats: All other members of the CBGB will be replaced upon any of the following: (1) End of term; or (2) majority vote of all other members of the CBGB.

## Operation
Copy link
Contributor

Choose a reason for hiding this comment

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

Quorum of 50% of current membership? Majority vote?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

majority vote.


The CBGB is authorized to seek advice and counsel from other interested parties and invited experts as appropriate

Any outside party wishing to bring an issue before the CBGB may do so by emailing the CBGB mailing list
Copy link
Contributor

Choose a reason for hiding this comment

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

As you are fond of saying, also made of people so should probably welcome talking to individual reps too who can then bring up to the board on their behalf.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Would rather they go directly to the board as a whole.


The CBGB shall provide transparent and timely reporting (through any mechanism it deems appropriate) to the Community at large on all of its activities, subject to the right of any individual to designate their comments and the ensuing discussion as "in confidence," in which case the public report shall contain only a note of the request and an agreed summary (if any) of the substance.

The CBGB is being formed at the discretion of the Company Leadership. The Company Leadership alone may decide to terminate the CBGB in its sole discretion; provided however, that the Company Leadership shall first consult the CBGB Chair.

The CBGB and its members shall abide by appropriate antitrust guidelines.
Copy link
Contributor

Choose a reason for hiding this comment

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

This line seems slightly scary. Not sure what would constitute illegal trust stuffs.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Just because its scary doesn't mean we don't need it. In particular, we need to ensure that we don't collude to influence the market unduly.


### Open Governance Principles

The CBGB will formulate recommendations in conjunction with the following, open governance principles:

#### Open participation

Throughout the project: anyone should be able to participate and contribute. All bugs and tasks will be tracked in a public tracker and all of the source code and all of the tools needed to build it will be available under an open license permitting unrestricted use

Open technical value: technical value over pride of authorship. Code is contributed for the express purpose of advancing technologies relevant to the project, effectively separating technology advancement from individual or commercial intent.

Open design: Roadmaps are discussed in the open, and design receives input from all contributors and maintainers

Influence through contribution: organizations and individuals gain influence over the project through contribution.

IP Cleanliness: Steps are taken to ensure that all incoming code is legally contributed (CLAs, terms-of-use, etc.), that use of approved third party libraries does not create incompatible dependencies

Open Licensing: code should be licensed using approved, standard, open-source licenses. (Chef is currently licensed under Apache 2.0).
Copy link
Contributor

Choose a reason for hiding this comment

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

Worth noting that RFCs are not technically under an open source license because PD is an un-license.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

RFCs are not code.


## Grievance Handling

When a member has a concern about the Chef Project, the member may raise that concern with the CBGB. If the member is not satisfied with the result, the member can raise the concern directly with the Project Lead. All appeals and discussions will be open, transparent and public.

Please help us improve this draft by sending your comments and feedback to governance@getchef.com.

## Copyright

This work is in the public domain. In jurisdictions that do not allow for this,
this work is available under CC0. To the extent possible under law, the person
who associated CC0 with this work has waived all copyright and related or
neighboring rights to this work.
212 changes: 212 additions & 0 deletions new/maintenance_policy.md
@@ -0,0 +1,212 @@
---
RFC: unassigned
Author: Adam Jacob <adam@getchef.com>
Status: Draft
Type: Process
---

# Maintenance Policy

The Maintenance Policy defines how we make decisions about what happens with Chef, and associated software projects. It provides the process by which:

* Roadmaps are decided
Copy link
Contributor

Choose a reason for hiding this comment

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

I think I don't understand the different between the maintenance policy vs the CBGB when it comes to roadmaps - it looks like there is info across both?

Copy link
Contributor

Choose a reason for hiding this comment

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

I've read this a few times and I 👍 this comment - it makes sense it's a shared responsibility, but exactly what's expected of that sharing should be expressed somewhere.

Copy link
Contributor

Choose a reason for hiding this comment

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

CBGB provides input to the maintainer teams when they are prioritizing, that's all.

Copy link
Contributor

Choose a reason for hiding this comment

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

that's awesome! I think that's how it should be. But the CBGB doc says lots of things like "the group of up to 12 representatives who will direct the roadmap" which is very different than "help with prioritizing"... we should clarify one, the other, or both.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yep, I left a comment on that line but I think @adamhjk just hasn't had time to circle back since the summit. The word "direct" will (probably) be changed.

Copy link
Contributor

Choose a reason for hiding this comment

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

👍
(note it's not the only line stating or implying CBGB is responsible for roadmaps)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@coderanger has the right interpretation - CBGB -> input to maints

* Patches are merged
* Disputes are resolved

It is intended to be short, flexible, and clear.

This file is related to the MAINTAINERS file in Chef. During the draft period, the first version of that file is included in this RFC.

# How the project is maintained

This file is the canonical source for how the Chef project is maintained.

# Roles

## Project Lead

Resolves disputes
Provides vision and roadmap
Has universal veto power
Copy link
Contributor

Choose a reason for hiding this comment

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

I think it would be worth clarifying the process of appeal in a separate section, ie maintainer -> Lt -> project lead just to make explicit the veto chain


## Lieutenants

Publish a roadmap (two quarters out)
Release calendar for code outside of chef client/chef server
Resolves disputes within their subsystem
Has localized veto power
Plus all responsibilities of a maintainer

Choose a reason for hiding this comment

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

So it isn't super clear to me... is there An Lieutenant per subsystem or can there be more than one Lieutenant per Subsystem?

Copy link
Contributor

Choose a reason for hiding this comment

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

There will only be a single LT per subsystem.

Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm. I wonder if that's scalable. Lot of responsibility on one person's shoulder's, especially if it's a big subsystem and they're not a Chef employee. How about a recommendation of one, but ... up to 3 (or even 5) as the discression of the existing LTs and the Project Lead?

Copy link
Contributor

Choose a reason for hiding this comment

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

I think the plan is to adjust the scope of subsystems to keep things manageable. Having a few LTs could work, but we would need to figure out how disputes are resolved. Having a single inheritance tree makes that part easy :)

Copy link
Contributor

Choose a reason for hiding this comment

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

Sure - I'm just saying some subsystems are necessarily bigger than others. For example, I'd be willing to share LTership of Client Core, but I certainly wouldn't dream of volunteering to do it myself. This leaves me with being a maintainer, which is fine, but also doesn't give me an option to do more even if I'm willing to.

Copy link
Contributor

Choose a reason for hiding this comment

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

@jaymzh @jonlives oh yeah, i didnt knew core is considered as single component, i was under the impression that event dispatch, platform specific providers, solo, zero, run list expansions all being separate components. Initially we might keep functionally similar components in same bucket :-) . I just checked noah's google doc on the components, core as a whole, lead by a single LT will be too much

Copy link
Contributor

Choose a reason for hiding this comment

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

regarding 'seeing the system as a whole' thing, i thought thats a common responsibility to all the LTs, they might have deep understanding of one subsystem, but all of them needs to understand how these components fit together, this can be relaxed for external subsystems (like chef-container etc), do you think we should state this explicitly? or delegate that to dedicated roles and formalize that in the RFC

Copy link
Contributor

Choose a reason for hiding this comment

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

I really think (and want the role of) a set of people who watch the bigger picture. Who look at the changes the various subsystems make and go "woah, these two things you two are working on are going to make a worse experience together"

Copy link
Contributor

Choose a reason for hiding this comment

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

@jaymzh That is more related to the CBGB than the LT/Project Lead structure. The LT exists mostly to settle disputes and do paperwork :)

But thats also something all community members should be doing I hope, if someone is doing something dumb just say so.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The LT team as a whole is that team, @jaymzh - @ranjib has this right.


## Maintainer

Handle contributions on GitHub - first response to a PR within 48 hours
Be available on IRC
Attend the developers meeting (do not miss more than 3 in a row - special dispensation can be made for difficult time zones)
Be available to answer mailing list questions within 48 hours
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we specify if this means -dev or -users? -dev is pretty low-traffic, but -users is very high traffic for stuff covering all subsystems of all projects and keeping up with it all for smaller subsystems may not be reasonable. As there become more projects and more subsystems that would get worse. The same problem would in theory hold true for -dev but seems to not be an issue at the moment. Either way, we should clarify.

Copy link
Contributor

Choose a reason for hiding this comment

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

I read this more as that the maintainer team as a whole should be able to respond. This would take the place of the "Official Company Response" that a lot of people want to see now.

Copy link
Contributor

Choose a reason for hiding this comment

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

Hmmm. I like that interpretation. Though it certainly means the very first person to sign up for maintainership has some very tough responsibilities to measure up to. That may be OK... but it also may scare away people who want to maintain a small subsystem they know well, but don't want to have to be "on call" for email every 2 days. Again, that may be totally acceptable... but it's worth considering.

Copy link
Contributor

Choose a reason for hiding this comment

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

Again with @jaymzh - depending on how many maintainers we get in the initial set, this could be a lot of work for one or two people. It'd also be good to clarify whether this means answering questions on the development of the feature in question specifically, or if this relates to all questions relating to that component, including more general "how do I do X" support.

Copy link
Contributor

Choose a reason for hiding this comment

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

The LT role for some of the bigger subsystems is definitely a full-time job. One that I hope Chef Software will continue to support :)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, maintainers as a whole.

Weekends and local holidays in the maintainer’s jurisdiction are not counted for timeliness requirements. Absences for reasonable causes such as vacations, illness, etc. are also acceptable; Maintainers should notice of absences via the development mailing list whenever possible.
Copy link
Contributor

Choose a reason for hiding this comment

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

Missing the verb in "Maintainers should notice of absences." "provide" works.

Committed to 100% tests passing for your component
Has full commit/merge access to the relevant repositories
Has ops on IRC
Copy link
Contributor

Choose a reason for hiding this comment

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

Presumably we would retrofit existing ACLs in IRC, which I'd be 👍 to

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes


# How a patch gets merged

* Open Pull Request (anyone)
* Sign a CLA on Supermarket, tied to your github account.
* Code reviewed by a maintainer, lieutenant, or project lead. Approval is indicated by :+1: on the pull request.
* Merged on :+1: by an absolute majority of maintainers for the subsystems affected by your patch with no vetoes

# How to become a...

## Maintainer

* Have patches merged into the relevant subsystem
* Be willing to perform the duties of a maintainer
* Issue a pull request adding yourself to the MAINTAINERS file for your component
* Receive an absolute majority of existing maintainers and lieutenants for your component :+1:
* No veto from the component lieutenant
* No veto from the current project lead

## Lieutenant
Copy link
Contributor

Choose a reason for hiding this comment

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

So @jaymzh and I were chatting in the hallway at Summit and contemplating the role for lieutenants that aren't tied to a specific subsystem. There are potential overall changes in the core Chef codebase that aren't easily attributable to a subcomponent, so what do people think about that?

Copy link
Contributor

Choose a reason for hiding this comment

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

I mentioned this to @adamhjk and he said the right thing here is probably "core", which seems reasonable to me. I shall propose myself as an LT/M for core once this is merged.


* Issue a pull request to the MAINTAINERS file making yourself the lieutenant
* Be willing to perform the duties of a lieutenant
* Receive an absolute majority of existing lieutenants :+1:
* No veto from the current project lead

## Project Lead

* Issue a pull request to the MAINTAINERS file making yourself the project lead
* Be willing to perform the duties of the project lead
* Receive an absolute majority of existing lieutenants :+1:
* No veto from Chef Software, Inc, as held by their current Chief Executive Officer.

# Removing a Maintainer, Lieutenant or Lead

If a Maintainer, Lieutenant or Lead consistently fails to maintain their responsibilities or becomes disruptive, they can be removed by:

* Issue a pull request removing them from the MAINTAINERS file
* Receive an absolute majority of existing lieutentants :+1:
* No veto from the current project lead

OR

* Issue a pull request removing them from the MAINTAINERS file
* The current project lead unilaterally decides to merge pull request

# How to add a component

* Issue a pull request to the MAINTAINERS file describing the component, and making yourself lieutenant
* Be willing to perform the duties of a lieutenant
* Receive an absolute majority of existing lieutenants :+1:
* No veto from the current project lead

# How to change the rules by which the project is maintained

* Issue a pull request to this file.
* Receive an absolute majority of existing lieutenants from the Chef repository MAINTAINERS file :+1:
* No veto from the current project lead

# Where can I find the community?

The broader Chef community gathers in a small number of designated places. Participants in these places should be considered as operating on their own opinion, and representing nothing further than their own point of view. While some members of the community may be participating via their employment at Chef Software, when in these spaces, their authority and voice is equal to any other participant based on the guidelines in this file.

## IRC

You can find a large set of community members in IRC, within the #chef channel on irc.freenode.net. Development updates and conversations also happen on #chef-hacking. In both channels, those with “ops” are the maintainers, lieutenants, and the project lead. Those with “voice” are MVPs for Chef releases.

## Mailing Lists

* [Chef Users](http://lists.opscode.com/sympa/info/chef) - is the primary async communications channel for all users of Chef, regardless of how they participate.
* [Chef Developers](http://lists.opscode.com/sympa/info/chef-dev) - is the primary async communications channel for those concerned with developing Chef.

# Where can I find Chef Software Inc?

[The history of the Chef Project](http://www.getchef.com/blog/2014/07/03/chef-as-a-community/) is linked to the existence of a for-profit company, [Chef Software](http://www.getchef.com). Many employees of the company are active members of the community. When they participate in the community, they do so as individuals subject to the guidelines in this file.

If you would like to speak to, or understand the position of, someone at Chef Software - feel free to drop a line to [info@getchef.com](mailto:info@getchef.com) - and we’ll get back to you. Or simply ask for the companies official perspective in any of the community spaces, and a representative will get back to you in that space.

# The MAINTAINERS file in Chef

# Maintainers

This file lists how the Chef project is maintained. When making changes to the system, this
file tells you who needs to review your patch - you need a simple majority of maintainers
for the relevant subsystems to provide a :+1: on your pull request. Additionally, you need
to not receive a veto from a Lieutenant or the Project Lead.

[Check out HOW_CHEF_IS_MAINTAINED](link to come) for details on the process, how to become
a maintainer, lieutenant, or the project lead.

# Project Lead

[Adam Jacob](http://github.com/adamhjk)

# Components

## Chef Core

Handles the core parts of the Chef DSL, base resource and provider
infrastructure, and the Chef applications. Includes anything not covered by
another component.

### Lieutenant

### Maintainers

## Dev Tools

Chef Zero, Knife, Chef Apply and Chef Shell.

### Lieutenant

### Maintainers

## Test Tools

ChefSpec, Berkshelf (the chef bits), Test Kitchen (the Chef bits)

### Lieutenant

### Maintainers

## Platform Specific Components
Copy link
Contributor

Choose a reason for hiding this comment

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

A platform should be a tier 1 and/or tier 2 supported platform in RFC021 to have a Lieutenant.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

No - if you love it, you can maintain it.


The specific components of Chef related to a given platform - including (but not limited to) resources, providers, and the core DSL.

## Enterprise Linux

### Lieutenant

### Maintainers

## Ubuntu

### Lieutenant

### Maintainers

## Windows

### Lieutenant

### Maintainers

## Solaris

### Lieutenant

### Maintainers

## AIX

### Lieutenant

### Maintainers

## Mac OS X

### Lieutenant

### Maintainers