xref: /aosp_15_r20/external/curl/docs/GOVERNANCE.md (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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