| 1 |
PSEP: 1 |
| 2 |
Title: PSEP Purpose and Guidelines |
| 3 |
Version: $Revision$ |
| 4 |
Last-Modified: $Date$ |
| 5 |
Author: Matti Airas |
| 6 |
Status: Active |
| 7 |
Type: Process |
| 8 |
Content-Type: text/x-rst |
| 9 |
Created: 23-Sep-2009 |
| 10 |
|
| 11 |
|
| 12 |
What is a PSEP? |
| 13 |
=============== |
| 14 |
|
| 15 |
PSEP stands for PySide Enhancement Proposal. A PSEP is a design |
| 16 |
document providing information to the PySide community, or describing |
| 17 |
a new feature for PySide or its processes or environment. The PSEP |
| 18 |
should provide a concise technical specification of the feature and a |
| 19 |
rationale for the feature. |
| 20 |
|
| 21 |
We intend PSEPs to be the primary mechanisms for proposing new |
| 22 |
features, for collecting community input on an issue, and for |
| 23 |
documenting the design decisions that have gone into PySide. The PSEP |
| 24 |
author is responsible for building consensus within the community and |
| 25 |
documenting dissenting opinions. |
| 26 |
|
| 27 |
Because the PSEPs are maintained as text files in a versioned |
| 28 |
repository, their revision history is the historical record of the |
| 29 |
feature proposal [1]_. |
| 30 |
|
| 31 |
The whole PSEP process has been copied verbatim from Python's PEP |
| 32 |
(Python Enhancement Proposal) process, and this document has been |
| 33 |
adapted to PSEP by Matti Airas from PEP 1 by Barry Warsaw, Jeremy |
| 34 |
Hylton, and David Goodger. |
| 35 |
|
| 36 |
PSEP Types |
| 37 |
========== |
| 38 |
|
| 39 |
There are three kinds of PSEP: |
| 40 |
|
| 41 |
1. A **Standards Track** PSEP describes a new feature or implementation |
| 42 |
for PySide. |
| 43 |
|
| 44 |
2. An **Informational** PSEP describes a PySide design issue, or |
| 45 |
provides general guidelines or information to the PySide community, |
| 46 |
but does not propose a new feature. Informational PSEPs do not |
| 47 |
necessarily represent a PySide community consensus or |
| 48 |
recommendation, so users and implementors are free to ignore |
| 49 |
Informational PSEPs or follow their advice. |
| 50 |
|
| 51 |
3. A **Process** PSEP describes a process surrounding PySide, or |
| 52 |
proposes a change to (or an event in) a process. Process PSEPs are |
| 53 |
like Standards Track PSEPs but apply to areas other than the PySide |
| 54 |
itself. They may propose an implementation, but not to |
| 55 |
PySide's codebase; they often require community consensus; unlike |
| 56 |
Informational PSEPs, they are more than recommendations, and users |
| 57 |
are typically not free to ignore them. Examples include |
| 58 |
procedures, guidelines, changes to the decision-making process, and |
| 59 |
changes to the tools or environment used in Python development. |
| 60 |
Any meta-PSEP is also considered a Process PSEP. |
| 61 |
|
| 62 |
|
| 63 |
PSEP Work Flow |
| 64 |
============== |
| 65 |
|
| 66 |
The PSEP editors assign PSEP numbers and change their status. The |
| 67 |
current PSEP editor is Matti Airas. Please send |
| 68 |
all PSEP-related email to <pyside@lists.openbossa.org> (no cross-posting please). |
| 69 |
Also see `PSEP Editor Responsibilities & Workflow`_ below. |
| 70 |
|
| 71 |
The PSEP process begins with a new idea for PySide. It is highly |
| 72 |
recommended that a single PSEP contain a single key proposal or new |
| 73 |
idea. The more focussed the PSEP, the more successful it tends to |
| 74 |
be. The PSEP editor reserves the right to reject PSEP proposals if they |
| 75 |
appear too unfocussed or too broad. If in doubt, split your PSEP into |
| 76 |
several well-focussed ones. |
| 77 |
|
| 78 |
Each PSEP must have a champion -- someone who writes the PSEP using the |
| 79 |
style and format described below, shepherds the discussions in the |
| 80 |
appropriate forums, and attempts to build community consensus around the |
| 81 |
idea. The PSEP champion (a.k.a. Author) should first attempt to |
| 82 |
ascertain whether the idea is PSEP-able. Posting to the |
| 83 |
pyside@lists.openbossa.org mailing list is recommended. Enhancements not |
| 84 |
resulting in API changes usually don't need a PSEP and can be injected |
| 85 |
into the PySide development work flow with a patch submission to the |
| 86 |
PySide `issue tracker`_. |
| 87 |
|
| 88 |
The PSEP champion then emails the PSEP editor <pyside@lists.openbossa.org> with a |
| 89 |
proposed title and a rough, but fleshed out, draft of the PSEP. This |
| 90 |
draft must be written in PSEP style as described below. |
| 91 |
|
| 92 |
If the PSEP editor approves, he will assign the PSEP a number, label it |
| 93 |
as Standards Track, Informational, or Process, give it status "Draft", |
| 94 |
and create and check-in the initial draft of the PSEP. The PSEP editor |
| 95 |
will not unreasonably deny a PSEP. Reasons for denying PSEP status |
| 96 |
include duplication of effort, being technically unsound, not providing |
| 97 |
proper motivation or addressing backwards compatibility, or not in |
| 98 |
keeping with the PySide philosophy. The TBC (Temporary Benevolent |
| 99 |
Committee, consisting of the core dev team and Matti Airas) can be consulted |
| 100 |
during the approval phase, and is the final arbiter of the draft's |
| 101 |
PSEP-ability. |
| 102 |
|
| 103 |
If a pre-PSEP is rejected, the author may elect to take the pre-PSEP to |
| 104 |
the pyside@lists.openbossa.org mailing list to help flesh it out, gain feedback |
| 105 |
and consensus from the community at large, and improve the PSEP for |
| 106 |
re-submission. |
| 107 |
|
| 108 |
The author of the PSEP is then responsible for posting the PSEP to the |
| 109 |
community forums, and marshaling community support for it. As updates |
| 110 |
are necessary, the PSEP author can check in new versions if they have |
| 111 |
SVN commit permissions, or can email new PSEP versions to the PSEP |
| 112 |
editor for committing. |
| 113 |
|
| 114 |
Standards Track PSEPs consist of two parts, a design document and a |
| 115 |
reference implementation. The PSEP should be reviewed and accepted |
| 116 |
before a reference implementation is begun, unless a reference |
| 117 |
implementation will aid people in studying the PSEP. Standards Track |
| 118 |
PSEPs must include an implementation -- in the form of code, a patch, |
| 119 |
or a URL to same -- before it can be considered Final. |
| 120 |
|
| 121 |
PSEP authors are responsible for collecting community feedback on a PSEP |
| 122 |
before submitting it for review. A PSEP that has not been discussed on |
| 123 |
pyside@lists.openbossa.org will not be |
| 124 |
accepted. However, wherever possible, long open-ended discussions on |
| 125 |
public mailing lists should be avoided. Strategies to keep the |
| 126 |
discussions efficient include: setting up a separate SIG mailing list |
| 127 |
for the topic, having the PSEP author accept private comments in the |
| 128 |
early design phases, setting up a wiki page, etc. PSEP authors should |
| 129 |
use their discretion here. |
| 130 |
|
| 131 |
Once the authors have completed a PSEP, they must inform the PSEP editor |
| 132 |
that it is ready for review. PSEPs are reviewed by the TBC, who may |
| 133 |
accept or reject a PSEP or send it back to the author(s) for revision. |
| 134 |
For a PSEP that is pre-determined to be acceptable (e.g., it is an |
| 135 |
obvious win as-is and/or its implementation has already been checked in) |
| 136 |
the TBC may also initiate a PSEP review, first notifying the PSEP |
| 137 |
author(s) and giving them a chance to make revisions. |
| 138 |
|
| 139 |
For a PSEP to be accepted it must meet certain minimum criteria. It |
| 140 |
must be a clear and complete description of the proposed enhancement. |
| 141 |
The enhancement must represent a net improvement. The proposed |
| 142 |
implementation, if applicable, must be solid and must not complicate the |
| 143 |
interpreter unduly. Finally, a proposed enhancement must properly |
| 144 |
balance the "pythonicity" and "Qt-likeness" in order to be accepted by |
| 145 |
the TBC. (However, "pythonic" and "Qt-likeness" are imprecise terms; |
| 146 |
they may be defined as whatever is acceptable to the TBC. This logic is |
| 147 |
intentionally circular.) |
| 148 |
|
| 149 |
Once a PSEP has been accepted, the reference implementation must be |
| 150 |
completed. When the reference implementation is complete and accepted |
| 151 |
by the TBC, the status will be changed to "Final". |
| 152 |
|
| 153 |
A PSEP can also be assigned status "Deferred". The PSEP author or |
| 154 |
editor can assign the PSEP this status when no progress is being made |
| 155 |
on the PSEP. Once a PSEP is deferred, the PSEP editor can re-assign it |
| 156 |
to draft status. |
| 157 |
|
| 158 |
A PSEP can also be "Rejected". Perhaps after all is said and done it |
| 159 |
was not a good idea. It is still important to have a record of this |
| 160 |
fact. |
| 161 |
|
| 162 |
PSEPs can also be replaced by a different PSEP, rendering the original |
| 163 |
obsolete. This is intended for Informational PSEPs, where version 2 of |
| 164 |
an API can replace version 1. |
| 165 |
|
| 166 |
The possible paths of the status of PSEPs are as follows: |
| 167 |
|
| 168 |
.. image:: psep-0001-1.png |
| 169 |
|
| 170 |
Some Informational and Process PSEPs may also have a status of "Active" |
| 171 |
if they are never meant to be completed. E.g. PSEP 1 (this PSEP). |
| 172 |
|
| 173 |
|
| 174 |
What belongs in a successful PSEP? |
| 175 |
================================== |
| 176 |
|
| 177 |
Each PSEP should have the following parts: |
| 178 |
|
| 179 |
1. Preamble -- RFC 822 style headers containing meta-data about the |
| 180 |
PSEP, including the PSEP number, a short descriptive title (limited |
| 181 |
to a maximum of 44 characters), the names, and optionally the |
| 182 |
contact info for each author, etc. |
| 183 |
|
| 184 |
2. Abstract -- a short (~200 word) description of the technical issue |
| 185 |
being addressed. |
| 186 |
|
| 187 |
3. Copyright/public domain -- Each PSEP must either be explicitly |
| 188 |
labelled as placed in the public domain (see this PSEP as an |
| 189 |
example) or licensed under the `Open Publication License`_. |
| 190 |
|
| 191 |
4. Specification -- The technical specification should describe the |
| 192 |
syntax and semantics of any new API feature. The |
| 193 |
specification should be detailed enough to allow competing, |
| 194 |
interoperable implementations for any of the current Python Qt |
| 195 |
bindings. |
| 196 |
|
| 197 |
5. Motivation -- The motivation is critical for PSEPs that want to |
| 198 |
change the PySide API. It should clearly explain why the |
| 199 |
existing API is inadequate to address the |
| 200 |
problem that the PSEP solves. PSEP submissions without sufficient |
| 201 |
motivation may be rejected outright. |
| 202 |
|
| 203 |
6. Rationale -- The rationale fleshes out the specification by |
| 204 |
describing what motivated the design and why particular design |
| 205 |
decisions were made. It should describe alternate designs that |
| 206 |
were considered and related work, e.g. how the feature is supported |
| 207 |
in other languages. |
| 208 |
|
| 209 |
The rationale should provide evidence of consensus within the |
| 210 |
community and discuss important objections or concerns raised |
| 211 |
during discussion. |
| 212 |
|
| 213 |
7. Backwards Compatibility -- All PSEPs that introduce backwards |
| 214 |
incompatibilities must include a section describing these |
| 215 |
incompatibilities and their severity. The PSEP must explain how the |
| 216 |
author proposes to deal with these incompatibilities. PSEP |
| 217 |
submissions without a sufficient backwards compatibility treatise |
| 218 |
may be rejected outright. |
| 219 |
|
| 220 |
8. Reference Implementation -- The reference implementation must be |
| 221 |
completed before any PSEP is given status "Final", but it need not |
| 222 |
be completed before the PSEP is accepted. It is better to finish |
| 223 |
the specification and rationale first and reach consensus on it |
| 224 |
before writing code. |
| 225 |
|
| 226 |
The final implementation must include test code and documentation |
| 227 |
appropriate for either the PySide API reference or the respective |
| 228 |
generator tool reference. |
| 229 |
|
| 230 |
|
| 231 |
PSEP Formats and Templates |
| 232 |
========================== |
| 233 |
|
| 234 |
As opposed to PEP, there is only one PSEP format available to authors: |
| 235 |
reStructuredText_. ReStructuredText_ PSEPs allow for rich markup that |
| 236 |
is still quite easy to read, but results in much better-looking and more |
| 237 |
functional HTML. PSEP 12 contains instructions and a template [2]_ for |
| 238 |
reStructuredText PSEPs. |
| 239 |
|
| 240 |
There is a Python script that converts PSEPs to HTML for |
| 241 |
viewing on the web [3]_. reStructuredText PSEPs are parsed |
| 242 |
and converted by Docutils_ code called from the script. |
| 243 |
|
| 244 |
|
| 245 |
PSEP Header Preamble |
| 246 |
==================== |
| 247 |
|
| 248 |
Each PSEP must begin with an RFC 822 style header preamble. The headers |
| 249 |
must appear in the following order. Headers marked with "*" are |
| 250 |
optional and are described below. All other headers are required. :: |
| 251 |
|
| 252 |
PSEP: <psep number> |
| 253 |
Title: <psep title> |
| 254 |
Last-Modified: <svn date string> |
| 255 |
Author: <list of authors' real names and optionally, email addrs> |
| 256 |
* Discussions-To: <email address> |
| 257 |
Status: <Draft | Active | Accepted | Deferred | Rejected | |
| 258 |
Withdrawn | Final | Replaced> |
| 259 |
Type: <Standards Track | Informational | Process> |
| 260 |
* Content-Type: <text/plain | text/x-rst> |
| 261 |
* Requires: <psep numbers> |
| 262 |
Created: <date created on, in dd-mmm-yyyy format> |
| 263 |
* Python-Version: <version number> |
| 264 |
Post-History: <dates of postings to python-list and python-dev> |
| 265 |
* Replaces: <psep number> |
| 266 |
* Replaced-By: <psep number> |
| 267 |
|
| 268 |
The Author header lists the names, and optionally the email addresses |
| 269 |
of all the authors/owners of the PSEP. The format of the Author header |
| 270 |
value must be |
| 271 |
|
| 272 |
Random J. User <address@dom.ain> |
| 273 |
|
| 274 |
if the email address is included, and just |
| 275 |
|
| 276 |
Random J. User |
| 277 |
|
| 278 |
if the address is not given. New PSEPs must use the mandated format |
| 279 |
above. |
| 280 |
|
| 281 |
If there are multiple authors, each should be on a separate line |
| 282 |
following RFC 2822 continuation line conventions. Note that personal |
| 283 |
email addresses in PSEPs will be obscured as a defense against spam |
| 284 |
harvesters. |
| 285 |
|
| 286 |
While a PSEP is in private discussions (usually during the initial |
| 287 |
Draft phase), a Discussions-To header will indicate the mailing list |
| 288 |
or URL where the PSEP is being discussed. No Discussions-To header is |
| 289 |
necessary if the PSEP is being discussed privately with the author, or |
| 290 |
on the pyside@lists.openbossa.org mailing list. Note that email |
| 291 |
addresses in the Discussions-To header will not be obscured. |
| 292 |
|
| 293 |
The Type header specifies the type of PSEP: Standards Track, |
| 294 |
Informational, or Process. |
| 295 |
|
| 296 |
The format of a PSEP is specified with a Content-Type header. The only |
| 297 |
acceptable values is "text/x-rst" for reStructuredText PSEPs (see PSEP |
| 298 |
12 [2]_). |
| 299 |
|
| 300 |
The Created header records the date that the PSEP was assigned a |
| 301 |
number, while Post-History is used to record the dates of when new |
| 302 |
versions of the PSEP are posted to python-list and/or python-dev. Both |
| 303 |
headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. |
| 304 |
|
| 305 |
TODO: How should we deal with different Python, Qt, and PySide versions? |
| 306 |
|
| 307 |
*Standards Track PSEPs must have a Python-Version header which indicates |
| 308 |
the version of Python that the feature will be released with. |
| 309 |
Informational and Process PSEPs do not need a Python-Version header.* |
| 310 |
|
| 311 |
PSEPs may have a Requires header, indicating the PSEP numbers that this |
| 312 |
PSEP depends on. |
| 313 |
|
| 314 |
PSEPs may also have a Replaced-By header indicating that a PSEP has been |
| 315 |
rendered obsolete by a later document; the value is the number of the |
| 316 |
PSEP that replaces the current document. The newer PSEP must have a |
| 317 |
Replaces header containing the number of the PSEP that it rendered |
| 318 |
obsolete. |
| 319 |
|
| 320 |
|
| 321 |
Auxiliary Files |
| 322 |
=============== |
| 323 |
|
| 324 |
PSEPs may include auxiliary files such as diagrams. Such files must be |
| 325 |
named ``psep-XXXX-Y.ext``, where "XXXX" is the PSEP number, "Y" is a |
| 326 |
serial number (starting at 1), and "ext" is replaced by the actual |
| 327 |
file extension (e.g. "png"). |
| 328 |
|
| 329 |
|
| 330 |
Reporting PSEP Bugs, or Submitting PSEP Updates |
| 331 |
=============================================== |
| 332 |
|
| 333 |
How you report a bug, or submit a PSEP update depends on several |
| 334 |
factors, such as the maturity of the PSEP, the preferences of the PSEP |
| 335 |
author, and the nature of your comments. For the early draft stages |
| 336 |
of the PSEP, it's probably best to send your comments and changes |
| 337 |
directly to the PSEP author. For more mature, or finished PSEPs you may |
| 338 |
want to submit corrections to the PySide `issue tracker`_ so that your |
| 339 |
changes don't get lost. If the PSEP author is a PySide developer, assign the |
| 340 |
bug/patch to him, otherwise assign it to the PSEP editor. |
| 341 |
|
| 342 |
When in doubt about where to send your changes, please check first |
| 343 |
with the PSEP author and/or PSEP editor. |
| 344 |
|
| 345 |
PSEP authors who have write permissions to the Gitorious repository can |
| 346 |
push the changes to the repository themselves. |
| 347 |
|
| 348 |
Transferring PSEP Ownership |
| 349 |
=========================== |
| 350 |
|
| 351 |
It occasionally becomes necessary to transfer ownership of PSEPs to a |
| 352 |
new champion. In general, we'd like to retain the original author as |
| 353 |
a co-author of the transferred PSEP, but that's really up to the |
| 354 |
original author. A good reason to transfer ownership is because the |
| 355 |
original author no longer has the time or interest in updating it or |
| 356 |
following through with the PSEP process, or has fallen off the face of |
| 357 |
the 'net (i.e. is unreachable or not responding to email). A bad |
| 358 |
reason to transfer ownership is because you don't agree with the |
| 359 |
direction of the PSEP. We try to build consensus around a PSEP, but if |
| 360 |
that's not possible, you can always submit a competing PSEP. |
| 361 |
|
| 362 |
If you are interested in assuming ownership of a PSEP, send a message |
| 363 |
asking to take over, addressed to both the original author and the PSEP |
| 364 |
editor <pyside@lists.openbossa.org>. If the original author doesn't respond to |
| 365 |
email in a timely manner, the PSEP editor will make a unilateral |
| 366 |
decision (it's not like such decisions can't be reversed :). |
| 367 |
|
| 368 |
|
| 369 |
PSEP Editor Responsibilities & Workflow |
| 370 |
======================================= |
| 371 |
|
| 372 |
A PSEP editor must subscribe to the <pyside@lists.openbossa.org> list. All |
| 373 |
PSEP-related correspondence should be sent (or CC'd) to |
| 374 |
<pyside@lists.openbossa.org> (but please do not cross-post!). |
| 375 |
|
| 376 |
For each new PSEP that comes in an editor does the following: |
| 377 |
|
| 378 |
* Read the PSEP to check if it is ready: sound and complete. The ideas |
| 379 |
must make technical sense, even if they don't seem likely to be |
| 380 |
accepted. |
| 381 |
|
| 382 |
* The title should accurately describe the content. |
| 383 |
|
| 384 |
* Edit the PSEP for language (spelling, grammar, sentence structure, |
| 385 |
etc.), markup (for reST PSEPs), code style (examples should match PSEP |
| 386 |
8 & 7). |
| 387 |
|
| 388 |
If the PSEP isn't ready, the editor will send it back to the author for |
| 389 |
revision, with specific instructions. |
| 390 |
|
| 391 |
Once the PSEP is ready for the repository, the PSEP editor will: |
| 392 |
|
| 393 |
* Assign a PSEP number (almost always just the next available number, |
| 394 |
but sometimes it's a special/joke number, like 666 or 3141). |
| 395 |
|
| 396 |
* List the PSEP in PSEP 0 (in two places: the categorized list, and the |
| 397 |
numeric list). |
| 398 |
|
| 399 |
* Add the PSEP to the Git repository. To clone a copy of the Git |
| 400 |
repository, see `the PySide Gitorious page |
| 401 |
<http://qt.gitorious.org/pyside>`_. |
| 402 |
|
| 403 |
* Monitor python.org to make sure the PSEP gets added to the site |
| 404 |
properly. |
| 405 |
|
| 406 |
* Send email back to the PSEP author with next steps (post to |
| 407 |
pyside@lists.openbossa.org). |
| 408 |
|
| 409 |
Updates to existing PSEPs also come in to pyside@lists.openbossa.org. |
| 410 |
Alternatively, Gitorious merge requests may be made directly. |
| 411 |
|
| 412 |
Many PSEPs are written and maintained by developers with write access to |
| 413 |
the PySide repository. The PSEP editors monitor the repository PSEP |
| 414 |
changes, and correct any structure, grammar, spelling, or markup |
| 415 |
mistakes we see. |
| 416 |
|
| 417 |
The editors don't pass judgement on PSEPs. We merely do the |
| 418 |
administrative & editorial part. Except for times like this, there's |
| 419 |
relatively low volume. |
| 420 |
|
| 421 |
|
| 422 |
|
| 423 |
References and Footnotes |
| 424 |
======================== |
| 425 |
|
| 426 |
.. [1] This historical record is available by the normal Git commands |
| 427 |
for retrieving older revisions. For those without direct access to |
| 428 |
the Git tree, you can browse the current and past PSEP revisions here: |
| 429 |
http://qt.gitorious.org/pyside/pseps |
| 430 |
|
| 431 |
.. [2] PEP 12, Sample reStructuredText PSEP Template, Goodger, Warsaw |
| 432 |
(http://www.python.org/dev/peps/pep-0012) |
| 433 |
|
| 434 |
.. [3] The script referred to here is pep2pyramid.py, the successor to |
| 435 |
pep2html.py, both of which live in the same directory in the Git |
| 436 |
tree as the PEPs themselves. Try ``pep2html.py --help`` for |
| 437 |
details. The URL for viewing PEPs on the web is |
| 438 |
http://www.python.org/dev/peps/. |
| 439 |
|
| 440 |
.. _issue tracker: |
| 441 |
http://bugs.openbossa.org/ |
| 442 |
|
| 443 |
.. _Open Publication License: http://www.opencontent.org/openpub/ |
| 444 |
|
| 445 |
.. _reStructuredText: http://docutils.sourceforge.net/rst.html |
| 446 |
|
| 447 |
.. _Docutils: http://docutils.sourceforge.net/ |
| 448 |
|
| 449 |
|
| 450 |
Copyright |
| 451 |
========= |
| 452 |
|
| 453 |
This document has been placed in the public domain. |
| 454 |
|
| 455 |
|
| 456 |
.. |
| 457 |
Local Variables: |
| 458 |
mode: indented-text |
| 459 |
indent-tabs-mode: nil |
| 460 |
sentence-end-double-space: t |
| 461 |
fill-column: 70 |
| 462 |
coding: utf-8 |
| 463 |
End: |