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