Hi,
I see different rules for votes in the governance PEPs:
- More +1 than -1, other votes are ignored: “50%+1”
- Four fifths: 80%
- 2/3: ~66.6%
I don’t know what these numbers means. So I wrote a Python script to count the minimum number of -1 votes needed to reject a vote.
import math
ratios = (
('50%+1', lambda like, dislike: like > dislike),
('>= 2/3', lambda like, dislike: (like / (like + dislike)) >= 2/3),
('> 2/3', lambda like, dislike: (like / (like + dislike)) > 2/3),
('>= 4/5', lambda like, dislike: (like / (like + dislike)) >= 4/5),
('> 4/5', lambda like, dislike: (like / (like + dislike)) > 4/5),
)
for n in (5, 10, 25):
print("%s voters:" % n)
for text, approved_ratio in ratios:
def approved(dislike):
like = n - dislike
res = approved_ratio(like, dislike)
return res
dislike = 1
while approved(dislike):
dislike += 1
assert not approved(dislike)
assert approved(dislike - 1)
assert not approved(dislike + 1)
text = text.replace(">", r"\>")
print('* %s: need %s "-1" on %s votes to reject' % (text, dislike, n))
print()
5 voters:
- 50%+1: need 3 “-1” on 5 votes to reject
- >= 2/3: need 2 “-1” on 5 votes to reject
- > 2/3: need 2 “-1” on 5 votes to reject
- >= 4/5: need 2 “-1” on 5 votes to reject
- > 4/5: need 1 “-1” on 5 votes to reject
10 voters:
- 50%+1: need 5 “-1” on 10 votes to reject
- >= 2/3: need 4 “-1” on 10 votes to reject
- > 2/3: need 4 “-1” on 10 votes to reject
- >= 4/5: need 3 “-1” on 10 votes to reject
- > 4/5: need 2 “-1” on 10 votes to reject
25 voters:
- 50%+1: need 13 “-1” on 25 votes to reject
- >= 2/3: need 9 “-1” on 25 votes to reject
- > 2/3: need 9 “-1” on 25 votes to reject
- >= 4/5: need 6 “-1” on 25 votes to reject
- > 4/5: need 5 “-1” on 25 votes to reject
There are different kinds of vote:
- Elect a council / board / committee
- Promote a contributor as core developer
- Vote on a PEP
- Modify the governance PEP
For voting on a PEP, in the worst case, we are exactly 50%+1 core developers who like the PEP (+1). It means that “50%-1” core developers dislike the PEP: almost 50%. Hum, is it really something that we want? Do we want a PEP to be approved if almost the half dislike (or maybe “strongly dislike”) the PEP? On a 10 people, the PEP is approved if 4 votes -1, but rejected if 5 votes -1.
In my PEP 8015, I used 50%+1 for all votes, value coming from PHP on their RFC. Maybe this ratio should be changed?
I read 2/3 as “we need a majority, but it’s ok if some people dislike, we can handle it”.
I read 4/5 as “we need everybody to agree” (it’s impossible to get 100%, there is always someone who reject an idea just for a specific point ;-)). This kind of vote should be used for conservative change, to prevent too frequent changes and get a kind of stability.
What if a contributor is promoted with almost 50% of other core developers who tried to block the promotion. That’s not really a warm welcome… Maybe it’s better to wait until more core developers approve the promotion?
For me PEP 8015, I propose to change votes:
- Promote a contributor as core developer: majority (2/3)
- Vote on a PEP: majority (2/3)
- Modify the governance PEP: “everybody has to agree” (4/5)
For the “Elect a council / board / committee” vote, I chose to use Condorcet voting method which doesn’t use ratio. By the way, I propose to specify the exact method: use the Schulze method. I heard that many communities use it, so it should be good for Python And it should reduce (avoid) the risk of having two candidates at the same rank.