A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 30KB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang=fr>
  4. <!-- Has to be within the first 1024 bytes, hence before the <title>
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset=utf-8>
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name=viewport content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>PEP 8016 -- The Steering Council Model (archive) — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="https://www.python.org/dev/peps/pep-8016/#rationale">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. PEP 8016 -- The Steering Council Model (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="https://www.python.org/dev/peps/pep-8016/#rationale">Source originale du contenu</a></h3>
  445. <div class="section" id="abstract">
  446. <h1><a class="toc-backref" href="#id2">Abstract</a></h1>
  447. <p>This PEP proposes a model of Python governance based around a steering
  448. council. The council has broad authority, which they seek to exercise
  449. as rarely as possible; instead, they use this power to establish
  450. standard processes, like those proposed in the other 801x-series PEPs.
  451. This follows the general philosophy that it's better to split up large
  452. changes into a series of small changes that can be reviewed
  453. independently: instead of trying to do everything in one PEP, we focus
  454. on providing a minimal-but-solid foundation for further governance
  455. decisions.</p>
  456. </div>
  457. <div class="section" id="pep-acceptance">
  458. <h1><a class="toc-backref" href="#id3">PEP Acceptance</a></h1>
  459. <p><a class="reference external" href="/dev/peps/pep-8016">PEP 8016</a> was accepted <a class="reference external" href="https://discuss.python.org/t/python-governance-vote-december-2018-results/546/">by a core developer vote</a>
  460. described in <a class="reference external" href="/dev/peps/pep-8001">PEP 8001</a> on Monday, December 17, 2018.</p>
  461. </div>
  462. <div class="section" id="rationale">
  463. <h1><a class="toc-backref" href="#id4">Rationale</a></h1>
  464. <p>The main goals of this proposal are:</p>
  465. <ul class="simple">
  466. <li>Be <strong>boring</strong>: We're not experts in governance, and we don't think
  467. Python is a good place to experiment with new and untried governance
  468. models. So this proposal sticks to mature, well-known, previously
  469. tested processes as much as possible. The high-level approach of a
  470. mostly-hands-off council is arguably the most common across large
  471. successful F/OSS projects, and low-level details are derived
  472. directly from Django's governance.</li>
  473. <li>Be <strong>simple</strong>: We've attempted to pare things down to the minimum
  474. needed to make this workable: the council, the core team (who elect
  475. the council), and the process for changing the document. The goal is
  476. Minimum Viable Governance.</li>
  477. <li>Be <strong>comprehensive</strong>: But for the things we need to define, we've
  478. tried to make sure to cover all the bases, because we don't want to
  479. go through this kind of crisis again. Having a clear and unambiguous
  480. set of rules also helps minimize confusion and resentment.</li>
  481. <li>Be <strong>flexible and light-weight</strong>: We know that it will take time and
  482. experimentation to find the best processes for working together. By
  483. keeping this document as minimal as possible, we keep maximal
  484. flexibility for adjusting things later, while minimizing the need
  485. for heavy-weight and anxiety-provoking processes like whole-project
  486. votes.</li>
  487. </ul>
  488. <p>A number of details were discussed in <a class="reference external" href="https://discuss.python.org/t/working-discussion-for-pep-8016-the-boringest-possible-steering-council-model/333/">this Discourse thread</a>,
  489. and then <a class="reference external" href="https://discuss.python.org/t/pep-8016-the-steering-council-model/394">this thread has further discussion</a>. These
  490. may be useful to anyone trying to understand the rationale for various
  491. minor decisions.</p>
  492. </div>
  493. <div class="section" id="specification">
  494. <h1><a class="toc-backref" href="#id5">Specification</a></h1>
  495. <div class="section" id="the-steering-council">
  496. <h2><a class="toc-backref" href="#id6">The steering council</a></h2>
  497. <div class="section" id="composition">
  498. <h3><a class="toc-backref" href="#id7">Composition</a></h3>
  499. <p>The steering council is a 5-person committee.</p>
  500. </div>
  501. <div class="section" id="mandate">
  502. <h3><a class="toc-backref" href="#id8">Mandate</a></h3>
  503. <p>The steering council shall work to:</p>
  504. <ul class="simple">
  505. <li>Maintain the quality and stability of the Python language and
  506. CPython interpreter,</li>
  507. <li>Make contributing as accessible, inclusive, and sustainable as
  508. possible,</li>
  509. <li>Formalize and maintain the relationship between the core team and
  510. the PSF,</li>
  511. <li>Establish appropriate decision-making processes for PEPs,</li>
  512. <li>Seek consensus among contributors and the core team before acting in
  513. a formal capacity,</li>
  514. <li>Act as a "court of final appeal" for decisions where all other
  515. methods have failed.</li>
  516. </ul>
  517. </div>
  518. <div class="section" id="powers">
  519. <h3><a class="toc-backref" href="#id9">Powers</a></h3>
  520. <p>The council has broad authority to make decisions about the project.
  521. For example, they can:</p>
  522. <ul class="simple">
  523. <li>Accept or reject PEPs</li>
  524. <li>Enforce or update the project's code of conduct</li>
  525. <li>Work with the PSF to manage any project assets</li>
  526. <li>Delegate parts of their authority to other subcommittees or
  527. processes</li>
  528. </ul>
  529. <p>However, they cannot modify this PEP, or affect the membership of the
  530. core team, except via the mechanisms specified in this PEP.</p>
  531. <p>The council should look for ways to use these powers as little as
  532. possible. Instead of voting, it's better to seek consensus. Instead of
  533. ruling on individual PEPs, it's better to define a standard process
  534. for PEP decision making (for example, by accepting one of the other
  535. 801x series of PEPs). It's better to establish a Code of Conduct
  536. committee than to rule on individual cases. And so on.</p>
  537. <p>To use its powers, the council votes. Every council member must either
  538. vote or explicitly abstain. Members with conflicts of interest on a
  539. particular vote must abstain. Passing requires support from a majority
  540. of non-abstaining council members.</p>
  541. <p>Whenever possible, the council's deliberations and votes shall be held
  542. in public.</p>
  543. </div>
  544. <div class="section" id="electing-the-council">
  545. <h3><a class="toc-backref" href="#id10">Electing the council</a></h3>
  546. <p>A council election consists of two phases:</p>
  547. <ul class="simple">
  548. <li>Phase 1: Candidates advertise their interest in serving. Candidates
  549. must be nominated by a core team member. Self-nominations are
  550. allowed.</li>
  551. <li>Phase 2: Each core team member can vote for zero to five of the
  552. candidates. Voting is performed anonymously. Candidates are ranked
  553. by the total number of votes they receive. If a tie occurs, it may
  554. be resolved by mutual agreement among the candidates, or else the
  555. winner will be chosen at random.</li>
  556. </ul>
  557. <p>Each phase lasts one to two weeks, at the outgoing council's discretion.
  558. For the initial election, both phases will last two weeks.</p>
  559. <p>The election process is managed by a returns officer nominated by the
  560. outgoing steering council. For the initial election, the returns
  561. officer will be nominated by the PSF Executive Director.</p>
  562. <p>The council should ideally reflect the diversity of Python
  563. contributors and users, and core team members are encouraged to vote
  564. accordingly.</p>
  565. </div>
  566. <div class="section" id="term">
  567. <h3><a class="toc-backref" href="#id11">Term</a></h3>
  568. <p>A new council is elected after each feature release. Each council's
  569. term runs from when their election results are finalized until the
  570. next council's term starts. There are no term limits.</p>
  571. </div>
  572. <div class="section" id="vacancies">
  573. <h3><a class="toc-backref" href="#id12">Vacancies</a></h3>
  574. <p>Council members may resign their position at any time.</p>
  575. <p>Whenever there is a vacancy during the regular council term, the
  576. council may vote to appoint a replacement to serve out the rest of the
  577. term.</p>
  578. <p>If a council member drops out of touch and cannot be contacted for a
  579. month or longer, then the rest of the council may vote to replace
  580. them.</p>
  581. </div>
  582. <div class="section" id="conflicts-of-interest">
  583. <h3><a class="toc-backref" href="#id13">Conflicts of interest</a></h3>
  584. <p>While we trust council members to act in the best interests of Python
  585. rather than themselves or their employers, the mere appearance of any
  586. one company dominating Python development could itself be harmful and
  587. erode trust. In order to avoid any appearance of conflict of interest,
  588. at most 2 members of the council can work for any single employer.</p>
  589. <p>In a council election, if 3 of the top 5 vote-getters work for the
  590. same employer, then whichever of them ranked lowest is disqualified
  591. and the 6th-ranking candidate moves up into 5th place; this is
  592. repeated until a valid council is formed.</p>
  593. <p>During a council term, if changing circumstances cause this rule to be
  594. broken (for instance, due to a council member changing employment),
  595. then one or more council members must resign to remedy the issue, and
  596. the resulting vacancies can then be filled as normal.</p>
  597. </div>
  598. <div class="section" id="ejecting-core-team-members">
  599. <h3><a class="toc-backref" href="#id14">Ejecting core team members</a></h3>
  600. <p>In exceptional circumstances, it may be necessary to remove someone
  601. from the core team against their will. (For example: egregious and
  602. ongoing code of conduct violations.) This can be accomplished by a
  603. steering council vote, but unlike other steering council votes, this
  604. requires at least a two-thirds majority. With 5 members voting, this
  605. means that a 3:2 vote is insufficient; 4:1 in favor is the minimum
  606. required for such a vote to succeed. In addition, this is the one
  607. power of the steering council which cannot be delegated, and this
  608. power cannot be used while a vote of no confidence is in process.</p>
  609. <p>If the ejected core team member is also on the steering council, then
  610. they are removed from the steering council as well.</p>
  611. </div>
  612. <div class="section" id="vote-of-no-confidence">
  613. <h3><a class="toc-backref" href="#id15">Vote of no confidence</a></h3>
  614. <p>In exceptional circumstances, the core team may remove a sitting
  615. council member, or the entire council, via a vote of no confidence.</p>
  616. <p>A no-confidence vote is triggered when a core team member calls for
  617. one publically on an appropriate project communication channel, and
  618. another core team member seconds the proposal.</p>
  619. <p>The vote lasts for two weeks. Core team members vote for or against.
  620. If at least two thirds of voters express a lack of confidence, then
  621. the vote succeeds.</p>
  622. <p>There are two forms of no-confidence votes: those targeting a single
  623. member, and those targeting the council as a whole. The initial call
  624. for a no-confidence vote must specify which type is intended. If a
  625. single-member vote succeeds, then that member is removed from the
  626. council and the resulting vacancy can be handled in the usual way. If
  627. a whole-council vote succeeds, the council is dissolved and a new
  628. council election is triggered immediately.</p>
  629. </div>
  630. </div>
  631. <div class="section" id="the-core-team">
  632. <h2><a class="toc-backref" href="#id16">The core team</a></h2>
  633. <div class="section" id="role">
  634. <h3><a class="toc-backref" href="#id17">Role</a></h3>
  635. <p>The core team is the group of trusted volunteers who manage Python.
  636. They assume many roles required to achieve the project's goals,
  637. especially those that require a high level of trust. They make the
  638. decisions that shape the future of the project.</p>
  639. <p>Core team members are expected to act as role models for the community
  640. and custodians of the project, on behalf of the community and all
  641. those who rely on Python.</p>
  642. <p>They will intervene, where necessary, in online discussions or at
  643. official Python events on the rare occasions that a situation arises
  644. that requires intervention.</p>
  645. <p>They have authority over the Python Project infrastructure, including
  646. the Python Project website itself, the Python GitHub organization and
  647. repositories, the bug tracker, the mailing lists, IRC channels, etc.</p>
  648. </div>
  649. <div class="section" id="prerogatives">
  650. <h3><a class="toc-backref" href="#id18">Prerogatives</a></h3>
  651. <p>Core team members may participate in formal votes, typically to nominate new
  652. team members and to elect the steering council.</p>
  653. </div>
  654. <div class="section" id="membership">
  655. <h3><a class="toc-backref" href="#id19">Membership</a></h3>
  656. <p>Python core team members demonstrate:</p>
  657. <ul class="simple">
  658. <li>a good grasp of the philosophy of the Python Project</li>
  659. <li>a solid track record of being constructive and helpful</li>
  660. <li>significant contributions to the project's goals, in any form</li>
  661. <li>willingness to dedicate some time to improving Python</li>
  662. </ul>
  663. <p>As the project matures, contributions go beyond code. Here's an
  664. incomplete list of areas where contributions may be considered for
  665. joining the core team, in no particular order:</p>
  666. <ul class="simple">
  667. <li>Working on community management and outreach</li>
  668. <li>Providing support on the mailing lists and on IRC</li>
  669. <li>Triaging tickets</li>
  670. <li>Writing patches (code, docs, or tests)</li>
  671. <li>Reviewing patches (code, docs, or tests)</li>
  672. <li>Participating in design decisions</li>
  673. <li>Providing expertise in a particular domain (security, i18n, etc.)</li>
  674. <li>Managing the continuous integration infrastructure</li>
  675. <li>Managing the servers (website, tracker, documentation, etc.)</li>
  676. <li>Maintaining related projects (alternative interpreters, core
  677. infrastructure like packaging, etc.)</li>
  678. <li>Creating visual designs</li>
  679. </ul>
  680. <p>Core team membership acknowledges sustained and valuable efforts that
  681. align well with the philosophy and the goals of the Python project.</p>
  682. <p>It is granted by receiving at least two-thirds positive votes in a
  683. core team vote and no veto by the steering council.</p>
  684. <p>Core team members are always looking for promising contributors,
  685. teaching them how the project is managed, and submitting their names
  686. to the core team's vote when they're ready.</p>
  687. <p>There's no time limit on core team membership. However, in order to
  688. provide the general public with a reasonable idea of how many people
  689. maintain Python, core team members who have stopped contributing are
  690. encouraged to declare themselves as "inactive". Those who haven't made
  691. any non-trivial contribution in two years may be asked to move
  692. themselves to this category, and moved there if they don't respond. To
  693. record and honor their contributions, inactive team members will
  694. continue to be listed alongside active core team members; and, if they
  695. later resume contributing, they can switch back to active status at
  696. will. While someone is in inactive status, though, they lose their
  697. active privileges like voting or nominating for the steering council,
  698. and commit access.</p>
  699. <p>The initial active core team members will consist of everyone
  700. currently listed in the <a class="reference external" href="https://github.com/orgs/python/teams/python-core/members">"Python core" team on Github</a>, and the
  701. initial inactive members will consist of everyone else who has been a
  702. committer in the past.</p>
  703. </div>
  704. </div>
  705. </article>
  706. </section>
  707. <nav id="jumpto">
  708. <p>
  709. <a href="/david/blog/">Accueil du blog</a> |
  710. <a href="https://www.python.org/dev/peps/pep-8016/#rationale">Source originale</a> |
  711. <a href="/david/stream/2019/">Accueil du flux</a>
  712. </p>
  713. </nav>
  714. <footer>
  715. <div>
  716. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  717. <p>
  718. Bonjour/Hi!
  719. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  720. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  721. </p>
  722. <p>
  723. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  724. </p>
  725. <p>
  726. Voici quelques articles choisis :
  727. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  728. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  729. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  730. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  731. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  732. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  733. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  734. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  735. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  736. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  737. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  738. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  739. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  740. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  741. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  742. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  743. </p>
  744. <p>
  745. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  746. </p>
  747. <p>
  748. Je ne traque pas ta navigation mais mon
  749. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  750. conserve des logs d’accès.
  751. </p>
  752. </div>
  753. </footer>
  754. <script type="text/javascript">
  755. ;(_ => {
  756. const jumper = document.getElementById('jumper')
  757. jumper.addEventListener('click', e => {
  758. e.preventDefault()
  759. const anchor = e.target.getAttribute('href')
  760. const targetEl = document.getElementById(anchor.substring(1))
  761. targetEl.scrollIntoView({behavior: 'smooth'})
  762. })
  763. })()
  764. </script>