Skip to content

Commit cdf32db

Browse files
committed
Draft of an official Governance structure
1 parent 0a28488 commit cdf32db

File tree

2 files changed

+282
-0
lines changed

2 files changed

+282
-0
lines changed

Diff for: _config.yml

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ css_inline: false # Will insert all styles into a single <style> block in the <h
111111
navigation_header:
112112
- title: Home
113113
url: /
114+
- title: Governance
115+
url: /pages/governance
114116
- title: Code
115117
url: /pages/code/
116118
- title: Documentation

Diff for: pages/governance.md

+280
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
---
2+
title: "Governance Structure"
3+
---
4+
5+
This document describes the formal governance structure of the JuMP project.
6+
7+
For the purpose of this document, "JuMP" includes all repositories in the
8+
[JuMP-dev Github organization].
9+
10+
## Mission
11+
12+
The mission of the JuMP project is to provide a free, open-source, and
13+
high-performance software stack for mathematical optimization.
14+
15+
## Code of Conduct
16+
17+
The JuMP community strongly values inclusivity and diversity. Everyone should
18+
treat others with the utmost respect. Everyone in the community must adhere to
19+
the [NumFOCUS Code of Conduct](https://numfocus.org/code-of-conduct) and the
20+
[Julia Community Standards](https://julialang.org/community/standards/), which
21+
reflect the values of our community. Both these links have information on how to
22+
confidentially report a violation.
23+
24+
## Entities
25+
26+
This section outlines the different entities that exist within the JuMP project,
27+
their basic role, and how membership of each entity is determined.
28+
29+
### BDFL
30+
31+
Due to his role in the creation of JuMP, [Miles Lubin](https://github.com/mlubin)
32+
holds the role of [BDFL](https://en.wikipedia.org/wiki/Benevolent_dictator_for_life).
33+
34+
### Core Contributors
35+
36+
Core contributors lead the technical development of the JuMP project, and they
37+
are the ultimate authority on the direction of the JuMP project.
38+
39+
The current core contributors are:
40+
41+
* Miles Lubin (@mlubin)
42+
* Benoît Legat (@blegat)
43+
* Joaquim Dias Garcia (@joaquimg)
44+
* Joey Huchette (@joehuchette)
45+
* Oscar Dowson (@odow)
46+
47+
A new core contributor may be added by consensus of the current core
48+
contributors and notification to the [Steering Council].
49+
50+
Before becoming a core contributor, it is expected that the community member is
51+
a [repository maintainer](#repository-maintainers) of several repositories.
52+
53+
### Emeritus Core Contributors
54+
55+
Emeritus core contributors are community members who were [core contributors],
56+
but have stepped back to a less active role.
57+
58+
The emeritus core contributors are:
59+
60+
* Iain Dunning (@iainnz)
61+
62+
A core contributor may choose to switch to emeritus status by informing the
63+
other [core contributors] and the [Steering Council].
64+
65+
### Repository Maintainers
66+
67+
Repository maintainers are trusted members of the community who help the [core
68+
contributors] by managing a limited number of repositories in the [JuMP-dev
69+
Github organization].
70+
71+
Any core contributor has individual authority to appoint a community member as a
72+
repository maintainer of a repository with notification to the other [core
73+
contributors].
74+
75+
Before becoming a repository maintainer, it is expected that the community
76+
member will have been an active participant in the development and maintenance
77+
of a repository for a sustained period of time. This includes triaging issues,
78+
proposing and reviewing pull requests, and updating any binary dependencies as
79+
needed.
80+
81+
Community members may be maintainers of multiple repositories at the same time.
82+
83+
Repository maintainers can step back from their role at any time by informing a
84+
core developer. Furthermore, [core contributors], by consensus, can choose to
85+
remove repository maintainers for any reason (typically inactivity).
86+
87+
### NumFOCUS
88+
89+
JuMP is a [fiscally sponsored project of NumFOCUS](https://numfocus.org/project/jump),
90+
a 501(c)(3) public charity in the United States. NumFOCUS provides JuMP with
91+
fiscal, legal, and administrative support to help ensure the health and
92+
sustainability of the project.
93+
94+
### Steering Council
95+
96+
The Steering Council supports the [core contributors] by representing JuMP in
97+
all interactions with [NumFOCUS](#numfocus), e.g., by attending NumFOCUS's
98+
annual summit. In addition, the Steering Council:
99+
100+
* Approves expenditures related to JuMP and paid through the NumFOCUS account.
101+
* Negotiates and approves contracts between NumFOCUS and external contractors
102+
who provide paid work to JuMP.
103+
104+
The current members of the Steering Council are:
105+
106+
* Miles Lubin, Google (@mlubin)
107+
* Juan Pablo Vielma, Google (@juan-pablo-vielma)
108+
* Joey Huchette, Rice University (@joehuchette)
109+
* Oscar Dowson (@odow)
110+
* Changhyun Kwon, U. South Florida (@chkwon)
111+
112+
A member of the Steering Council may leave the council by notifying the Steering
113+
Council and [core contributors]. The remaining members, in consultation with the
114+
[core contributors], will invite a member of the community to join in order to
115+
maintain a quorum of five members.
116+
117+
## Decision Making Process
118+
119+
This section outlines how financial and non-financial decisions are made in the
120+
JuMP project.
121+
122+
### Financial Decisions
123+
124+
All financial decisions are made by the [Steering Council] to ensure any funds
125+
are spent in a manner that furthers the [mission](#mission) of JuMP. Financial
126+
decisions require majority approval by [Steering Council] members.
127+
128+
Community members proposing decisions with a financial aspect should contact the
129+
[Steering Council] directly, or table their proposal as an agenda item for
130+
discussion on a [monthly developer call](#monthly-developer-call).
131+
132+
### Non-financial Decisions
133+
134+
All non-financial decisions are made via consensus of the [core contributors]
135+
and relevant [repository maintainers]. [Emeritus core contributors](#emeritus-core-contributors)
136+
are not considered to be [core contributors] for this purpose.
137+
138+
Code-related decisions, such when a pull request is ready to be accepted and
139+
merged, should be discussed via the relevant Github issues and pull requests. If
140+
consensus cannot be achieved, the community member proposing the change may be
141+
invited by a core contributor to present their proposal at a [monthly developer
142+
call](#monthly-developer-call) for further discussion and community input.
143+
144+
Non-code-related decisions, such long-term strategic planning for JuMP, should
145+
either be discussed in a Github issue, or tabled as an agenda item and discussed
146+
on a [monthly developer call](#monthly-developer-call).
147+
148+
If consensus on a non-financial decision cannot be achieved, the final decision
149+
will be made by the [BDFL](#bdfl).
150+
151+
The [Steering Council] can gain addition decision-making power if the [core
152+
contributors] decide to delegate.
153+
154+
### Conflict of Interest
155+
156+
It is expected that community members will be employed at a wide range of
157+
companies, universities and non-profit organizations. Because of this, it is
158+
possible that members will have conflicts of interest. Such conflicts of
159+
interest include, but are not limited to:
160+
161+
* Financial interests, such as investments, employment or contracting work,
162+
outside of JuMP that may influence their work on JuMP.
163+
* Access to proprietary information of their employer that could potentially
164+
leak into their work with JuMP.
165+
166+
All members of the [Steering Council] shall disclose to the [Steering Council]
167+
any conflict of interest they may have. Members with a conflict of interest in a
168+
particular issue may participate in [Steering Council] discussions on that
169+
issue, but must recuse themselves from voting.
170+
171+
[Core contributors](#core-contributors) and [repository maintainers] should also
172+
disclose conflicts of interest with other [core contributors] and step back from
173+
decisions when conflicts of interests are in play.
174+
175+
## Github Permissions
176+
177+
[Github permissions][permissions] are used to control access to repositories in
178+
the [JuMP-dev Github organization].
179+
180+
Anyone with commit access to a repository is trusted to use it in a way that is
181+
consistent with the [non-financial decisions](#non-financial-decisions) process.
182+
Those with permissions should prefer pull requests over direct pushes, ask for
183+
feedback on changes if they are not sure there is a consensus, and follow JuMP's
184+
[style guide](https://jump.dev/JuMP.jl/stable/style/) and development processes.
185+
186+
### Core Contributors
187+
188+
[Core contributors](#core-contributors) are added as [Owners][owner-permission]
189+
of the [JuMP-dev Github organization] and have [Admin][permissions] permission
190+
to every repository.
191+
192+
### Emeritus Core Contributors
193+
194+
[Emeritus core contributors](#emeritus-core-contributors) retain the same commit
195+
rights as [core contributors], unless they choose to surrender them.
196+
197+
### Repository Maintainers
198+
199+
[Repository maintainers](#repository-maintainers) have [Maintain][permissions]
200+
rights to an individual repository as an outside collaborator. Among other
201+
rights, this allows them to push code to a branch in the
202+
[JuMP-dev Github organization] instead of their personal fork, merge pull
203+
requests, and close issues.
204+
205+
## Community Involvement
206+
207+
The JuMP project highly values the contributions made by members of the
208+
community. As an open-source project, JuMP is both made for the community, and
209+
by the community.
210+
211+
There are four main channels that JuMP uses to engage with the community.
212+
213+
### Community Forum
214+
215+
The community forum is a place for community members to post questions and
216+
receive help.
217+
218+
The current forum is the "Optimization (Mathematical)" section of the
219+
[Julia Discourse Forum](https://discourse.julialang.org/c/domain/opt/13).
220+
221+
### Developer Chatroom
222+
223+
The developer chatroom is a chatroom for developer-focused discussions about
224+
JuMP.
225+
226+
The current chatroom is the [JuMP-dev Gitter channel](https://gitter.im/JuliaOpt/JuMP-dev).
227+
228+
### Monthly Developer Call
229+
230+
The [Steering Council] hosts a monthly developer call to discuss JuMP-related
231+
business.
232+
233+
The calls are currently scheduled on the fourth Thursday of every month at 14:00
234+
Eastern. For information on how to take part, join the [developer chatroom] and
235+
ask `@odow` or `@mlubin` for an invite to the monthly developer call.
236+
237+
### JuMP-dev Workshops
238+
239+
The [Steering Council] will periodically choose a Chair to organize a JuMP-dev
240+
workshop.
241+
242+
Previous workshops include [Santiago, 2019](https://jump.dev/meetings/santiago2019/),
243+
[Bordeaux, 2018](https://jump.dev/meetings/bordeaux2018/), and [Boston, 2017](https://jump.dev/meetings/mit2017/).
244+
245+
Announcements of future workshops will be communicated through the
246+
[community forum] and via the [jump.dev](https://jump.dev) website.
247+
248+
## Transferring repositories to jump-dev
249+
250+
The [JuMP-dev Github organization] exists to simplify the management of Github
251+
permissions on JuMP-related repositories. It is not a curation of all
252+
JuMP-compatible solvers and supporting packages.
253+
254+
Instead, community members who develop new pure-Julia solvers or solver-wrappers
255+
should first add their package to the list of supported solvers in the
256+
[Installation Guide](https://jump.dev/JuMP.jl/stable/installation/#Getting-Solvers-1)
257+
of the JuMP documentation.
258+
259+
Note that when developing a new solver or JuMP-extension, the [core
260+
contributors] request that you not use "JuMP" in the name without prior consent.
261+
262+
Even once a package has matured, the bar for transferring repositories to the
263+
[JuMP-dev Github organization] is high, and can be summarized by the following:
264+
265+
* The maintainance of the package would be simplified if [core contributors]
266+
have [Admin permission][permissions] to the repository.
267+
268+
Community members wishing to transfer a repository from their personal account
269+
to the [JuMP-dev Github organization] should contact the [core contributors]
270+
via the [developer chatroom].
271+
272+
[community forum]: https://discourse.julialang.org/c/domain/opt/13
273+
[developer chatroom]: https://gitter.im/JuliaOpt/JuMP-dev
274+
[JuMP-dev Github organization]: https://github.com/jump-dev
275+
[permissions]: https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#repository-access-for-each-permission-level
276+
[owner-permission]: https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization#permission-levels-for-an-organization
277+
278+
[core contributors]: #core-contributors
279+
[repository maintainers]: #repository-maintainers
280+
[Steering Council]: #steering-council

0 commit comments

Comments
 (0)