diff options
Diffstat (limited to 'glep-1.txt')
-rw-r--r-- | glep-1.txt | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/glep-1.txt b/glep-1.txt new file mode 100644 index 0000000..80bffd0 --- /dev/null +++ b/glep-1.txt @@ -0,0 +1,410 @@ +GLEP: 1 +Title: GLEP Purpose and Guidelines +Version: $Revision: 1.1 $ +Last-Modified: $Date: 2003/05/31 15:18:03 $ +Author: Grant Goodyear +Status: Draft +Type: Informational +Content-Type: text/x-rst +Created: 31 May 2003 +Post-History: + + +What is a GLEP? +============== + +GLEP stands for "Gentoo Linux Enhancement Proposal". A GLEP is a design +document providing information to the Gentoo Linux community, or describing +a new feature for Gentoo Linux. (The GLEP concept, and, in fact, +much of the text of this document, is liberally stolen from Python's +`PEP-0001`_.) The GLEP should provide a concise technical +specification of the feature and rationale for the feature. + +We intend GLEPs to be the primary mechanisms for proposing new +features, for collecting community input on an issue, and for +documenting the design decisions that have gone into Python. The GLEP +author is responsible for building consensus within the community and +documenting dissenting opinions. + +Because the GLEPs are maintained as text files under CVS control, their +revision history is the historical record of the feature proposal +[1]_. + + +Kinds of GLEPs +============= + +There are two kinds of GLEPs. A Standards Track GLEP describes a new +feature or implementation for Python. An Informational GLEP describes +a Python design issue, or provides general guidelines or information +to the Python community, but does not propose a new feature. +Informational GLEPs do not necessarily represent a Python community +consensus or recommendation, so users and implementors are free to +ignore Informational GLEPs or follow their advice. + + +GLEP Work Flow +============= + +The GLEP editors assign GLEP numbers and change their status. The +current GLEP editors are David Goodger and Barry Warsaw. Please send +all GLEP-related email to <peps@python.org>. + +The GLEP process begins with a new idea for Python. It is highly +recommended that a single GLEP contain a single key proposal or new +idea. The more focussed the GLEP, the more successful it tends to +be. The GLEP editor reserves the right to reject GLEP proposals if they +appear too unfocussed or too broad. If in doubt, split your GLEP into +several well-focussed ones. + +Each GLEP must have a champion -- someone who writes the GLEP using the +style and format described below, shepherds the discussions in the +appropriate forums, and attempts to build community consensus around +the idea. The GLEP champion (a.k.a. Author) should first attempt to +ascertain whether the idea is GLEP-able. Small enhancements or patches +often don't need a GLEP and can be injected into the Python development +work flow with a patch submission to the SourceForge `patch manager`_ +or `feature request tracker`_. + +The GLEP champion then emails the GLEP editor <peps@python.org> with a +proposed title and a rough, but fleshed out, draft of the GLEP. This +draft must be written in GLEP style as described below. + +If the GLEP editor approves, he will assign the GLEP a number, label it +as Standards Track or Informational, give it status "Draft", and +create and check-in the initial draft of the GLEP. The GLEP editor will +not unreasonably deny a GLEP. Reasons for denying GLEP status include +duplication of effort, being technically unsound, not providing proper +motivation or addressing backwards compatibility, or not in keeping +with the Python philosophy. The BDFL (Benevolent Dictator for Life, +Guido van Rossum) can be consulted during the approval phase, and is +the final arbitrator of the draft's GLEP-ability. + +If a pre-GLEP is rejected, the author may elect to take the pre-GLEP to +the comp.lang.python newsgroup (a.k.a. python-list@python.org mailing +list) to help flesh it out, gain feedback and consensus from the +community at large, and improve the GLEP for re-submission. + +The author of the GLEP is then responsible for posting the GLEP to the +community forums, and marshaling community support for it. As updates +are necessary, the GLEP author can check in new versions if they have +CVS commit permissions, or can email new GLEP versions to the GLEP +editor for committing. + +Standards Track GLEPs consists of two parts, a design document and a +reference implementation. The GLEP should be reviewed and accepted +before a reference implementation is begun, unless a reference +implementation will aid people in studying the GLEP. Standards Track +GLEPs must include an implementation -- in the form of code, patch, or +URL to same -- before it can be considered Final. + +GLEP authors are responsible for collecting community feedback on a GLEP +before submitting it for review. A GLEP that has not been discussed on +python-list@python.org and/or python-dev@python.org will not be +accepted. However, wherever possible, long open-ended discussions on +public mailing lists should be avoided. Strategies to keep the +discussions efficient include, setting up a separate SIG mailing list +for the topic, having the GLEP author accept private comments in the +early design phases, etc. GLEP authors should use their discretion +here. + +Once the authors have completed a GLEP, they must inform the GLEP editor +that it is ready for review. GLEPs are reviewed by the BDFL and his +chosen consultants, who may accept or reject a GLEP or send it back to +the author(s) for revision. For a GLEP that is pre-determined to be +acceptable (e.g., it is an obvious win as-is and/or its implementation +has already been checked in) the BDFL may also initiate a GLEP review, +first notifying the GLEP author(s) and giving them a chance to make +revisions. + +For a GLEP to be accepted it must meet certain minimum criteria. It +must be a clear and complete description of the proposed enhancement. +The enhancement must represent a net improvement. The proposed +implementation, if applicable, must be solid and must not complicate +the interpreter unduly. Finally, a proposed enhancement must be +"pythonic" in order to be accepted by the BDFL. (However, "pythonic" +is an imprecise term; it may be defined as whatever is acceptable to +the BDFL. This logic is intentionally circular.) See GLEP 2 [2]_ for +standard library module acceptance criteria. + +Once a GLEP has been accepted, the reference implementation must be +completed. When the reference implementation is complete and accepted +by the BDFL, the status will be changed to "Final". + +A GLEP can also be assigned status "Deferred". The GLEP author or +editor can assign the GLEP this status when no progress is being made +on the GLEP. Once a GLEP is deferred, the GLEP editor can re-assign it +to draft status. + +A GLEP can also be "Rejected". Perhaps after all is said and done it +was not a good idea. It is still important to have a record of this +fact. + +GLEPs can also be replaced by a different GLEP, rendering the original +obsolete. This is intended for Informational GLEPs, where version 2 of +an API can replace version 1. + +GLEP work flow is as follows:: + + Draft -> Accepted -> Final -> Replaced + ^ + +----> Rejected + v + Deferred + +Some Informational GLEPs may also have a status of "Active" if they are +never meant to be completed. E.g. GLEP 1 (this GLEP). + + +What belongs in a successful GLEP? +================================= + +Each GLEP should have the following parts: + +1. Preamble -- RFC 822 style headers containing meta-data about the + GLEP, including the GLEP number, a short descriptive title (limited + to a maximum of 44 characters), the names, and optionally the + contact info for each author, etc. + +2. Abstract -- a short (~200 word) description of the technical issue + being addressed. + +3. Copyright/public domain -- Each GLEP must either be explicitly + labelled as placed in the public domain (see this GLEP as an + example) or licensed under the `Open Publication License`_. + +4. Specification -- The technical specification should describe the + syntax and semantics of any new language feature. The + specification should be detailed enough to allow competing, + interoperable implementations for any of the current Python + platforms (CPython, Jython, Python .NET). + +5. Motivation -- The motivation is critical for GLEPs that want to + change the Python language. It should clearly explain why the + existing language specification is inadequate to address the + problem that the GLEP solves. GLEP submissions without sufficient + motivation may be rejected outright. + +6. Rationale -- The rationale fleshes out the specification by + describing what motivated the design and why particular design + decisions were made. It should describe alternate designs that + were considered and related work, e.g. how the feature is supported + in other languages. + + The rationale should provide evidence of consensus within the + community and discuss important objections or concerns raised + during discussion. + +7. Backwards Compatibility -- All GLEPs that introduce backwards + incompatibilities must include a section describing these + incompatibilities and their severity. The GLEP must explain how the + author proposes to deal with these incompatibilities. GLEP + submissions without a sufficient backwards compatibility treatise + may be rejected outright. + +8. Reference Implementation -- The reference implementation must be + completed before any GLEP is given status "Final", but it need not + be completed before the GLEP is accepted. It is better to finish + the specification and rationale first and reach consensus on it + before writing code. + + The final implementation must include test code and documentation + appropriate for either the Python language reference or the + standard library reference. + + +GLEP Formats and Templates +========================= + +There are two GLEP formats available to authors: plaintext and +reStructuredText_. + +Plaintext GLEPs are written in plain ASCII text, contain minimal +structural markup, and should adhere to a rigid style. GLEP 9 contains +a boilerplate template [3]_ you can use to get started writing your +plaintext GLEP. + +ReStructuredText_ GLEPs allow for rich markup that is still quite easy +to read, but results in much better-looking and more functional HTML. +GLEP 12 contains a boilerplate template [4]_ for use with +reStructuredText GLEPs. + +There is a Python script that converts both styles of GLEPs to HTML for +viewing on the web [5]_. Parsing and conversion of plaintext GLEPs is +self-contained within the script. reStructuredText GLEPs are parsed +and converted by Docutils_ code called from the script. + + +GLEP Header Preamble +=================== + +Each GLEP must begin with an RFC 822 style header preamble. The headers +must appear in the following order. Headers marked with "*" are +optional and are described below. All other headers are required. :: + + GLEP: <pep number> + Title: <pep title> + Version: <cvs version string> + Last-Modified: <cvs date string> + Author: <list of authors' real names and optionally, email addrs> + * Discussions-To: <email address> + Status: <Draft | Active | Accepted | Deferred | Rejected | + Final | Replaced> + Type: <Informational | Standards Track> + * Content-Type: <text/plain | text/x-rst> + * Requires: <pep numbers> + Created: <date created on, in dd-mmm-yyyy format> + * Python-Version: <version number> + Post-History: <dates of postings to python-list and python-dev> + * Replaces: <pep number> + * Replaced-By: <pep number> + +The Author header lists the names, and optionally the email addresses +of all the authors/owners of the GLEP. The format of the Author header +value must be + + Random J. User <address@dom.ain> + +if the email address is included, and just + + Random J. User + +if the address is not given. For historical reasons the format +"address@dom.ain (Random J. User)" may appear in a GLEP, however new +GLEPs must use the mandated format above, and it is acceptable to +change to this format when GLEPs are updated. + +If there are multiple authors, each should be on a separate line +following RFC 2822 continuation line conventions. Note that personal +email addresses in GLEPs will be obscured as a defense against spam +harvesters. + +While a GLEP is in private discussions (usually during the initial +Draft phase), a Discussions-To header will indicate the mailing list +or URL where the GLEP is being discussed. No Discussions-To header is +necessary if the GLEP is being discussed privately with the author, or +on the python-list or python-dev email mailing lists. Note that email +addresses in the Discussions-To header will not be obscured. + +The Type header specifies the type of GLEP: Informational or Standards +Track. + +The format of a GLEP is specified with a Content-Type header. The +acceptable values are "text/plain" for plaintext GLEPs (see GLEP 9 [3]_) +and "text/x-rst" for reStructuredText GLEPs (see GLEP 12 [4]_). +Plaintext ("text/plain") is the default if no Content-Type header is +present. + +The Created header records the date that the GLEP was assigned a +number, while Post-History is used to record the dates of when new +versions of the GLEP are posted to python-list and/or python-dev. Both +headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. + +Standards Track GLEPs must have a Python-Version header which indicates +the version of Python that the feature will be released with. +Informational GLEPs do not need a Python-Version header. + +GLEPs may have a Requires header, indicating the GLEP numbers that this +GLEP depends on. + +GLEPs may also have a Replaced-By header indicating that a GLEP has been +rendered obsolete by a later document; the value is the number of the +GLEP that replaces the current document. The newer GLEP must have a +Replaces header containing the number of the GLEP that it rendered +obsolete. + + +Reporting GLEP Bugs, or Submitting GLEP Updates +============================================= + +How you report a bug, or submit a GLEP update depends on several +factors, such as the maturity of the GLEP, the preferences of the GLEP +author, and the nature of your comments. For the early draft stages +of the GLEP, it's probably best to send your comments and changes +directly to the GLEP author. For more mature, or finished GLEPs you may +want to submit corrections to the SourceForge `bug manager`_ or better +yet, the SourceForge `patch manager`_ so that your changes don't get +lost. If the GLEP author is a SF developer, assign the bug/patch to +him, otherwise assign it to the GLEP editor. + +When in doubt about where to send your changes, please check first +with the GLEP author and/or GLEP editor. + +GLEP authors who are also SF committers, can update the GLEPs themselves +by using "cvs commit" to commit their changes. Remember to also push +the formatted GLEP text out to the web by doing the following:: + + % python pep2html.py -i NUM + +where NUM is the number of the GLEP you want to push out. See :: + + % python pep2html.py --help + +for details. + + +Transferring GLEP Ownership +========================== + +It occasionally becomes necessary to transfer ownership of GLEPs to a +new champion. In general, we'd like to retain the original author as +a co-author of the transferred GLEP, but that's really up to the +original author. A good reason to transfer ownership is because the +original author no longer has the time or interest in updating it or +following through with the GLEP process, or has fallen off the face of +the 'net (i.e. is unreachable or not responding to email). A bad +reason to transfer ownership is because you don't agree with the +direction of the GLEP. We try to build consensus around a GLEP, but if +that's not possible, you can always submit a competing GLEP. + +If you are interested in assuming ownership of a GLEP, send a message +asking to take over, addressed to both the original author and the GLEP +editor <peps@python.org>. If the original author doesn't respond to +email in a timely manner, the GLEP editor will make a unilateral +decision (it's not like such decisions can't be reversed :). + + +References and Footnotes +======================== + +.. _PEP-0001: http://www.python.org/peps/pep-0001.html +.. [1] This historical record is available by the normal CVS commands + for retrieving older revisions. For those without direct access to + the CVS tree, you can browse the current and past GLEP revisions via + the SourceForge web site at + http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/python/python/nondist/peps/ + +.. [2] GLEP 2, Procedure for Adding New Modules, Faassen + (http://www.python.org/peps/pep-0002.html) + +.. [3] GLEP 9, Sample Plaintext GLEP Template, Warsaw + (http://www.python.org/peps/pep-0009.html) + +.. [4] GLEP 12, Sample reStructuredText GLEP Template, Goodger, Warsaw + (http://www.python.org/peps/pep-0012.html) + +.. [5] The script referred to here is pep2html.py, which lives in the + same directory in the CVS tree as the GLEPs themselves. Try + ``pep2html.py --help`` for details. The URL for viewing GLEPs on + the web is http://www.python.org/peps/. + +.. _patch manager: + http://sourceforge.net/tracker/?group_id=5470&atid=305470 + +.. _feature request tracker: + http://sourceforge.net/tracker/?atid=355470&group_id=5470&func=browse + +.. _Open Publication License: http://www.opencontent.org/openpub/ + +.. _reStructuredText: http://docutils.sourceforge.net/rst.html + +.. _Docutils: http://docutils.sourceforge.net/ + +.. _bug manager: + http://sourceforge.net/tracker/?group_id=5470&atid=105470 + + +Copyright +========= + +This document has been placed in the public domain. |