]> projects.mako.cc - fspm_howto/blobdiff - FreeSoftwareDevelopmentHOWTO.sgml
I've removed the section on code cram because it doesn't seem
[fspm_howto] / FreeSoftwareDevelopmentHOWTO.sgml
index d41ae2b3b08491e4c4b0cc25141a13e52a4f9483..1ef34da105487a0d776c6d2e935023fe3ccd20ef 100644 (file)
@@ -1221,40 +1221,194 @@ pages for more information and options.
     <primary>fswd!developers</primary>
    </indexterm>
 
+  <para>
+   Once you have gotten the project started, you have gotten over the
+   most difficult hurdles in the development process of your
+   program. Laying a firm foundation is essential, but the development
+   process itself is equally important and provides an equal number of
+   opportunities for failure. In the next two sections, I will and
+   cover running a project by discussing how to maintain a project
+   rhough interactions with developers and with users.
+  </para>
+
+  <para>
+   The difference between free software development and propriety
+   software development is th developer base. As the leader of a free
+   software project, you need to attract and keep developers in a way
+   that leaders of proprietary software projects sipmly don't have to
+   worry about. <emphasis>As the person leading development of a free
+   software project, you must harness the work of fellow developers by
+   making responsible decisions and by and by choosing not to make
+   decisions responsibly. You have to direct developers without being
+   overbearing or bossy. You need to strive to earn respect and never
+   forget to give it.</emphasis>
+  </para>
+
 <!-- Section2: delegation  -->
 
   <sect2 id="delegation">
    <title>Delegating Work</title>
-   <para></para>
-  </sect2>
 
-<!-- Section2: branches  -->
+   <para>
+    By now, you've hypothetically followed me through the early
+    writing of a piece of software, the creation of a website and
+    system of documentation and and we've gone ahead and (as will be
+    discussed in <xref linkend="releasing">) released it to the rest
+    of the world. Times passes, and if things go well, people become
+    interested and want to help. The patches begin flowing in.
+   </para>
 
-  <sect2 id="branches">
-   <title>Stable and Development Branches</title>
-   <para></para>
+   <para>
+    <emphasis>Like the parent of any child who grows up, it's now time
+    to wince and smile and do most difficult thing in any parents
+    life: It's time to let go.</emphasis>
+   </para>
+
+   <para>
+    Delegation is the politcal way of describing this process of
+    <quote>letting go.</quote> It is the process of handing some of
+    the responsibility and power over your project to other reponsible
+    and involved developers. It is difficult for anyone who has
+    invested a large deal of time and energy into a project but it
+    essential for the growth of any free software project. One person
+    can only do so much. <emphasis>A free software project is nothing
+    without the involvement of a group of developers. A group of
+    developers can only be maintained through respectful and
+    responsible leadership and delegation.</emphasis>
+   </para>
+
+   <para>
+    As your project progresses, you will notice people who are putting
+    signfigant amounts of time and effort into your project. These
+    will be the people submitting the most patches, posting most on
+    the mailing lists, engaging in long email discussions. It is your
+    responsiblity to contact these people and to try and shift some of
+    the power and responsiblity of your position as the project's
+    maintainer onto them (if they want it). There are several easy
+    weays you can do this:
+   </para>
+
+   <sect3>
+    <title>How to delegate</title>
+    <para>
+     Like anything, its easier to see how others delegate than to do
+     it yourself. In a sentance: <emphasis>Keep an eye out for other
+     qualified developers who show an interest and sustained
+     involvement with your project and try and shift responsibility
+     towards them.</emphasis> The following ideas might be good places
+     to start or good sources of inspiriation:
+    </para>
+    <sect4>
+     <title>Allow a larger group of people write access to your CVS
+     reponsitory and make real efforts towards rule by a
+     committee</title>
+
+     <para>
+      <ulink url="http://httpd.apache.org/">Apache</ulink> is an
+      example of a project that is run by small group of developers
+      who vote on major technical issues and the admission of new
+      members and all have write access to the main source
+      repository. Their process is detailed <ulink
+      url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
+     </para>
+
+     <para>
+      The <ulink url="http://www.debian.org/"> Debian Project</ulink>
+      is an extreme example of rule by committee. At current count,
+      more than 700 developers have full responsibility for certain
+      aspects of the projects. All these developers can upload into
+      the main ftp servers, and vote on major issues. Direction for
+      the project is determined by the project <ulink
+      url="http://www.debian.org/social_contract">social
+      contract</ulink> and a <ulink
+      url="http://www.debian.org/devel/constitution">constitution</ulink>. To
+      facilitate this system, there are special teams (i.e. the
+      install team, the Japanese language team) and a technical
+      committee and a project lead. There is a project lead as well
+      but the lead's main responsiblity is to, <quote>Appoint
+      Delegates or delegate decisions to the Technical
+      Committee.</quote>
+     </para>
+
+     <para>
+      While both of these projects operate on a scale that your
+      project will not (at least initially), their example is
+      helpful. Debian's idea of a project who lead who can do
+      <emphasis>nothing</emphasis> but delegate can serve as a
+      charicature of how a project can involve and empower a huge
+      number of developers and grow to a huge size.
+     </para>
+
+    </sect4>
+
+    <sect4>
+     <title>Publicly appoint someone as the release manager for a
+       specific release.</title>
+
+     <para>
+      A relase manager is usually responsible for coordinating
+      testing, encforcing a code freeze, being responsible for
+      stability and quality control, packaging up the software, and
+      placing it in the approrpriate places to be downloaded.
+     </para>
+
+     <para>
+      This use of the release manager is a good way to give yourself a
+      break and to shift the responsibility for accepting and
+      rejecting patches to somenoe else. It is a good way of very
+      clearly defining a chunk of work on the project as belonging to
+      a certain person and its a great way of giving yourself a break.
+     </para>
+    </sect4>
+
+    <sect4>
+     <title>Delegate control of an entire branch.</title>
+     <para>
+      If your project chooses to have branches (as described in <xref
+      linkend="branches">), it might be a good idea to appoint someone
+      else to be the the head of a branch. If you like focusing your
+      energy on development releases and the implementation of new
+      features, had total control over the stable releases to a
+      well-suiteded developer.
+     </para>
+
+     <para>
+      The author of linux, Linus Torvalds, came out and crowned Alan
+      Cox as <quote>the man for stable kernels.</quote> All patches
+      for stable kernels go to Alan and, if Linus were to be taken
+      away from work on linux for any reason, Alan Cox would be more
+      than suited to fill his role as the acknowledged heir to the
+      linux maintainership.
+     </para>
+    </sect4>
+   </sect3> 
   </sect2>
 
-<!-- Section2: freezing -->
+<!-- Section2: patching -->
 
-  <sect2 id="freezing">
-   <title>Freezing</title>
+  <sect2 id="patching">
+   <title>Accepting and Rejecting Patches</title>
    <para></para>
   </sect2>
 
-<!-- Section2: codecram -->
 
-  <sect2 id="codecram">
-   <title>Avoiding the Code Cram Effect</title>
+<!-- Section2: branches  -->
+
+  <sect2 id="branches">
+   <title>Stable and Development Branches</title>
    <para></para>
   </sect2>
 
-<!-- Section2: patching -->
+<!-- Section2: otherdev -->
 
-  <sect2 id="patching">
-   <title>Accepting and Rejecting Patches</title>
+  <sect2 id="otherdev">
+   <title>Other Development issues</title>
    <para></para>
   </sect2>
+
+
  </sect1>
 
 <!-- Section1: users -->

Benjamin Mako Hill || Want to submit a patch?