1*6236dae4SAndroid Build Coastguard Worker<!-- 2*6236dae4SAndroid Build Coastguard WorkerCopyright (C) Daniel Stenberg, <[email protected]>, et al. 3*6236dae4SAndroid Build Coastguard Worker 4*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl 5*6236dae4SAndroid Build Coastguard Worker--> 6*6236dae4SAndroid Build Coastguard Worker 7*6236dae4SAndroid Build Coastguard Worker# Decision making in the curl project 8*6236dae4SAndroid Build Coastguard Worker 9*6236dae4SAndroid Build Coastguard WorkerA rough guide to how we make decisions and who does what. 10*6236dae4SAndroid Build Coastguard Worker 11*6236dae4SAndroid Build Coastguard Worker## BDFL 12*6236dae4SAndroid Build Coastguard Worker 13*6236dae4SAndroid Build Coastguard WorkerThis project was started by and has to some extent been pushed forward over 14*6236dae4SAndroid Build Coastguard Workerthe years with Daniel Stenberg as the driving force. It matches a standard 15*6236dae4SAndroid Build Coastguard WorkerBDFL (Benevolent Dictator For Life) style project. 16*6236dae4SAndroid Build Coastguard Worker 17*6236dae4SAndroid Build Coastguard WorkerThis setup has been used due to convenience and the fact that it has worked 18*6236dae4SAndroid Build Coastguard Workerfine this far. It is not because someone thinks of it as a superior project 19*6236dae4SAndroid Build Coastguard Workerleadership model. It also only works as long as Daniel manages to listen in to 20*6236dae4SAndroid Build Coastguard Workerwhat the project and the general user population wants and expects from us. 21*6236dae4SAndroid Build Coastguard Worker 22*6236dae4SAndroid Build Coastguard Worker## Legal entity 23*6236dae4SAndroid Build Coastguard Worker 24*6236dae4SAndroid Build Coastguard WorkerThere is no legal entity. The curl project is just a bunch of people scattered 25*6236dae4SAndroid Build Coastguard Workeraround the globe with the common goal to produce source code that creates 26*6236dae4SAndroid Build Coastguard Workergreat products. We are not part of any umbrella organization and we are not 27*6236dae4SAndroid Build Coastguard Workerlocated in any specific country. We are totally independent. 28*6236dae4SAndroid Build Coastguard Worker 29*6236dae4SAndroid Build Coastguard WorkerThe copyrights in the project are owned by the individuals and organizations 30*6236dae4SAndroid Build Coastguard Workerthat wrote those parts of the code. 31*6236dae4SAndroid Build Coastguard Worker 32*6236dae4SAndroid Build Coastguard Worker## Decisions 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard WorkerThe curl project is not a democracy, but everyone is entitled to state their 35*6236dae4SAndroid Build Coastguard Workeropinion and may argue for their sake within the community. 36*6236dae4SAndroid Build Coastguard Worker 37*6236dae4SAndroid Build Coastguard WorkerAll and any changes that have been done or are done are eligible to bring up 38*6236dae4SAndroid Build Coastguard Workerfor discussion, to object to or to praise. Ideally, we find consensus for the 39*6236dae4SAndroid Build Coastguard Workerappropriate way forward in any given situation or challenge. 40*6236dae4SAndroid Build Coastguard Worker 41*6236dae4SAndroid Build Coastguard WorkerIf there is no obvious consensus, a maintainer who's knowledgeable in the 42*6236dae4SAndroid Build Coastguard Workerspecific area takes an "executive" decision that they think is the right for 43*6236dae4SAndroid Build Coastguard Workerthe project. 44*6236dae4SAndroid Build Coastguard Worker 45*6236dae4SAndroid Build Coastguard Worker## Donations 46*6236dae4SAndroid Build Coastguard Worker 47*6236dae4SAndroid Build Coastguard WorkerDonating plain money to curl is best done to curl's [Open Collective 48*6236dae4SAndroid Build Coastguard Workerfund](https://opencollective.com/curl). Open Collective is a US based 49*6236dae4SAndroid Build Coastguard Workernon-profit organization that holds on to funds for us. This fund is then used 50*6236dae4SAndroid Build Coastguard Workerfor paying the curl security bug bounties, to reimburse project related 51*6236dae4SAndroid Build Coastguard Workerexpenses etc. 52*6236dae4SAndroid Build Coastguard Worker 53*6236dae4SAndroid Build Coastguard WorkerDonations to the project can also come in the form of server hosting, providing 54*6236dae4SAndroid Build Coastguard Workerservices and paying for people to work on curl related code etc. Usually, such 55*6236dae4SAndroid Build Coastguard Workerdonations are services paid for directly by the sponsors. 56*6236dae4SAndroid Build Coastguard Worker 57*6236dae4SAndroid Build Coastguard WorkerWe grade sponsors in a few different levels and if they meet the criteria, 58*6236dae4SAndroid Build Coastguard Workerthey can be mentioned on the Sponsors page on the curl website. 59*6236dae4SAndroid Build Coastguard Worker 60*6236dae4SAndroid Build Coastguard Worker## Commercial Support 61*6236dae4SAndroid Build Coastguard Worker 62*6236dae4SAndroid Build Coastguard WorkerThe curl project does not do or offer commercial support. It only hosts 63*6236dae4SAndroid Build Coastguard Workermailing lists, runs bug trackers etc to facilitate communication and work. 64*6236dae4SAndroid Build Coastguard Worker 65*6236dae4SAndroid Build Coastguard WorkerHowever, Daniel works for wolfSSL and we offer commercial curl support there. 66*6236dae4SAndroid Build Coastguard Worker 67*6236dae4SAndroid Build Coastguard Worker# Key roles 68*6236dae4SAndroid Build Coastguard Worker 69*6236dae4SAndroid Build Coastguard Worker## User 70*6236dae4SAndroid Build Coastguard Worker 71*6236dae4SAndroid Build Coastguard WorkerSomeone who uses or has used curl or libcurl. 72*6236dae4SAndroid Build Coastguard Worker 73*6236dae4SAndroid Build Coastguard Worker## Contributor 74*6236dae4SAndroid Build Coastguard Worker 75*6236dae4SAndroid Build Coastguard WorkerSomeone who has helped the curl project, who has contributed to bring it 76*6236dae4SAndroid Build Coastguard Workerforward. Contributing could be to provide advice, debug a problem, file a bug 77*6236dae4SAndroid Build Coastguard Workerreport, run test infrastructure or writing code etc. 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker## Commit author 80*6236dae4SAndroid Build Coastguard Worker 81*6236dae4SAndroid Build Coastguard WorkerSometimes also called 'committer'. Someone who has authored a commit in the 82*6236dae4SAndroid Build Coastguard Workercurl source code repository. Committers are recorded as `Author` in git. 83*6236dae4SAndroid Build Coastguard Worker 84*6236dae4SAndroid Build Coastguard Worker## Maintainers 85*6236dae4SAndroid Build Coastguard Worker 86*6236dae4SAndroid Build Coastguard WorkerA maintainer in the curl project is an individual who has been given 87*6236dae4SAndroid Build Coastguard Workerpermissions to push commits to one of the git repositories. 88*6236dae4SAndroid Build Coastguard Worker 89*6236dae4SAndroid Build Coastguard WorkerMaintainers are free to push commits to the repositories at they see fit. 90*6236dae4SAndroid Build Coastguard WorkerMaintainers are however expected to listen to feedback from users and any 91*6236dae4SAndroid Build Coastguard Workerchange that is non-trivial in size or nature *should* be brought to the 92*6236dae4SAndroid Build Coastguard Workerproject as a Pull-Request (PR) to allow others to comment/object before merge. 93*6236dae4SAndroid Build Coastguard Worker 94*6236dae4SAndroid Build Coastguard Worker## Former maintainers 95*6236dae4SAndroid Build Coastguard Worker 96*6236dae4SAndroid Build Coastguard WorkerA maintainer who stops being active in the project gets their push permissions 97*6236dae4SAndroid Build Coastguard Workerremoved at some point. We do this for security reasons but also to make sure 98*6236dae4SAndroid Build Coastguard Workerthat we always have the list of maintainers as "the team that push stuff to 99*6236dae4SAndroid Build Coastguard Workercurl". 100*6236dae4SAndroid Build Coastguard Worker 101*6236dae4SAndroid Build Coastguard WorkerGetting push permissions removed is not a punishment. Everyone who ever worked 102*6236dae4SAndroid Build Coastguard Workeron maintaining curl is considered a hero, for all time hereafter. 103*6236dae4SAndroid Build Coastguard Worker 104*6236dae4SAndroid Build Coastguard Worker## Security team members 105*6236dae4SAndroid Build Coastguard Worker 106*6236dae4SAndroid Build Coastguard WorkerWe have a security team. That is the team of people who are subscribed to the 107*6236dae4SAndroid Build Coastguard Workercurl-security mailing list; the receivers of security reports from users and 108*6236dae4SAndroid Build Coastguard Workerdevelopers. This list of people varies over time but they are all skilled 109*6236dae4SAndroid Build Coastguard Workerdevelopers familiar with the curl project. 110*6236dae4SAndroid Build Coastguard Worker 111*6236dae4SAndroid Build Coastguard WorkerThe security team works best when it consists of a small set of active 112*6236dae4SAndroid Build Coastguard Workerpersons. We invite new members when the team seems to need it, and we also 113*6236dae4SAndroid Build Coastguard Workerexpect to retire security team members as they "drift off" from the project or 114*6236dae4SAndroid Build Coastguard Workerjust find themselves unable to perform their duties there. 115*6236dae4SAndroid Build Coastguard Worker 116*6236dae4SAndroid Build Coastguard Worker## Core team 117*6236dae4SAndroid Build Coastguard Worker 118*6236dae4SAndroid Build Coastguard WorkerThere is a curl core team. It currently has the same set of members as the 119*6236dae4SAndroid Build Coastguard Workersecurity team. It can also be reached on the security email address. 120*6236dae4SAndroid Build Coastguard Worker 121*6236dae4SAndroid Build Coastguard WorkerThe core team nominates and invites new members to the team when it sees fit. 122*6236dae4SAndroid Build Coastguard WorkerThere is no open member voting or formal ways to be a candidate. Active 123*6236dae4SAndroid Build Coastguard Workerparticipants in the curl project who want to join the core team can ask to 124*6236dae4SAndroid Build Coastguard Workerjoin. 125*6236dae4SAndroid Build Coastguard Worker 126*6236dae4SAndroid Build Coastguard WorkerThe core team is a board of advisors. It deals with project management 127*6236dae4SAndroid Build Coastguard Workersubjects that need confidentiality or for other reasons cannot be dealt with 128*6236dae4SAndroid Build Coastguard Workerand discussed in the open (for example reports of code of conduct violations). 129*6236dae4SAndroid Build Coastguard WorkerProject matters should always as far as possible be discussed on open mailing 130*6236dae4SAndroid Build Coastguard Workerlists. 131*6236dae4SAndroid Build Coastguard Worker 132*6236dae4SAndroid Build Coastguard Worker## Server admins 133*6236dae4SAndroid Build Coastguard Worker 134*6236dae4SAndroid Build Coastguard WorkerWe run a web server, a mailing list and more on the curl project's primary 135*6236dae4SAndroid Build Coastguard Workerserver. That physical machine is owned and run by Haxx. Daniel is the primary 136*6236dae4SAndroid Build Coastguard Workeradmin of all things curl related server stuff, but Björn Stenberg and Linus 137*6236dae4SAndroid Build Coastguard WorkerFeltzing serve as backup admins for when Daniel is gone or unable. 138*6236dae4SAndroid Build Coastguard Worker 139*6236dae4SAndroid Build Coastguard WorkerThe primary server is paid for by Haxx. The machine is physically located in a 140*6236dae4SAndroid Build Coastguard Workerserver bunker in Stockholm Sweden, operated by the company Glesys. 141*6236dae4SAndroid Build Coastguard Worker 142*6236dae4SAndroid Build Coastguard WorkerThe website contents are served to the web via Fastly and Daniel is the 143*6236dae4SAndroid Build Coastguard Workerprimary curl contact with Fastly. 144*6236dae4SAndroid Build Coastguard Worker 145*6236dae4SAndroid Build Coastguard Worker## BDFL 146*6236dae4SAndroid Build Coastguard Worker 147*6236dae4SAndroid Build Coastguard WorkerThat is Daniel. 148*6236dae4SAndroid Build Coastguard Worker 149*6236dae4SAndroid Build Coastguard Worker# Maintainers 150*6236dae4SAndroid Build Coastguard Worker 151*6236dae4SAndroid Build Coastguard WorkerA curl maintainer is a project volunteer who has the authority and rights to 152*6236dae4SAndroid Build Coastguard Workermerge changes into a git repository in the curl project. 153*6236dae4SAndroid Build Coastguard Worker 154*6236dae4SAndroid Build Coastguard WorkerAnyone can aspire to become a curl maintainer. 155*6236dae4SAndroid Build Coastguard Worker 156*6236dae4SAndroid Build Coastguard Worker### Duties 157*6236dae4SAndroid Build Coastguard Worker 158*6236dae4SAndroid Build Coastguard WorkerThere are no mandatory duties. We hope and wish that maintainers consider 159*6236dae4SAndroid Build Coastguard Workerreviewing patches and help merging them, especially when the changes are 160*6236dae4SAndroid Build Coastguard Workerwithin the area of personal expertise and experience. 161*6236dae4SAndroid Build Coastguard Worker 162*6236dae4SAndroid Build Coastguard Worker### Requirements 163*6236dae4SAndroid Build Coastguard Worker 164*6236dae4SAndroid Build Coastguard Worker- only merge code that meets our quality and style guide requirements. 165*6236dae4SAndroid Build Coastguard Worker- *never* merge code without doing a PR first, unless the change is "trivial" 166*6236dae4SAndroid Build Coastguard Worker- if in doubt, ask for input/feedback from others 167*6236dae4SAndroid Build Coastguard Worker 168*6236dae4SAndroid Build Coastguard Worker### Recommendations 169*6236dae4SAndroid Build Coastguard Worker 170*6236dae4SAndroid Build Coastguard Worker- we require two-factor authentication enabled on your GitHub account to 171*6236dae4SAndroid Build Coastguard Worker reduce risk of malicious source code tampering 172*6236dae4SAndroid Build Coastguard Worker- consider enabling signed git commits for additional verification of changes 173*6236dae4SAndroid Build Coastguard Worker 174*6236dae4SAndroid Build Coastguard Worker### Merge advice 175*6236dae4SAndroid Build Coastguard Worker 176*6236dae4SAndroid Build Coastguard WorkerWhen you are merging patches/pull requests... 177*6236dae4SAndroid Build Coastguard Worker 178*6236dae4SAndroid Build Coastguard Worker- make sure the commit messages follow our template 179*6236dae4SAndroid Build Coastguard Worker- squash patch sets into a few logical commits even if the PR did not, if 180*6236dae4SAndroid Build Coastguard Worker necessary 181*6236dae4SAndroid Build Coastguard Worker- avoid the "merge" button on GitHub, do it "manually" instead to get full 182*6236dae4SAndroid Build Coastguard Worker control and full audit trail (GitHub leaves out you as "Committer:") 183*6236dae4SAndroid Build Coastguard Worker- remember to credit the reporter and the helpers. 184*6236dae4SAndroid Build Coastguard Worker 185*6236dae4SAndroid Build Coastguard Worker## Who are maintainers? 186*6236dae4SAndroid Build Coastguard Worker 187*6236dae4SAndroid Build Coastguard WorkerThe [list of maintainers](https://github.com/orgs/curl/people). Be aware that 188*6236dae4SAndroid Build Coastguard Workerthe level of presence and activity in the project vary greatly between 189*6236dae4SAndroid Build Coastguard Workerdifferent individuals and over time. 190*6236dae4SAndroid Build Coastguard Worker 191*6236dae4SAndroid Build Coastguard Worker### Become a maintainer? 192*6236dae4SAndroid Build Coastguard Worker 193*6236dae4SAndroid Build Coastguard WorkerIf you think you can help making the project better by shouldering some 194*6236dae4SAndroid Build Coastguard Workermaintaining responsibilities, then please get in touch. 195*6236dae4SAndroid Build Coastguard Worker 196*6236dae4SAndroid Build Coastguard WorkerYou are expected to be familiar with the curl project and its ways of working. 197*6236dae4SAndroid Build Coastguard WorkerYou need to have gotten a few quality patches merged as a proof of this. 198*6236dae4SAndroid Build Coastguard Worker 199*6236dae4SAndroid Build Coastguard Worker### Stop being a maintainer 200*6236dae4SAndroid Build Coastguard Worker 201*6236dae4SAndroid Build Coastguard WorkerIf you (appear to) not be active in the project anymore, you may be removed as 202*6236dae4SAndroid Build Coastguard Workera maintainer. Thank you for your service. 203