blob: ea6cc79d9268a795160c94190f273139713e5a02 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
<link rel="stylesheet" href="../style/style.css" type="text/css" />
<title>Apache Archive: Rules for Revolutionaries - Apache Incubator</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="span12">
<a href="http://www.apache.org/"><img src="http://incubator.apache.org/images/asf_logo_wide_small.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" width="62%"/></a>
</div>
<div class="span4">
<a href="http://incubator.apache.org/"><img src="../images/egg-logo2.png" alt="Apache Incubator" border="0"/></a>
</div>
</div>
<div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
<div class="row">
<div class="span4">
<form action="http://www.google.com/search" method="get">
<input value="incubator.apache.org" name="sitesearch" type="hidden"/>
<input size="20" name="q" id="query" type="text" value="search..."
onclick="if(this.value == 'search...') {this.value = ''}"/>
<input name="Search" value="Go" type="submit"/>
</form>
<div class="menuheader">General</div>
<menu compact="compact">
<li><a href="../index.html">Welcome</a></li>
<li><a href="../incubation/Process_Description.html">Incubation Overview</a></li>
<li><a href="../incubation/Incubation_Policy.html">Incubation Policy</a></li>
<li><a href="../guides/index.html">Incubation Guides</a></li>
<li><a href="../incubation/Roles_and_Responsibilities.html">Roles and Responsibilities</a></li>
<li><a href="../faq.html">General FAQ</a></li>
<li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li>
<li><a href="../whoweare.html">Who We Are</a></li>
<li><a href="../sitemap.html">Site Map</a></li>
</menu>
<div class="menuheader">Status</div>
<menu compact="compact">
<li><a href="../projects/index.html">Project List</a></li>
<li><a href="../clutch.html">Clutch Report</a></li>
<li><a href="../ip-clearance/index.html">IP Clearance</a></li>
<li><a href="../history/index.html">Incubator History</a></li>
</menu>
<div class="menuheader">Entry Guides</div>
<menu compact="compact">
<li><a href="../guides/proposal.html">Proposal Guide</a></li>
</menu>
<div class="menuheader">Podling Guides</div>
<menu compact="compact">
<li><a href="../guides/committer.html">Podling Committers</a></li>
<li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li>
<li><a href="../guides/mentor.html">Podling Mentor</a></li>
<li><a href="../guides/releasemanagement.html">Podling Releases</a></li>
<li><a href="../guides/branding.html">Podling Branding/Publicity</a></li>
<li><a href="../guides/sites.html">Podling Websites</a></li>
<li><a href="../guides/graduation.html">Graduation</a></li>
<li><a href="../guides/retirement.html">Retirement</a></li>
</menu>
<div class="menuheader">Other Guides</div>
<menu compact="compact">
<li><a href="../guides/participation.html">Participation</a></li>
<li><a href="../faq.html">General FAQ</a></li>
<li><a href="../guides/pmc.html">Incubator PMC (IPMC)</a></li>
<li><a href="../guides/chair.html">IPMC Chair</a></li>
<li><a href="../guides/lists.html">Mailing Lists</a></li>
<li><a href="../guides/website.html">Incubator Website</a></li>
</menu>
<div class="menuheader">ASF</div>
<menu compact="compact">
<li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li>
<li><a href="http://www.apache.org/dev/">Developer Documentation</a></li>
<li><a href="http://www.apache.org/foundation/">Foundation</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
</menu>
<!-- start Ads Server -->
<iframe src="http://www.apache.org/ads/buttonbar.html"
style="border-width:0; float: left" frameborder="0" scrolling="no"
width="135" height="265"></iframe>
<!-- end Ads Server -->
</div>
<div class="span12">
<h2 id='rules+for+revolutionaries'><img src="../images/redarrow.gif" />rules for revolutionaries</h2>
<div class="section-content">
<div class="note">
<note>
<strong>As Sent on 13 Jan 2000.</strong>© 1995-2002, James Duncan Davidson.
<br />
<em>Note: This message was written at a specific place and time in
response to a specific situtation. It does not address several
important issues like what happens when revolutions do not totally
succeed. It also doesn't address the issues of responsiblity. The
Apache Jakarta PMC (and PMCs in general) have responsiblities that
aren't detailed here. With that said...</em>
</note>
</div>
<ul>
<li><strong>Date: </strong>Thu, 13 Jan 2000 15:46:41 -0800</li>
<li><strong>Subject: </strong>RESET: Proposal for Revolutionaries and Evolutionaries</li>
<li><strong>From: </strong>James Duncan Davidson</li>
<li><strong>To: </strong>&lt;general@jakarta.apache.org&gt;</li>
<li><strong>Cc: </strong>&lt;tomcat-dev@jakarta.apache.org&gt;</li>
<li><a href="http://mail-archives.apache.org/mod_mbox/jakarta-general/200001.mbox/%3cB4A3A3E0.C73%25james.davidson@eng.sun.com%3e">Link to this message in mod_mbox archive</a></li>
</ul>
<pre>Ok, the logical place for this is general@jakarta, but I'm including
tomcat-dev@jakarta so that the people who are there and not on general can see
it. Please do not discuss on tomcat-dev, please only discuss on general.
In a closed source project where you've got a set team, you make decisions
about where the entire team goes and somebody takes the lead of deciding what
gets done when. In the discussions about Craig's long term plan, this metric
was applied by several of us in thoughts about where to go next.
After pondering this for a while, it's (re)become obvious to me that there's no
way that anybody can expect an open source organization to work the same way
that a team in a corporate setting can. Ok, so this is pretty freaking obvious,
but I've been watching people that are not from Sun and who have been doing
open source for a while talking and proposing things that come from this line
of thought as well. Its not just people from Sun or people from any particular
entity.
So -- in any software development project there is a natural tension between
revolution and evolution. In a closed source environment, you make the call at
any particular time on whether you are in revolutionary mode or evolutionary
mode. For example, JSDK was in evolutionary mode for years. Then in Nov 98, We
made a decision to go revolutionary. Of course, at the time the project team
was composed of 1 person -- me, so it was an easy decision. After that
revolution was over in Jan 99, Tomcat was in evolutionary mode getting JSP
bolted in and working with J2EE. We (Sun folks) could do that because that was
what suited the goals best at the time.
However, Open source is chaotic. With its special magic comes a different
reality. This is:
1) People work on their own time (even people paid by a company
can be considered to be working on their own time in this
situtation as each company is going to have different cycles
and things they want)
2) People work on what they want to. If you are working on your
own time, you are going to do what you want or you do something
else.
3) Some people are evolutionaries, other are revolutionaries, and
some are both at different times.
4) Both approaches are important and need to be cultured.
5) You really can't afford to alienate any part of your developer
community. Innovation can come from anywhere.
To allow this to happen, to allow revolutionaries to co-exist with
evolutionaries, I'm proposing the following as official Jakarta policy:
1) Any committer has the right to go start a revolution. They can establish a
branch or seperate whiteboard directory in which to go experiment with new code
seperate from the main trunk. The only responsibility a committer has when they
do this is to inform the developer group what their intent is, to keep the
group updated on their progress, and allowing others who want to help out to do
so. The committer, and the group of people who he/she has a attracted are free
to take any approaches they want to free of interference.
2) When a revolution is ready for prime time, the committer proposes a merge to
the -dev list. At that time, the overall community evaluates whether or not the
code is ready to become part of, or to potentially replace the, trunk.
Suggestions may be made, changes may be required. Once all issues have been
taken care of and the merge is approved, the new code becomes the trunk.
3) A revolution branch is unversioned. It doesn't have any official version
standing. This allows several parallel tracks of development to occur with the
final authority of what eventually ends up on the trunk laying with the entire
community of committers.
4) The trunk is the official versioned line of the project. All evolutionary
minded people are welcome to work on it to improve it. Evolutionary work is
important and should not stop as it is always unclear when any particular
revolution will be ready for prime time or whether it will be officially
accepted.
What does this mean?
In practice, this means that Craig and Hans and anybody else that wants to run
with that revolution is welcome to do so. The only change is that it's not
called Tomcat.next -- it's the RED branch or GOOGLE branch or whatever they
want to call it.
Whenever Craig (or anybody else working on that codebase) wants to bring stuff
into the trunk, they propose it here and we evaluate it on it's merits.
If somebody disagrees with Craig's approach (for the sake of argument here),
they are free to create a BLUE whiteboard and work out what they think is a
good solution. At that point, the community will have to evaluate both
approaches. But since this is a populist society, with such a structure it is
hoped that it becomes clear which is the preferred approach by the community by
their participation and voting. Or maybe the best solution is something in the
middle and the two parties work together to merge. Irregardless, the point is
to allow solutions to happen without being stalled out in the formative stages.
An important point is that no one revolution is declared to be the official
.next until it's ready to be accepted for that.
There is the side effect that we could potentially end up with too many
revolutions happening, but I'd rather rely upon the natural inclination of
developers to gravitate towards one solution to control this than to try to
control it through any policy statement.
When would this be official?
Well, if this is well recieved, we'd want to word it up and make it a bylaw
(with approval by the PMC -- this is one of the areas in which the PMC has
authority). Hopefully soon.
Comments? Suggestions?
James Davidson ...
Java + XML / Portable Code + Portable Data !try; do()
</pre>
</div>
</div>
</div>
<div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
<div class="row">
<div class="span16 footer">
Copyright &#169; 2009-2016 The Apache Software Foundation<br />
Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
</div>
</div>
</div>
</body>
</html>