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: