532 lines
14 KiB
Plaintext
532 lines
14 KiB
Plaintext
=encoding utf-8
|
|
|
|
=head1 NAME
|
|
|
|
perlgov - Perl Rules of Governance
|
|
|
|
=head1 PREAMBLE
|
|
|
|
We are forming a system of governance for development of the Perl programming
|
|
language.
|
|
|
|
The scope of governance includes the language definition, its
|
|
implementation, its test suite, its documentation, and the policies and
|
|
procedures by which it is developed and maintained.
|
|
|
|
The system of governance includes definitions of the groups that will make
|
|
decisions, the rules by which these groups are formed and changed, and the
|
|
enumerated powers and constraints on the activities of these governing
|
|
groups.
|
|
|
|
In forming a system of governance, we seek to achieve the following goals:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
We want a system that is functional. That means the governing groups may
|
|
decide to undertake large changes, or they may decide to act conservatively,
|
|
but they will act with intent and clear communication rather than fail to reach
|
|
decisions when needed.
|
|
|
|
=item *
|
|
|
|
We want a system that is trusted. That means that a reasonable contributor to
|
|
Perl might disagree with decisions made by the governing groups, but will
|
|
accept that they were made in good faith in consultation with relevant
|
|
communities outside the governing groups.
|
|
|
|
=item *
|
|
|
|
We want a system that is sustainable. That means it has provisions to
|
|
self-modify, including ways of adding new members to the governing groups, ways
|
|
to survive members becoming inactive, and ways of amending the rules of
|
|
governance themselves if needed.
|
|
|
|
=item *
|
|
|
|
We want a system that is transparent. That means that it will prefer policies
|
|
that manage ordinary matters in public, and it will prefer secrecy in a limited
|
|
number of situations.
|
|
|
|
=item *
|
|
|
|
We want a system that is respectful. That means that it will establish
|
|
standards of civil discourse that allow for healthy disagreement but avoid
|
|
rancor and hostility in the community for which it is responsible.
|
|
|
|
=back
|
|
|
|
=head1 Mandate
|
|
|
|
Perl language governance shall work to:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
Maintain the quality, stability, and continuity of the Perl language and
|
|
interpreter
|
|
|
|
=item *
|
|
|
|
Guide the evolution of the Perl language and interpreter
|
|
|
|
=item *
|
|
|
|
Establish and oversee the policies, procedures, systems, and mechanisms that
|
|
enable a community of contributors to the Perl language and interpreter
|
|
|
|
=item *
|
|
|
|
Encourage discussion and consensus among contributors as preferential to formal
|
|
decision making by governance groups
|
|
|
|
=item *
|
|
|
|
Facilitate communication between contributors and external stakeholders in the
|
|
broader Perl ecosystem
|
|
|
|
=back
|
|
|
|
=head1 Definitions
|
|
|
|
This document describes three roles involved in governance:
|
|
|
|
=over
|
|
|
|
=item "Core Team"
|
|
|
|
=item "Steering Council"
|
|
|
|
=item "Vote Administrator"
|
|
|
|
=back
|
|
|
|
A section on each follows.
|
|
|
|
=head2 The Core Team
|
|
|
|
The Core Team are a group of trusted volunteers involved in the ongoing
|
|
development of the Perl language and interpreter. They are not required to be
|
|
language developers or committers.
|
|
|
|
References to specific votes are explained in the "Rules for Voting" section.
|
|
|
|
=head3 Powers
|
|
|
|
In addition to their contributions to the Perl language, the Core Team sets
|
|
the rules of Perl governance, decides who participates in what role in
|
|
governance, and delegates substantial decision making power to the Steering
|
|
Council.
|
|
|
|
Specifically:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
They elect the Steering Council and have the power to remove Steering
|
|
Council members.
|
|
|
|
=item *
|
|
|
|
In concert with the Steering Council, they manage Core Team membership.
|
|
|
|
=item *
|
|
|
|
In concert with the Steering Council, they have the power to modify the Perl
|
|
Rules of Governance.
|
|
|
|
=back
|
|
|
|
The Core Team do not have any authority over parts of the Perl ecosystem
|
|
unrelated to developing and releasing the language itself. These include, but
|
|
are not limited to:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
The Perl Foundation
|
|
|
|
=item *
|
|
|
|
CPAN administration and CPAN authors
|
|
|
|
=item *
|
|
|
|
perl.org, metacpan.org, and other community-maintained websites and services
|
|
|
|
=item *
|
|
|
|
Perl conferences and events, except those organized directly by the Core Team
|
|
|
|
=item *
|
|
|
|
Perl-related intellectual property legally owned by third-parties, except as
|
|
allowed by applicable licenses or agreements
|
|
|
|
=back
|
|
|
|
=head3 Membership
|
|
|
|
The initial Core Team members will be specified when this document is
|
|
first ratified.
|
|
|
|
Any Core Team member may nominate someone to be added to the Core Team by
|
|
sending the nomination to the Steering Council. The Steering Council must
|
|
approve or reject the nomination. If approved, the Steering Council will
|
|
organize a Membership Change Vote to ratify the addition.
|
|
|
|
Core Team members should demonstrate:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
A solid track record of being constructive and helpful
|
|
|
|
=item *
|
|
|
|
Significant contributions to the project's goals, in any form
|
|
|
|
=item *
|
|
|
|
Willingness to dedicate some time to improving Perl
|
|
|
|
=back
|
|
|
|
Contributions are not limited to code. Here is an incomplete list of areas
|
|
where contributions may be considered for joining the Core Team:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
Working on community management and outreach
|
|
|
|
=item *
|
|
|
|
Providing support on mailing lists, IRC, or other forums
|
|
|
|
=item *
|
|
|
|
Triaging tickets
|
|
|
|
=item *
|
|
|
|
Writing patches (code, docs, or tests)
|
|
|
|
=item *
|
|
|
|
Reviewing patches (code, docs, or tests)
|
|
|
|
=item *
|
|
|
|
Participating in design discussions
|
|
|
|
=item *
|
|
|
|
Providing expertise in a particular domain (security, i18n, etc.)
|
|
|
|
=item *
|
|
|
|
Managing Perl infrastructure (websites, CI, documentation, etc.)
|
|
|
|
=item *
|
|
|
|
Maintaining significant projects in the Perl ecosystem
|
|
|
|
=item *
|
|
|
|
Creating visual designs
|
|
|
|
=back
|
|
|
|
Core Team membership acknowledges sustained and valuable efforts that align
|
|
well with the philosophy and the goals of the Perl project.
|
|
|
|
Core Team members are expected to act as role models for the community and
|
|
custodians of the project, on behalf of the community and all those who rely
|
|
on Perl.
|
|
|
|
=head3 Term
|
|
|
|
Core Team members serve until they are removed.
|
|
|
|
=head3 Removal
|
|
|
|
Core Team Members may resign their position at any time.
|
|
|
|
In exceptional circumstances, it may be necessary to remove someone from the
|
|
Core Team against their will, such as for flagrant or repeated violations of a
|
|
Code of Conduct. Any Core Team member may send a recall request to the
|
|
Steering Council naming the individual to be removed. The Steering Council
|
|
must approve or reject the recall request. If approved, the Steering Council
|
|
will organize a Membership Change vote to ratify the removal.
|
|
|
|
If the removed member is also on the Steering Council, then they are removed
|
|
from the Steering Council as well.
|
|
|
|
=head3 Inactivity
|
|
|
|
Core Team members who have stopped contributing are encouraged to declare
|
|
themselves "inactive". Inactive members do not nominate or vote. Inactive
|
|
members may declare themselves active at any time, except when a vote has been
|
|
proposed and is not concluded. Eligibility to nominate or vote will be
|
|
determined by the Vote Administrator.
|
|
|
|
To record and honor their contributions, inactive Core Team members will
|
|
continue to be listed alongside active members.
|
|
|
|
=head3 No Confidence in the Steering Council
|
|
|
|
The Core Team may remove either a single Steering Council member or the entire
|
|
Steering Council via a No Confidence Vote.
|
|
|
|
A No Confidence Vote is triggered when a Core Team member calls for one
|
|
publicly on an appropriate project communication channel, and another Core
|
|
Team member seconds the proposal.
|
|
|
|
If a No Confidence Vote removes all Steering Council members, the Vote
|
|
Administrator of the No Confidence Vote will then administer an election
|
|
to select a new Steering Council.
|
|
|
|
=head3 Amending Perl Rules of Governance
|
|
|
|
Any Core Team member may propose amending the Perl Rules of Governance by
|
|
sending a proposal to the Steering Council. The Steering Council must decide
|
|
to approve or reject the proposal. If approved, the Steering Council will
|
|
administer an Amendment Vote.
|
|
|
|
=head3 Rules for Voting
|
|
|
|
Membership Change, Amendment, and No Confidence Votes require 2/3 of
|
|
participating votes from Core Team members to pass.
|
|
|
|
A Vote Administrator must be selected following the rules in the "Vote
|
|
Administrator" section.
|
|
|
|
The vote occurs in two steps:
|
|
|
|
=over
|
|
|
|
=item 1
|
|
|
|
The Vote Administrator describes the proposal being voted upon. The Core Team
|
|
then may discuss the matter in advance of voting.
|
|
|
|
=item 2
|
|
|
|
Active Core Team members vote in favor or against the proposal. Voting is
|
|
performed anonymously.
|
|
|
|
=back
|
|
|
|
For a Membership Change Vote, each phase will last one week. For Amendment and
|
|
No Confidence Votes, each phase will last two weeks.
|
|
|
|
=head2 The Steering Council
|
|
|
|
The Steering Council is a 3-person committee, elected by the Core
|
|
Team. Candidates are not required to be members of the Core Team. Non-member
|
|
candidates are added to the Core Team if elected as if by a Membership Change
|
|
Vote.
|
|
|
|
References to specific elections are explained in the "Rules for Elections" section.
|
|
|
|
=head3 Powers
|
|
|
|
The Steering Council has broad authority to make decisions about the
|
|
development of the Perl language, the interpreter, and all other components,
|
|
systems and processes that result in new releases of the language interpreter.
|
|
|
|
For example, it can:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
Manage the schedule and process for shipping new releases
|
|
|
|
=item *
|
|
|
|
Establish procedures for proposing, discussing and deciding upon changes to the
|
|
language
|
|
|
|
=item *
|
|
|
|
Delegate power to individuals on or outside the Steering Council
|
|
|
|
=back
|
|
|
|
Decisions of the Steering Council will be made by majority vote of non-vacant
|
|
seats on the council.
|
|
|
|
The Steering Council should look for ways to use these powers as little as
|
|
possible. Instead of voting, it's better to seek consensus. Instead of ruling
|
|
on individual cases, it's better to define standards and processes that apply
|
|
to all cases.
|
|
|
|
As with the Core Team, the Steering Council does not have any authority over
|
|
parts of the Perl ecosystem unrelated to developing and releasing the language
|
|
itself.
|
|
|
|
The Steering Council does not have the power to modify the Perl Rules of
|
|
Governance, except as provided in the section "Amending Perl Rules of
|
|
Governance".
|
|
|
|
=head3 Term
|
|
|
|
A new Steering Council will be chosen by a Term Election within two weeks after
|
|
each stable feature release (that is, change to C<PERL_REVISION> or
|
|
C<PERL_VERSION>) or after two years, whichever comes first. The council members
|
|
will serve until the completion of the next Term Election unless they are
|
|
removed.
|
|
|
|
=head3 Removal
|
|
|
|
Steering Council members may resign their position at any time.
|
|
|
|
Whenever there are vacancies on the Steering Council, the council will
|
|
organize a Special Election within one week after the vacancy occurs. If the
|
|
entire Steering Council is ever vacant, a Term Election will be held instead.
|
|
|
|
If a Steering Council member is deceased, or drops out of touch and cannot be
|
|
contacted for a month or longer, then the rest of the council may vote to
|
|
declare their seat vacant. If an absent member returns after such a
|
|
declaration is made, they are not reinstated automatically, but may run in the
|
|
Special Election to fill the vacancy.
|
|
|
|
Otherwise, Steering Council members may only be removed before the end of
|
|
their term through a No Confidence Vote by the Core Team.
|
|
|
|
=head3 Rules for Elections
|
|
|
|
Term and Special Election are ranked-choice votes to construct an ordered list
|
|
of candidates to fill vacancies in the Steering Council.
|
|
|
|
A Vote Administrator must be selected following the rules in the "Vote
|
|
Administrator" section.
|
|
|
|
Both Term and Special Elections occur in two stages:
|
|
|
|
=over
|
|
|
|
=item 1
|
|
|
|
Candidates advertise their interest in serving. Candidates must be nominated by
|
|
an active Core Team member. Self-nominations are allowed. Nominated candidates
|
|
may share a statement about their candidacy with the Core Team.
|
|
|
|
=item 2
|
|
|
|
Active Core Team Members vote by ranking all candidates. Voting is performed
|
|
anonymously. After voting is complete, candidates are ranked using the
|
|
Condorcet Internet Voting Service's proportional representation mode. If a tie
|
|
occurs, it may be resolved by mutual agreement among the tied candidates, or
|
|
else the tie will be resolved through random selection by the Vote
|
|
Administrator.
|
|
|
|
=back
|
|
|
|
Anyone voted off the Core Team is not eligible to be a candidate for Steering
|
|
Council unless re-instated to the Core Team.
|
|
|
|
For a Term Election, each phase will last two weeks. At the end of the second
|
|
phase, the top three ranked candidates are elected as the new Steering Council.
|
|
|
|
For a Special Election, each phase will last one week. At the end of the
|
|
second phase, vacancies are filled from the ordered list of candidates until
|
|
no vacancies remain.
|
|
|
|
The election of the first Steering Council will be a Term Election. Ricardo
|
|
Signes will be the Vote Administrator for the initial Term Election unless he
|
|
is a candidate, in which case he will select a non-candidate administrator to
|
|
replace him.
|
|
|
|
=head2 The Vote Administrator
|
|
|
|
Every election or vote requires a Vote Administrator who manages
|
|
communication, collection of secret ballots, and all other necessary
|
|
activities to complete the voting process.
|
|
|
|
Unless otherwise specified, the Steering Council selects the Vote
|
|
Administrator.
|
|
|
|
A Vote Administrator must not be a member of the Steering Council nor a
|
|
candidate or subject of the vote. A Vote Administrator may be a member of the
|
|
Core Team and, if so, may cast a vote while also serving as administrator. If
|
|
the Vote Administrator becomes a candidate during an election vote, they will
|
|
appoint a non-candidate replacement.
|
|
|
|
If the entire Steering Council is vacant or is the subject of a No Confidence
|
|
Vote, then the Core Team will select a Vote Administrator by consensus. If
|
|
consensus cannot be reached within one week, the President of The Perl
|
|
Foundation will select a Vote Administrator.
|
|
|
|
=head1 Core Team Members
|
|
|
|
The current members of the Perl Core Team are:
|
|
|
|
=over
|
|
|
|
=item * Abhijit Menon-Sen (inactive)
|
|
|
|
=item * Andy Dougherty
|
|
|
|
=item * Chad Granum
|
|
|
|
=item * Chris 'BinGOs' Williams
|
|
|
|
=item * Craig Berry
|
|
|
|
=item * Dagfinn Ilmari Mannsåker
|
|
|
|
=item * Dave Mitchell
|
|
|
|
=item * David Golden
|
|
|
|
=item * H. Merijn Brand
|
|
|
|
=item * Hugo van der Sanden
|
|
|
|
=item * James E Keenan
|
|
|
|
=item * Jan Dubois (inactive)
|
|
|
|
=item * Jesse Vincent (inactive)
|
|
|
|
=item * Karen Etheridge
|
|
|
|
=item * Karl Williamson
|
|
|
|
=item * Leon Timmermans
|
|
|
|
=item * Matthew Horsfall
|
|
|
|
=item * Max Maischein
|
|
|
|
=item * Nicholas Clark
|
|
|
|
=item * Nicolas R.
|
|
|
|
=item * Paul "LeoNerd" Evans
|
|
|
|
=item * Philippe "BooK" Bruhat
|
|
|
|
=item * Ricardo Signes
|
|
|
|
=item * Sawyer X
|
|
|
|
=item * Steve Hay
|
|
|
|
=item * Stuart Mackintosh
|
|
|
|
=item * Todd Rinaldo
|
|
|
|
=item * Tony Cook
|
|
|
|
=back
|