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