| <?xml version="1.0" encoding="ISO-8859-1" ?> | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
| <html xmlns="http://www.w3.org/1999/xhtml"> | |
| <head> | |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> | |
| <title>WTP code change process</title> | |
| </head> | |
| <body> | |
| <p></p> | |
| <h1>WTP code change process</h1> | |
| <h2>Background and motivation for this document.</h2> | |
| <p>This process was written and approved by the WTP in October of 2006. It is meant as simply as a small evolution and improvement of our existing processes and primarily as providing documentation for those processes.</p> | |
| <p>WTP is mature enough now, and is being used by enough companies | |
| for business critical applications, that the WTP PMC thought it best to | |
| write down our agreed to procedures and decision process.</p> | |
| <p>Our WTP Charter, and the The Eclipse general charter it refers | |
| to, specifies the general procedure and decision process used for | |
| changing code, and it specifies the PMC should establish the details | |
| appropriate to the project. (See <a href="background.html">background</a> | |
| and <a href="projectMakeup.html">project makeup</a> for some details).</p> | |
| <p>This process is pretty much how we have already been operating, | |
| except that moving forward we need to do more "prep work" in | |
| side branches, before committing to a release or a milestone. This | |
| allows better review, before being committed, and allows for details to | |
| be worked out and iterated in the side branch, so that once an adopter | |
| sees it in a build (and may have to react to it) it is pretty much a | |
| finished work, not something that would change a lot from week to week or | |
| milestone to milestone.</p> | |
| <h2>Changes that are approved in advance</h2> | |
| <p>The following types of changes do not require development in a | |
| side branch, and no particular review or voting, etc. But, any changes | |
| should be associated with some bugzilla entry to allow better historical | |
| tracking. In general, internal changes for the sake of better, faster, | |
| simpler and cleaner components are not only "ok" but are | |
| greatly encouraged!</p> | |
| <p><b> Bug fixes, java doc and JUnit tests</b> can always be committed | |
| to the forward (head) stream.</p> | |
| <p><b>Simple feature requests</b>, if simple additions, that do not increase | |
| plugin dependancies, or require changes in APIs, and have no effect on | |
| known usage by adopters (from usage reports). Any new features that | |
| involve API or SPI would fall in the "new API" category below. | |
| </p> | |
| <p><b>Any evolution of an existing API</b> , as long as the API is evolved in | |
| a source and binary compatible way.</p> | |
| <h2>Changes that require component team review and agreement</h2> | |
| <p>Changes in this section typically require a <a | |
| href="defProposal.html">concrete proposal</a>, review, and<a | |
| href="defAgreement.html"> prior agreement</a> of <a | |
| href="devTeams.html">component team</a> members.</p> | |
| <p> | |
| All these control processes are simply to protect the stability of our code base | |
| and the investment made by clients which adopt our code. It is not | |
| intended to ever be an "excuse" for leaving bugs unfixed or "not | |
| being able to change" code. It is always only a question of <b>how</b> to change or fix something, not whether or not | |
| to fix something, or provide some new function. | |
| </p> | |
| <p><b>New <a href="defAPI.html">API</a></b>. The main criteria here is if it meets "API Quality | |
| guidelines" as described in the Eclipse Development Process and | |
| allows for later API evolution. The committers for a component (and | |
| their clients) are the primary stake holders, and thus is their | |
| responsibility to propose and decide API and ensure its quality. But, it | |
| should be developed in a side branch where it can be better reviewed and | |
| assessed before being committed to a build.</p> | |
| <p><b>Promotion of <a href="defAPI.html">provisional API</a></b>. While the main decision is up to | |
| committers of a component (and follows normal, "new API" | |
| guidelines above) the additional type of criteria the PMC requires | |
| for provisional API is that</p> | |
| <ul> | |
| <li>adopters can move from the provisional API with no churn (or | |
| minimal churn, with well documented migration steps)</li> | |
| <li>that by moving to the new official API, then "that is | |
| it" .... it meets the clients and adopters needs and there would not be | |
| additional migration required later on.</li> | |
| </ul> | |
| <p><b>A change in <a href="defAPI.html">internal non-API</a></b> that is clearly identified in "usage | |
| reports" as being used by adopters. Any such proposed changes needs | |
| approval of the component team and be open to public review so | |
| that adopters can comment, and anticipate and minimize disruption. The | |
| best option, is to "evolve" the non-API so it does not impact | |
| adopters. But, if that's not possible or feasible, a typical part of | |
| such a proposal would include what migration would involve .... such as | |
| a package rename only, argument changes, or a rework of fundamental | |
| logic. Note: a "change in non-API" in this sense includes | |
| changes in behavior such as threading behavior, order of execution, | |
| etc., not just changes in signatures. | |
| </p> | |
| <h2>Changes that require PMC review and approval</h2> | |
| <p><b>Changes to declared API</b>. This is nearly never allowed. But, there | |
| is, judging from history, times when it should be considered as an | |
| option, either to acknowledge some previous fundamental mistake for | |
| which no other reasonable solution can be found. Or, more likely, sometimes an API | |
| is specified in a mistaken or ambiguous way, so some change might be | |
| interpreted by some as a change in behavior, but some might be argued | |
| that it is not, based on the original intent. These sorts of cases, once | |
| there is agreement among the component team, must be brought forward to | |
| the PMC for approval so the cost-benefit balance can be properly weighed. </p></body> | |
| </html> |