001-process.txt 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. Filename: 001-process.txt
  2. Title: The Tor Proposal Process
  3. Version: $Revision: 11537 $
  4. Last-Modified: $Date: 2007-01-26T19:04:29.998860Z $
  5. Author: Nick Mathewson
  6. Created: 30-Jan-2007
  7. Status: Meta
  8. Overview:
  9. This document describes how to change the Tor specifications, how Tor
  10. proposals work, and the relationship between Tor proposals and the
  11. specifications.
  12. This is an informational document.
  13. Motivation:
  14. Previously, our process for updating the Tor specifications was maximally
  15. informal: we'd patch the specification (sometimes forking first, and
  16. sometimes not), then discuss the patches, reach consensus, and implement
  17. the changes.
  18. This had a few problems.
  19. First, even at its most efficient, the old process would often have the
  20. spec out of sync with the code. The worst cases were those where
  21. implementation was deferred: the spec and could stay out of sync for
  22. versions at a time.
  23. Second, it was hard to participate in discussion, since you had to know
  24. which portions of the spec were a proposal, and which were already
  25. implemented.
  26. Third, it littered the specifications with too many inline comments.
  27. [This was a real problem -NM]
  28. [Especially when it went to multiple levels! -NM]
  29. [XXXX especially when they weren't signed and talked about that
  30. thing that you can't remember after a year]
  31. How to change the specs now:
  32. First, somebody writes a proposal document. It should describe the change
  33. that should be made in detail, and give some idea of how to implement it.
  34. Once it's fleshed out enough, it becomes a proposal.
  35. Like an RFC, every proposal gets a number. Unlike RFCs, proposals can
  36. change over time and keep the same number. The history for each proposal
  37. will be stored in the Tor Subversion repository.
  38. Once a proposal is in the repository, we should discuss and improve it
  39. until we've reached consensus that it's a good idea, and that it's
  40. detailed enough to implement. When this happens, we implement the
  41. proposal and incorporate it into the specifications. Thus, the specs
  42. remain the canonical documentation for the Tor protocol: no proposal is
  43. ever the canonical documentation for an implemented feature.
  44. {It's still okay to make mall changes to the spec if the code can be
  45. written more or less immediately, or cosmetic changes if no code change is
  46. required. This document reflects the current developers' _intent_, not
  47. a permanent promise to always use this process in the future: we reserve
  48. the right to get really excited and run off and implement something in a
  49. caffeine-and-m&m-fueled all-night hacking session.}
  50. Proposal status:
  51. Open: A proposal under discussion.
  52. Accepted: The proposal is complete, and we intend to implement it.
  53. Finished: The proposal has been accepted and implemented.
  54. Closed: The proposal has been accepted, implemented, and merged into the
  55. main specification documents.
  56. Rejected: We're not going to implement the feature as described here,
  57. though we might do some other version. See comments in the document
  58. for details.
  59. Needs-Revision: The idea for the proposal is a good one, but the proposal
  60. as it stands has serious problems that keep it from being accepted.
  61. See comments in the document for details.
  62. Dead: The proposal hasn't been touched in a long time, and it doesn't look
  63. like anybody is going to complete it soon. It can become "Open" again
  64. if it gets a new proponent.
  65. Needs-Research: There are research problems that need to be solved before
  66. it's clear whether the proposal is a good idea.
  67. Meta: This is not a proposal, but a document about proposals.
  68. Proposal numbering:
  69. Numbers 000-099 are reserved for special and meta-proposals. 100 and up
  70. are used for actual proposals. Numbers aren't recycled.
  71. What should go in a proposal:
  72. Every proposal should have a header containing these fields:
  73. Filename, Title, Version, Last-Modified, Author, Created, Status.
  74. The Version and Last-Modified fields should use the SVN Revision and Date
  75. tags respectively.
  76. The body of the proposal should start with an Overview section explaining
  77. what the proposal's about, what it does, and about what state it's in.
  78. After the Overview, the proposal becomes more free-form. Depending its
  79. the length and complexity, the proposal can break into sections as
  80. appropriate, or follow a short discursive format. Every proposal should
  81. contain at least the following information before it can be "ACCEPTED",
  82. thought the information does not need to be in sections with these names.
  83. Motivation: What problem is the proposal trying to solve? Why does
  84. this problem matter? If several approaches are possible, why take this
  85. one?
  86. Design: A high-level view of what the new or modified features are, how
  87. the new or modified features work, how they interoperate with each
  88. other, and how they interact with the rest of Tor. This is the main
  89. body of the proposal. Some proposals will start out with only a
  90. Motivation and a Design, and wait for a specification until the
  91. Design seems approximately right.
  92. Security implications: What effects might the proposed changes have on
  93. anonymity, how well understood these effects are, and so on.
  94. Specification: A detailed description of what needs to be added to the
  95. Tor specifications in order to implement the proposal. This should
  96. be in about as much detail as the specifications will eventually
  97. contain: it should be possible for independent programmers to write
  98. mutually compatible implementations of the proposal based on its
  99. specifications.
  100. Compatibility: Will versions of Tor that follow the proposal be
  101. compatible with versions that do not? If so, how will compatibility
  102. me achieved? Generally, we try to not to drop compatibility if at
  103. all possible; we haven't made a "flag day" change since 2003 or
  104. earlier, and we don't want to do another one. [XXX is this true?]
  105. Implementation: If the proposal will be tricky to implement in Tor's
  106. current architecture, the document can contain some discussion of how
  107. to go about making it work.
  108. Performance and scalability notes: If the feature will have an effect
  109. on performance (in RAM, CPU, bandwidth) or scalability, there should
  110. be some analysis on how significant this effect will be, so that we
  111. can avoid really expensive performance regressions, and so we can
  112. avoid wasting time on insignificant gains.