333 lines
18 KiB
HTML
333 lines
18 KiB
HTML
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="color-scheme" content="light dark">
|
||
<title>PEP 731 – C API Working Group Charter | peps.python.org</title>
|
||
<link rel="shortcut icon" href="../_static/py.png">
|
||
<link rel="canonical" href="https://peps.python.org/pep-0731/">
|
||
<link rel="stylesheet" href="../_static/style.css" type="text/css">
|
||
<link rel="stylesheet" href="../_static/mq.css" type="text/css">
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" media="(prefers-color-scheme: light)" id="pyg-light">
|
||
<link rel="stylesheet" href="../_static/pygments_dark.css" type="text/css" media="(prefers-color-scheme: dark)" id="pyg-dark">
|
||
<link rel="alternate" type="application/rss+xml" title="Latest PEPs" href="https://peps.python.org/peps.rss">
|
||
<meta property="og:title" content='PEP 731 – C API Working Group Charter | peps.python.org'>
|
||
<meta property="og:description" content="This PEP proposes to establish the C API Working Group: a small committee of Python core developers responsible for overseeing and coordinating the development and maintenance of the Python C API.">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="https://peps.python.org/pep-0731/">
|
||
<meta property="og:site_name" content="Python Enhancement Proposals (PEPs)">
|
||
<meta property="og:image" content="https://peps.python.org/_static/og-image.png">
|
||
<meta property="og:image:alt" content="Python PEPs">
|
||
<meta property="og:image:width" content="200">
|
||
<meta property="og:image:height" content="200">
|
||
<meta name="description" content="This PEP proposes to establish the C API Working Group: a small committee of Python core developers responsible for overseeing and coordinating the development and maintenance of the Python C API.">
|
||
<meta name="theme-color" content="#3776ab">
|
||
</head>
|
||
<body>
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||
<symbol id="svg-sun-half" viewBox="0 0 24 24" pointer-events="all">
|
||
<title>Following system colour scheme</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||
<circle cx="12" cy="12" r="9"></circle>
|
||
<path d="M12 3v18m0-12l4.65-4.65M12 14.3l7.37-7.37M12 19.6l8.85-8.85"></path>
|
||
</svg>
|
||
</symbol>
|
||
<symbol id="svg-moon" viewBox="0 0 24 24" pointer-events="all">
|
||
<title>Selected dark colour scheme</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path>
|
||
</svg>
|
||
</symbol>
|
||
<symbol id="svg-sun" viewBox="0 0 24 24" pointer-events="all">
|
||
<title>Selected light colour scheme</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||
<circle cx="12" cy="12" r="5"></circle>
|
||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||
</svg>
|
||
</symbol>
|
||
</svg>
|
||
<script>
|
||
|
||
document.documentElement.dataset.colour_scheme = localStorage.getItem("colour_scheme") || "auto"
|
||
</script>
|
||
<section id="pep-page-section">
|
||
<header>
|
||
<h1>Python Enhancement Proposals</h1>
|
||
<ul class="breadcrumbs">
|
||
<li><a href="https://www.python.org/" title="The Python Programming Language">Python</a> » </li>
|
||
<li><a href="../pep-0000/">PEP Index</a> » </li>
|
||
<li>PEP 731</li>
|
||
</ul>
|
||
<button id="colour-scheme-cycler" onClick="setColourScheme(nextColourScheme())">
|
||
<svg aria-hidden="true" class="colour-scheme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||
<svg aria-hidden="true" class="colour-scheme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||
<svg aria-hidden="true" class="colour-scheme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||
<span class="visually-hidden">Toggle light / dark / auto colour theme</span>
|
||
</button>
|
||
</header>
|
||
<article>
|
||
<section id="pep-content">
|
||
<h1 class="page-title">PEP 731 – C API Working Group Charter</h1>
|
||
<dl class="rfc2822 field-list simple">
|
||
<dt class="field-odd">Author<span class="colon">:</span></dt>
|
||
<dd class="field-odd">Guido van Rossum <guido at python.org>,
|
||
Petr Viktorin <encukou at gmail.com>,
|
||
Victor Stinner <vstinner at python.org>,
|
||
Steve Dower <steve.dower at python.org>,
|
||
Irit Katriel <irit at python.org></dd>
|
||
<dt class="field-even">Discussions-To<span class="colon">:</span></dt>
|
||
<dd class="field-even"><a class="reference external" href="https://discuss.python.org/t/pep-731-c-api-working-group-charter/36117">Discourse thread</a></dd>
|
||
<dt class="field-odd">Status<span class="colon">:</span></dt>
|
||
<dd class="field-odd"><abbr title="Currently valid informational guidance, or an in-use process">Active</abbr></dd>
|
||
<dt class="field-even">Type<span class="colon">:</span></dt>
|
||
<dd class="field-even"><abbr title="Normative PEP describing or proposing a change to a Python community process, workflow or governance">Process</abbr></dd>
|
||
<dt class="field-odd">Topic<span class="colon">:</span></dt>
|
||
<dd class="field-odd"><a class="reference external" href="../topic/governance/">Governance</a></dd>
|
||
<dt class="field-even">Created<span class="colon">:</span></dt>
|
||
<dd class="field-even">11-Oct-2023</dd>
|
||
<dt class="field-odd">Post-History<span class="colon">:</span></dt>
|
||
<dd class="field-odd"><a class="reference external" href="https://discuss.python.org/t/pep-731-c-api-working-group-charter/36117" title="Discourse thread">13-Oct-2023</a>,
|
||
<a class="reference external" href="https://discuss.python.org/t/c-api-working-group-vacancy/54015" title="Discourse thread">23-May-2024</a>,
|
||
<a class="reference external" href="https://discuss.python.org/t/c-api-working-group-vacancy-again/56167" title="Discourse thread">19-Jun-2024</a></dd>
|
||
<dt class="field-even">Resolution<span class="colon">:</span></dt>
|
||
<dd class="field-even"><a class="reference external" href="https://discuss.python.org/t/pep-731-c-api-working-group-charter/36117/12">Discourse message</a></dd>
|
||
</dl>
|
||
<hr class="docutils" />
|
||
<section id="contents">
|
||
<details><summary>Table of Contents</summary><ul class="simple">
|
||
<li><a class="reference internal" href="#abstract">Abstract</a></li>
|
||
<li><a class="reference internal" href="#epigraph">Epigraph</a></li>
|
||
<li><a class="reference internal" href="#motivation">Motivation</a></li>
|
||
<li><a class="reference internal" href="#specification">Specification</a><ul>
|
||
<li><a class="reference internal" href="#members">Members</a></li>
|
||
<li><a class="reference internal" href="#mandate">Mandate</a></li>
|
||
<li><a class="reference internal" href="#operations-and-process">Operations and process</a><ul>
|
||
<li><a class="reference internal" href="#relationship-with-the-steering-council">Relationship with the Steering Council</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#amendments">Amendments</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#contact">Contact</a></li>
|
||
<li><a class="reference internal" href="#copyright">Copyright</a></li>
|
||
</ul>
|
||
</details></section>
|
||
<section id="abstract">
|
||
<h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2>
|
||
<p>This PEP proposes to establish the C API Working Group:
|
||
a small committee of Python core developers responsible for
|
||
overseeing and coordinating the development and maintenance of the Python C API.</p>
|
||
<p>The working group will maintain
|
||
documentation, test suites and tooling related to Python’s C API.
|
||
As delegated by the Steering Council
|
||
it is the deciding body for changes to the C API,
|
||
from the addition or removal of individual API functions, types, etc.,
|
||
to the acceptance of new designs of a more or less radical nature.</p>
|
||
<p>The working group’s mandate is to represent the interests of all Python users,
|
||
but especially all maintainers of code that uses Python’s C API,
|
||
whether in the context of CPython, using an alternate Python implementation,
|
||
or using a binding framework for other programming languages (such as C++ and Rust).</p>
|
||
<p>The working group serves at the pleasure of the Python Steering Council.
|
||
This document serves as the working group’s charter.</p>
|
||
</section>
|
||
<section id="epigraph">
|
||
<h2><a class="toc-backref" href="#epigraph" role="doc-backlink">Epigraph</a></h2>
|
||
<div class="line-block">
|
||
<div class="line">KEEPER</div>
|
||
<div class="line">Stop!
|
||
Who would cross the Bridge of Death must answer me these questions three,
|
||
ere the other side he see.</div>
|
||
</div>
|
||
<ol class="arabic simple">
|
||
<li>What was Python named after?</li>
|
||
<li>What was Python 2’s EOL?</li>
|
||
<li>What is the optimal strategy to evolve the CPython C API?</li>
|
||
</ol>
|
||
<div class="line-block">
|
||
<div class="line">LANCELOT</div>
|
||
<div class="line">Auuuuuuuugh!</div>
|
||
</div>
|
||
</section>
|
||
<section id="motivation">
|
||
<h2><a class="toc-backref" href="#motivation" role="doc-backlink">Motivation</a></h2>
|
||
<p>Despite many discussions and in-person meetings
|
||
at core developer sprints and Language Summits,
|
||
and a thorough inventory of the problems and stakeholders of the C API,
|
||
no consensus has been reached about many contentious issues,
|
||
including, but not limited to:</p>
|
||
<ul class="simple">
|
||
<li>Conventions for designing new API functions;</li>
|
||
<li>How to deal with compatibility;</li>
|
||
<li>What’s the best strategy for handling errors;</li>
|
||
<li>The future of the Stable ABI and the Limited API;</li>
|
||
<li>Whether to switch to a handle-based API convention (and how).</li>
|
||
</ul>
|
||
<p>The general feeling is that there are too many stakeholders,
|
||
proposals, requirements, constraints, and conventions,
|
||
to make progress without having a small trusted group of deciders.</p>
|
||
<p>At the 2023 Language Summit in Salt Lake City it was decided to start work on
|
||
an <a class="reference external" href="https://github.com/capi-working-group/problems">inventory of problems</a>.
|
||
At the 2023 core developer sprint in Brno this work is more or less finished
|
||
and after a discussion it appeared that the next step is to establish
|
||
a working group to ensure that we’re not stymied forever.</p>
|
||
<p>The Steering Council has
|
||
<a class="reference external" href="https://github.com/python/steering-council/issues/201#issuecomment-1648848155">indicated</a>
|
||
its desire to delegate decisions about the C API
|
||
to such a working group, anticipating its formal establishment.</p>
|
||
</section>
|
||
<section id="specification">
|
||
<h2><a class="toc-backref" href="#specification" role="doc-backlink">Specification</a></h2>
|
||
<p>We propose the creation of a new group, the C API Working Group.
|
||
This group will be responsible for overseeing and coordinating the development and
|
||
maintenance of the Python C API.
|
||
It will do this by establishing the principles underpinning the work
|
||
and publishing guidelines that the core developers can refer to.</p>
|
||
<p>The “operations and process” section below describes
|
||
how the working group operates and how it is governed.</p>
|
||
<section id="members">
|
||
<h3><a class="toc-backref" href="#members" role="doc-backlink">Members</a></h3>
|
||
<p>The members of the working group are:</p>
|
||
<ul class="simple">
|
||
<li>Erlend Aasland</li>
|
||
<li>Michael Droettboom</li>
|
||
<li>Petr Viktorin</li>
|
||
<li>Serhiy Storchaka</li>
|
||
<li>Steve Dower</li>
|
||
<li>Victor Stinner</li>
|
||
</ul>
|
||
</section>
|
||
<section id="mandate">
|
||
<h3><a class="toc-backref" href="#mandate" role="doc-backlink">Mandate</a></h3>
|
||
<p>The working group’s mandate is to ensure that the Python C API
|
||
is suitable for all users of and contributors to the API,
|
||
without unduly preferencing one group over another.
|
||
The working group will identify exemplar stakeholders,
|
||
their needs and preferences,
|
||
and will determine a plan for meeting these needs equitably and sustainably.
|
||
It will oversee execution of the plan.</p>
|
||
</section>
|
||
<section id="operations-and-process">
|
||
<h3><a class="toc-backref" href="#operations-and-process" role="doc-backlink">Operations and process</a></h3>
|
||
<p>The working group has at least three members,
|
||
comprised of prominent Python core developers.
|
||
The members should consider the needs of the various stakeholders carefully.</p>
|
||
<p>The Steering Council appoints the initial working group.
|
||
There is no term limit for working group members.
|
||
Working group members may resign their position at any time, for any reason.
|
||
There is an expectation that the membership will change over time.</p>
|
||
<p>To determine replacements,
|
||
nominations will be collected from the core developer community.
|
||
Self-nominations are allowed.
|
||
The existing working group will then decide the replacement member(s)
|
||
from the nominees.
|
||
The expectation is that this will be done by fiat,
|
||
but the working group can choose a replacement by any means they see fit,
|
||
including a vote.</p>
|
||
<p>The working group remains accountable to the Steering Council.
|
||
At any point, for any reason, the Steering Council could
|
||
(publicly or privately) make a specific change
|
||
or request a non-specific change to the composition of the working group.</p>
|
||
<p>We acknowledge that this is not a particularly democratic structure
|
||
and puts a lot of faith in the working group.
|
||
However, the Python community has a long history of success
|
||
with structures that are not fully democratic!
|
||
We believe that self-governance, cycling of membership,
|
||
and accountability to the Steering Council will be sufficient
|
||
to ensure that the C API workgroup is meeting the needs of the community.</p>
|
||
<p>The working group may operate primarily through reviews of GitHub issues and PRs.
|
||
Regular meetings are likely not necessary,
|
||
but the working group may set up video calls,
|
||
a private chat, or whatever other mechanism they decide upon internally.</p>
|
||
<p>The working group should aim for transparency,
|
||
posting all decisions publicly on
|
||
<a class="reference external" href="https://discuss.python.org">discuss.python.org</a>,
|
||
with a rationale if possible.
|
||
Before making a decision, the working group should give
|
||
all interested community members
|
||
(as examples of different categories of stakeholders)
|
||
a chance to weigh in.
|
||
There should be at least a week between the start of a discussion
|
||
and the working group’s decision.</p>
|
||
<section id="relationship-with-the-steering-council">
|
||
<h4><a class="toc-backref" href="#relationship-with-the-steering-council" role="doc-backlink">Relationship with the Steering Council</a></h4>
|
||
<p>Just like today, the Python Steering Council remains responsible
|
||
for the overall direction of the Python C API
|
||
and continues to decide on PEPs related to the C API,
|
||
using the standard PEP review process (community discussion, etc.).
|
||
The C API working group provides written opinions and
|
||
recommendations to the Steering Council on PEPs related to the C API.</p>
|
||
<p>However, the working group can make smaller C API changes directly.
|
||
The Steering Council may also choose to delegate decisions on some PEPs
|
||
to the working group (exactly as any other PEP delegation).</p>
|
||
</section>
|
||
</section>
|
||
<section id="amendments">
|
||
<h3><a class="toc-backref" href="#amendments" role="doc-backlink">Amendments</a></h3>
|
||
<p>This PEP serves as a charter for the working group.
|
||
Changes to its operation can be made either through a new PEP
|
||
or through a change to this PEP.
|
||
In either case, the change will be decided upon
|
||
by the Steering Council after discussion in the community.</p>
|
||
</section>
|
||
</section>
|
||
<section id="contact">
|
||
<h2><a class="toc-backref" href="#contact" role="doc-backlink">Contact</a></h2>
|
||
<p>To ask the C API Working Group for a decision,
|
||
community members may open an issue in the
|
||
<a class="reference external" href="https://github.com/capi-workgroup/decisions/">capi-workgroup/decisions</a>
|
||
repository.</p>
|
||
</section>
|
||
<section id="copyright">
|
||
<h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2>
|
||
<p>This document is placed in the public domain or under the
|
||
CC0-1.0-Universal license, whichever is more permissive.</p>
|
||
</section>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0731.rst">https://github.com/python/peps/blob/main/peps/pep-0731.rst</a></p>
|
||
<p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-0731.rst">2024-06-27 15:01:11 GMT</a></p>
|
||
|
||
</article>
|
||
<nav id="pep-sidebar">
|
||
<h2>Contents</h2>
|
||
<ul>
|
||
<li><a class="reference internal" href="#abstract">Abstract</a></li>
|
||
<li><a class="reference internal" href="#epigraph">Epigraph</a></li>
|
||
<li><a class="reference internal" href="#motivation">Motivation</a></li>
|
||
<li><a class="reference internal" href="#specification">Specification</a><ul>
|
||
<li><a class="reference internal" href="#members">Members</a></li>
|
||
<li><a class="reference internal" href="#mandate">Mandate</a></li>
|
||
<li><a class="reference internal" href="#operations-and-process">Operations and process</a><ul>
|
||
<li><a class="reference internal" href="#relationship-with-the-steering-council">Relationship with the Steering Council</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#amendments">Amendments</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#contact">Contact</a></li>
|
||
<li><a class="reference internal" href="#copyright">Copyright</a></li>
|
||
</ul>
|
||
|
||
<br>
|
||
<a id="source" href="https://github.com/python/peps/blob/main/peps/pep-0731.rst">Page Source (GitHub)</a>
|
||
</nav>
|
||
</section>
|
||
<script src="../_static/colour_scheme.js"></script>
|
||
<script src="../_static/wrap_tables.js"></script>
|
||
<script src="../_static/sticky_banner.js"></script>
|
||
</body>
|
||
</html> |