From 2c0db47409b9dde8ac2e19da8008a16b6427c84c Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Mon, 25 Apr 2016 04:35:30 +0000 Subject: [PATCH] Proposal process document Derived from the torspec proposal process document. Currently licensed under 3-clause BSD pending relicensing: https://trac.torproject.org/projects/tor/ticket/18788 --- LICENSE.txt | 2 + i2p2www/spec/proposals/001-process.rst | 267 +++++++++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 i2p2www/spec/proposals/001-process.rst diff --git a/LICENSE.txt b/LICENSE.txt index 0c8bd368b..62a70df7f 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -43,6 +43,8 @@ Website content, text, images etc. (except as listed below): Copyright (c) 2004 - 2015 I2P See https://creativecommons.org/licenses/by-sa/4.0/ + The I2P Proposal Process (i2p2www/spec/proposals/001-process.rst): + - 3-clause BSD, courtesy nickm / Tor Flag icons (i2p2www/static/images/flags/): - Jersey and EU flag icons: public domain, courtesy Xrmap flag collection http://www.arvernes.com/wiki/index.php/Xrmap diff --git a/i2p2www/spec/proposals/001-process.rst b/i2p2www/spec/proposals/001-process.rst new file mode 100644 index 000000000..6fd6800b9 --- /dev/null +++ b/i2p2www/spec/proposals/001-process.rst @@ -0,0 +1,267 @@ +======================== +The I2P Proposal Process +======================== +.. meta:: + :author: str4d + :created: 2016-04-10 + :thread: http://zzz.i2p/topics/1980 + :lastupdated: 2016-04-10 + :status: Draft + +.. contents:: + + +Overview +======== + +This document describes how to change the I2P specifications, how I2P proposals +work, and the relationship between I2P proposals and the specifications. + +This document is adapted from the Tor proposal process [TORSPEC-PROCESS]_, and +much of the content below was originally authored by Nick Mathewson. + +This is an informational document. + + +Motivation +========== + +Previously, our process for updating the I2P specifications was relatively +informal: we'd make a proposal on the development forum and discuss the changes, +then we would reach consensus and patch the specification with draft changes +(not necessarily in that order), and finally we would implement the changes. + +This had a few problems. + +First, even at its most efficient, the old process would often have the +spec out of sync with the code. The worst cases were those where +implementation was deferred: the spec and code could stay out of sync for +versions at a time. + +Second, it was hard to participate in discussion, since it was not always clear +which portions of the discussion thread were part of the proposal, or which +changes to the spec had been implemented. The development forums are also only +accessible inside I2P, meaning that proposals could only be viewed by people who +use I2P. + +Third, it was very easy to forget about some proposals because they would get +buried several pages back in the forum thread list. + + +How to change the specs now +=========================== + +First, somebody writes a proposal document. It should describe the change that +should be made in detail, and give some idea of how to implement it. Once it's +fleshed out enough, it becomes a proposal. + +Like an RFC, every proposal gets a number. Unlike RFCs, proposals can change +over time and keep the same number, until they are finally accepted or rejected. +The history for each proposal will be stored in the I2P website repository. + +Once a proposal is in the repository, we should discuss it on the corresponding +thread and improve it until we've reached consensus that it's a good idea, and +that it's detailed enough to implement. When this happens, we implement the +proposal and incorporate it into the specifications. Thus, the specs remain the +canonical documentation for the I2P protocol: no proposal is ever the canonical +documentation for an implemented feature. + +(This process is pretty similar to the Python Enhancement Process, with the +major exception that I2P proposals get re-integrated into the specs after +implementation, whereas PEPs *become* the new spec.) + + +Small changes +------------- + +It's still okay to make small changes directly to the spec if the code can be +written more or less immediately, or cosmetic changes if no code change is +required. This document reflects the current developers' *intent*, not a +permanent promise to always use this process in the future: we reserve the right +to get really excited and run off and implement something in a +caffeine-or-M&M-fueled all-night hacking session. + + +How new proposals get added +=========================== + +To submit a proposal, post it on the development forum [DEV-FORUM-PROPOSAL]_ or +enter a ticket with the proposal attached [TRAC-PROPOSAL]_. + +Once an idea has been proposed, a properly formatted (see below) draft exists, +and rough consensus within the active development community exists that this +idea warrants consideration, the proposal editors will officially add the +proposal. + +The current proposal editors are zzz and str4d. + + +What should go in a proposal +============================ + +Every proposal should have a header containing these fields:: + + :author: + :created: + :thread: + :lastupdated: + :status: + +- The ``thread`` field should be a link to the development forum thread where + this proposal was originally posted, or to a new thread created for discussing + this proposal. +- The ``lastupdated`` field should initially be equal to the ``created`` field, + and should be updated whenever the proposal is changed. + +These fields should be set when necessary:: + + :supercedes: + :supercededby: + +- The ``supercedes`` field is a comma-separated list of all the proposals that + this proposal replaces. Those proposals should be Rejected and have their + ``supercededby`` field set to the number of this proposal. + +These fields are optional but recommended:: + + :target: + :implementedin: + +- The ``target`` field should describe which version the proposal is hoped to be + implemented in (if it's Open or Accepted). +- The ``implementedin`` field should describe which version the proposal was + implemented in (if it's Finished or Closed). + +The body of the proposal should start with an Overview section explaining what +the proposal's about, what it does, and about what state it's in. + +After the Overview, the proposal becomes more free-form. Depending on its +length and complexity, the proposal can break into sections as appropriate, or +follow a short discursive format. Every proposal should contain at least the +following information before it is Accepted, though the information does not +need to be in sections with these names. + +Motivation + What problem is the proposal trying to solve? Why does this problem matter? + If several approaches are possible, why take this one? + +Design + A high-level view of what the new or modified features are, how the new or + modified features work, how they interoperate with each other, and how they + interact with the rest of I2P. This is the main body of the proposal. Some + proposals will start out with only a Motivation and a Design, and wait for a + specification until the Design seems approximately right. + +Security implications + What effects the proposed changes might have on anonymity, how well + understood these effects are, and so on. + +Specification + A detailed description of what needs to be added to the I2P specifications + in order to implement the proposal. This should be in about as much detail + as the specifications will eventually contain: it should be possible for + independent programmers to write mutually compatible implementations of the + proposal based on its specifications. + +Compatibility + Will versions of I2P that follow the proposal be compatible with versions + that do not? If so, how will compatibility be achieved? Generally, we try + to not drop compatibility if at all possible; we haven't made a "flag day" + change since March 2008, and we don't want to do another one. + +Implementation + If the proposal will be tricky to implement in I2P's current architecture, + the document can contain some discussion of how to go about making it work. + Actual patches should go on public monotone branches, or be uploaded to + Trac. + +Performance and scalability notes + If the feature will have an effect on performance (in RAM, CPU, bandwidth) + or scalability, there should be some analysis on how significant this effect + will be, so that we can avoid really expensive performance regressions, and + so we can avoid wasting time on insignificant gains. + +References + If the proposal refers to outside documents, these should be listed. + + +Proposal status +=============== + +Open + A proposal under discussion. + +Accepted + The proposal is complete, and we intend to implement it. After this point, + substantive changes to the proposal should be avoided, and regarded as a + sign of the process having failed somewhere. + +Finished + The proposal has been accepted and implemented. After this point, the + proposal should not be changed. + +Closed + The proposal has been accepted, implemented, and merged into the main + specification documents. The proposal should not be changed after this + point. + +Rejected + We're not going to implement the feature as described here, though we might + do some other version. See comments in the document for details. The + proposal should not be changed after this point; to bring up some other + version of the idea, write a new proposal. + +Draft + This isn't a complete proposal yet; there are definite missing pieces. + Please don't add any new proposals with this status; put them in the "ideas" + sub-directory instead. + +Needs-Revision + The idea for the proposal is a good one, but the proposal as it stands has + serious problems that keep it from being accepted. See comments in the + document for details. + +Dead + The proposal hasn't been touched in a long time, and it doesn't look like + anybody is going to complete it soon. It can become "Open" again if it gets + a new proponent. + +Needs-Research + There are research problems that need to be solved before it's clear whether + the proposal is a good idea. + +Meta + This is not a proposal, but a document about proposals. + +Reserve + This proposal is not something we're currently planning to implement, but we + might want to resurrect it some day if we decide to do something like what + it proposes. + +Informational + This proposal is the last word on what it's doing. It isn't going to turn + into a spec unless somebody copy-and-pastes it into a new spec for a new + subsystem. + +The editors maintain the correct status of proposals, based on rough consensus +and their own discretion. + + +Proposal numbering +================== + +Numbers 000-099 are reserved for special and meta-proposals. 100 and up are +used for actual proposals. Numbers aren't recycled. + + +References +========== + +.. [DEV-FORUM-PROPOSAL] + http://{{ i2pconv('zzz.i2p') }}/topics/new?forum_id=7-big-topics-ideas-proposals-and-discussion + +.. [TORSPEC-PROCESS] + https://gitweb.torproject.org/torspec.git/tree/proposals/001-process.txt + +.. [TRAC-PROPOSAL] + http://{{ i2pconv('trac.i2p2.i2p') }}/newticket?summary=New%20proposal:%20&type=enhancement&milestone=n/a&component=www/i2p&keywords=review-needed -- GitLab