e81b8337c97debe808b16ae8581484c694941f36
[fspm_howto] / FreeSoftwareProjectManagementHOWTO.sgml
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
2
3 <article>
4
5 <!-- Header -->
6
7  <artheader>
8   <title>Free Software Development HOWTO</title>
9
10   <author>
11      <firstname>Benjamin</firstname>
12      <othername>Mako</othername>
13      <surname>Hill</surname>
14      <affiliation>
15         <address>
16            <email>mako@debian.org</email>
17
18         </address>
19      </affiliation>
20   </author>
21
22    <revhistory>
23       <revision>
24          <revnumber>v0.01</revnumber>
25          <date>25 March 2001</date>
26          <authorinitials>bch</authorinitials>
27           <revremark>
28           Initial Release
29          </revremark>
30       </revision>
31    </revhistory>
32
33   <abstract>
34     <indexterm>
35       <primary>fswd</primary>
36     </indexterm>
37
38     <para>
39      This HOWTO is designed for people with experience in programming
40      and some skills in managing a software project but who are new to
41      the world of Free Software. This document is meant to act as a
42      guide to the non-technical aspects of programming and was written
43      to act as a crash course in the people skills that aren't taught
44      to commercial coders but that can make or break a free software
45      project.
46     </para>
47   </abstract>
48
49  </artheader>
50
51 <!-- Section1: intro -->
52
53  <sect1 id="intro">
54    <title>Introduction</title>
55
56    <indexterm>
57     <primary>fswd!introduction</primary>
58    </indexterm>
59
60   <para>
61    For various reasons, this release has been code-named the
62    <emphasis>homemade yogurt</emphasis> release.
63   </para>
64
65   <para>
66    New code names will appear as per industry standard
67    guidelines to emphasize the state-of-the-art-ness of this
68    document.
69   </para>
70
71   <para>
72    Skimming through freshmeat.net provides mountains of reasons for this
73    HOWTO's existence--the Internet is littered with excellently
74    written and useful programs that have faded away into the Universe
75    of Free Software Forgottenness. This dismal scene made me ask
76    myself, "Why?"
77   </para>
78
79   <para>
80    This HOWTO tries to do a lot of thing (probably too many), but it
81    can't answer that question and won't attempt it. What this HOWTO
82    will attempt to do is give your Free Software project a fighting
83    chance-an edge. If you write a piece of crap that no one is
84    interested in, you can read this HOWTO until you recite it in your
85    sleep and your project will probably fail. Then again, you can
86    write a beautiful, relevant piece of software and follow every
87    instruction in this HOWTO and your software may still not make
88    it. Sometimes life is like that. However, I'll go out a limb and
89    say that if you write a great, relevant pieces of software and
90    ignore the advise in this HOWTO, you'll probably fail <emphasis>
91    more often</emphasis>.
92   </para>
93
94   <para>
95    A lot of the information in this HOWTO is best called common
96    sense. Of course, as any debate on interfaces will prove, what is
97    common sense to some programmers proves totally unintuitive to
98    others. After explaining bites and pieces of this HOWTO to Free
99    Software developers on several occasions, I realized that that
100    writing this HOWTO might provide a useful resource and a forum for
101    programmers to share ideas about what has and has not worked for
102    them. 
103   </para>
104
105   <para>
106
107   </para>
108
109   <para>
110    As anyone involved in any of what seems like an unending parade of
111    ridiculous intellectual property clashes will attest to, a little
112    bit of legalese proves important.
113   </para>
114
115 <!-- Section2: copyright -->
116
117   <sect2 id="copyright">
118    <title>Copyright Information</title>
119
120    <para>
121     This document is copyrighted (c) 2000 Benjamin (Mako) Hill and is
122     distributed under the terms of the Linux Documentation Project
123     (LDP) license, stated below.
124    </para>
125
126    <para>
127     Unless otherwise stated, Linux HOWTO documents are
128     copyrighted by their respective authors. Linux HOWTO documents may
129     be reproduced and distributed in whole or in part, in any medium
130     physical or electronic, as long as this copyright notice is
131     retained on all copies. Commercial redistribution is allowed and
132     encouraged; however, the author would like to be notified of any
133     such distributions.
134    </para>
135
136    <para>
137     All translations, derivative works, or aggregate works
138     incorporating any Linux HOWTO documents must be covered under this
139     copyright notice. That is, you may not produce a derivative work
140     from a HOWTO and impose additional restrictions on its
141     distribution. Exceptions to these rules may be granted under
142     certain conditions; please contact the Linux HOWTO coordinator at
143     the address given below.
144    </para>
145
146    <para>
147     In short, we wish to promote dissemination of this
148     information through as many channels as possible. However, we do
149     wish to retain copyright on the HOWTO documents, and would like to
150     be notified of any plans to redistribute the HOWTOs.
151    </para>
152
153    <para>
154     If you have any questions, please contact 
155     <email>linux-howto@metalab.unc.edu</email>
156    </para>
157   </sect2>
158
159 <!-- Section2: disclaimer -->
160
161   <sect2 id="disclaimer">
162    <title>Disclaimer</title>
163
164    <para>
165     No liability for the contents of this documents can be accepted.
166     Use the concepts, examples and other content at your own risk.
167     As this is a new edition of this document, there may be errors
168     and inaccuracies, that may of course be damaging to your system.
169     Proceed with caution, and although this is highly unlikely,
170     the author(s) do not take any responsibility for that.
171    </para>
172
173    <para>
174     All copyrights are held by their by their respective owners, unless
175     specifically noted otherwise.  Use of a term in this document
176     should not be regarded as affecting the validity of any trademark
177     or service mark.
178    </para>
179
180    <para>
181     Naming of particular products or brands should not be seen 
182     as endorsements.
183    </para>
184
185    <para>
186     You are strongly recommended to take a backup of your system 
187     before major installation and backups at regular intervals.
188    </para>
189   </sect2>
190
191 <!-- Section2: newversions-->
192
193   <sect2 id="newversions">
194    <title>New Versions</title>
195
196     <indexterm>
197      <primary>(your index root)!news on</primary>
198     </indexterm>
199
200    <para>
201     This is the initial release. It is written to be released to
202     developers for critique and brainstorming and submitted to
203     Hampshire College for academic credit. Please keep in mind that
204     this version of the HOWTO is still in an infant stage and will be
205     revised extensively before it hits the LDP.
206    </para>
207
208    <para>
209     The latest version number of this document should always be listed
210     on <ulink url="http://people.debian.org/~mako/">my webpage at
211     Debian</ulink>.
212    </para>
213
214    <para>
215     The newest version of this HOWTO will always be made available at
216     the same website, in a variety of formats:
217    </para>
218
219    <para>
220    <itemizedlist>
221     <listitem>
222      <para>
223       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.html">HTML</ulink>.
224      </para>
225     </listitem>
226
227     <listitem>
228      <para>
229        <ulink URL="http://people.debian.org/~mako/howto/fswd-howto.txt">plain text</ulink>.
230      </para>
231     </listitem>
232
233     <listitem>
234      <para>
235       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.US.ps.gz">compressed 
236        postscript (US letter format)</ulink>.
237      </para>
238     </listitem>
239
240     <listitem>
241      <para>
242       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.UF.ps.gz">compressed 
243        postscript (Universal format / 8.27x11in; 210x279mm)</ulink>.
244      </para>
245     </listitem>
246
247     <listitem>
248      <para>
249       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.sgml">SGML source</ulink>.
250      </para>
251     </listitem>
252    </itemizedlist>
253    </para>
254   </sect2>
255
256 <!-- Section2: credits -->
257
258   <sect2 id="credits">
259    <title>Credits</title>
260
261    <para>
262     In this version I have the pleasure of acknowledging:
263    </para>
264
265    <para>
266     <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
267     Source Development with CVS</emphasis> published by the Coriolis
268     Open Press. Large parts of the book are available <ulink
269     url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
270     the book are available under the GPL and constitute the best
271     tutorial on CVS I have ever seen. The rest of the book covers,
272     "the challenges and philosophical issues inherent in running an
273     Open Source project using CVS." The book does a good job of
274     covering some of the subjects brought up in this HOWTO and much
275     more. <ulink url="http://cvsbook.red-bean.com">The book's
276     website</ulink> has information on ordering the book and provides
277     several translations of the chapters on CVS. I you are seriously
278     interested in running a Free Software project, you want this book.
279    </para>
280    
281    <para>
282     Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
283     com</email>
284    </para>
285    <para>
286     Also providing support and material, and inspiration for this
287     HOWTO is Eric S. Raymond for his prolific, consistent, and
288     carefully crafted arguments, to Lawrence Lessig for reminding me
289     of the importance of Free Software and to every user and developer
290     involved with the <ulink url="http://www.debian.org">Debian
291     Project</ulink>. The project has provided me with a home, a place
292     to practice Free Software advocacy and to make a difference, a
293     place to learn from those how have been involved with the movement
294     much longer than I, and an proof of a Free Software project that
295     <emphasis>definitely, definitely works</emphasis>.
296    </para>
297
298    <para>
299     Above all, I want to thank <emphasis>Richard Stallman</emphasis>
300     for his work at the Free Software Foundation and for never giving
301     up. Stallman provided the philosophical basis that attracts me to
302     Free Software and that drives me towards writing a document to
303     make sure it succeeds. RMS can always be emailed at <email>rms
304     (at) gnu (dot) org</email>.
305    </para>
306
307   </sect2>
308
309 <!-- Section2: feedback -->
310
311   <sect2 id="feedback">
312    <title>Feedback</title>
313
314    <para>
315     Feedback is most certainly welcome for this document. Without your
316     submissions and input, this document wouldn't exist. Something
317     missing? Don't hesitate to contact me and to write a chapter. I
318     want this document to be as much a product of the Free Software
319     development process that it heralds and I think its ultimate
320     success will be rooted in this fact. Please send your additions,
321     comments and criticisms to the following email address :
322     <email>mako@debian. org</email>.
323    </para>
324    </sect2>
325
326 <!-- Section2: translations -->
327
328   <sect2 id="translations">
329    <title>Translations</title>
330
331    <para>
332     I know that not everyone speaks English. Translations are nice and
333     I'd love for this HOWTO to gain the kind of international reach
334     afforded by a translated version.
335    </para>
336    <para>
337     However, this HOWTO is still young and I have to yet to be
338     contacted about a translation so English is all that is
339     available. If you would like to help with or do a translation, you
340     will gain my utmost respect and admiration and you'll get to be
341     part of a cool process. If you are at all interested, please don't
342     hesitate to contact me at: <email>mako@debian.org</email>.
343    </para>
344    </sect2>
345  </sect1>
346
347 <!-- Section1: intro: END -->
348
349 <!-- Section1: starting -->
350
351  <sect1 id="starting">
352   <title>Starting a Project</title>
353
354    <indexterm>
355     <primary>fswd!starting</primary>
356    </indexterm>
357   <para>
358    With very little argument, starting a project is most difficult
359    part of successful free software development. Laying a firm
360    foundation for your project will determine whether your project
361    flourishes or withers away and dies. It is also the subject that is
362    of most immediate interest to anyone reading this document as a
363    tutorial.
364   </para>
365
366   <para>
367    Starting a project also involves a dilemma that you as a developer
368    must try and deal with. No potential user for your program will be
369    interested by a program that doesn't work. Simultaneously, the
370    development process that you want to employ holds involvement of
371    users as essential to the process of the development that will
372    realize this working software.
373   </para>
374
375   <para>
376    It is in these dangerous initial moments that anyone working to
377    start a free software project must strike a balance. One of the
378    most important ways that someone trying to start a project can work
379    towards this balance is by establishing a framework for the
380    development process through some of the ways mentioned in this
381    section.
382   </para>
383
384
385 <!-- Section2: chooseproject-->
386
387   <sect2 id="chooseproject">
388    <title>Choosing a Project</title>
389
390    <para>
391     If you are reading this document, there's a good chance you
392     already have an idea for a project in mind. Chances are pretty
393     good, it fills a gap by doing something that no other free
394     software process does or or does it in a way that is unique
395     enough to necessitate a separate project.
396    </para>
397
398    <sect3 id=identifyidea>
399     <title>Identify and articulate your idea</title>
400     <para>
401      Eric S. Raymond writes about how free software projects start in
402      his paper, "The Cathedral and the Bazaar" which comes as required
403      reading for any free software development. You can find it <ulink
404      url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/">online
405      </ulink>.
406     </para>
407
408     <para>
409      In "The Cathedral and Bazaar," Raymond tells us that:
410      <emphasis>Every good work of software starts by scratching a
411      developers itch.</emphasis> Raymond now widely accepted
412      hypothesis is that new free software programs are written, first
413      and foremost, to solve a specific problem facing the developer.
414     </para>
415
416     <para>
417      If you have an idea for a program in mind, chances are good that
418      it it is targeting a specific problem or itch you want to see
419      scratched. <emphasis>This idea is the project. Articulate it
420      clearly. Write it out. Describe the problem you will attack in
421      detail. The success of your project in tackling a particular
422      problem will be tied to your ability to identify that problem
423      early on. Find out exactly what it is that you want your project
424      to do.</emphasis>
425     </para>
426    </sect3>
427
428    <sect3 id=evalulateidea>
429     <title>Evaluate your idea</title>
430
431     <para>
432      In evaluating your idea, you need to ask yourself questions.
433      Before you move any further into this HOWTO, you need to
434      determine if the free software development model really is the
435      right one for your project. Obviously, since the program
436      scratches your itch, you are definitely interested in seeing it
437      implemented in code. But, because one hacker coding alone fails
438      to qualify as a free software development effort, you need to ask
439      yourself the question: <emphasis>Is anybody else
440      interested?</emphasis>
441     </para>
442
443     <para>
444      Sometimes the answer is <emphasis>no</emphasis>. If you want to
445      write a set of scripts to sort <emphasis>your</emphasis>
446      <acronym>MP3</acronym> collection on your machine, maybe the free
447      software development model is not the best one to
448      choose. However, if you want to write a set of scripts to sort
449      <emphasis>anyone's</emphasis> <acronym>MP3</acronym>s, a free
450      software project might fill a useful gap.
451     </para>
452
453     <para>
454      Luckily, The Internet is a place so big and diverse that, chances
455      are, there is someone, somewhere, who shares your interests and
456      how feels the same itch. It is the fact that there are so many
457      people with so many similar needs and desires that introduces the
458      second major question: <emphasis>Has somebody already had your
459      idea or a reasonably similar one?</emphasis>
460     </para>
461
462      <sect4 id=evalwhere>
463       <title>Finding Similar Projects</title>
464
465      <para>
466       There are places you can go on the web to try and answer this
467       question. If you have experience with the free software
468       community, you are probably already familiar with all of these
469       sites. All of the resources listed bellow offer searching of
470       their databases:
471      </para>
472
473      <para>
474      <variablelist>
475        <varlistentry>
476         <term>freshmeat.net:</term>
477         <listitem>
478          <para><ulink url="http://freshmeat.net">freshmeat</ulink>
479          describes itself as, <quote>the Web's largest index of Linux
480          and Open Source software</quote> and its reputation along
481          these lines remains unquestioned. If you can't find it on
482          freshmeat, its doubtful that you'll find it indexed anywhere
483          else.</para>
484         </listitem>
485        </varlistentry>
486
487        <varlistentry>
488         <term>Slashdot:</term>
489         <listitem>
490          <para><ulink url="http://slashdot.org">Slashdot</ulink>
491          provides <quote>News for Nerds: Stuff that Matters,</quote>
492          which usually includes discussion of free software, open
493          source, technology, and geek culture new and events. It is
494          not unusual for an particularly sexy development effort to be
495          announced here so it definitely worth checking.</para>
496         </listitem>
497        </varlistentry>
498
499        <varlistentry>
500         <term>SourceForge:</term>
501         <listitem>
502          <para><ulink url="http://sourceforge.net">SourceForge</ulink>
503          houses and facilitates a growing number of open source and
504          free software projects, SourceForge is quickly becoming a
505          nexus and an necessary stop for free software
506          developers. SourceForge's <ulink
507          url="http://sourceforge.net/softwaremap/trove_list.php">software
508          map</ulink> and <ulink url="http://sourceforge.net/new/"> new
509          releases</ulink> pages. should be necessary stops before
510          embarking on a new free software project. SourceForge also
511          provides a at <ulink
512          url="http://sourceforge.net/snippet/">Code Snippet
513          Library</ulink> which contains useful reusable chunks of
514          code in an array of languages which can come in useful in any
515          project.</para>
516         </listitem>
517        </varlistentry>
518
519        <varlistentry>
520         <term>Google and Google's Linux Search:</term>
521         <listitem>
522          <para><ulink url="http://www.google.com">Google</ulink> and
523          <ulink url="http://www.google.com/linux"> Google's Linux
524          Search</ulink>, provide powerful web searches that may
525          reveal people working on similar projects. It is not a
526          catalog of software or news like freshmeat or Slashdot, but
527          it is worth checking before you begin pouring your effort
528          into a redundant project.</para>
529         </listitem>
530        </varlistentry>
531
532       </variablelist>
533      </para>
534     </sect4>
535
536     <sect4 id=evalhow>
537      <title>Deciding to Proceed</title>
538      <para>
539       Once you have successful charted the terrain and have an idea
540       bout what kinds of similar free software projects exist, every
541       developer needs to decide whether to proceed with their own
542       project. It is rare that a new project seeks to accomplish a
543       goal that is not similar to related to the goal of another
544       project. Anyone starting a new project needs to ask themselves:
545       <emphasis>Will the new project be duplicating work done by
546       another project? Will the new project be competing for
547       developers with an existing project? Can the goals of the new
548       project be accomplished by adding functionality to an existing
549       project?</emphasis>
550      </para>
551
552      <para>
553       If the answer to any of these questions is yes, try to contact
554       the developer of the existing project in question and see if he
555       or she might be willing to collaborate with you.
556      </para>
557
558      <para>
559       This may be the single most difficult aspect of free software
560       development for many developers but it is essential. It is easy
561       to become fired up by and idea and be caught up in the momentum
562       and excitement of a new project. It is often extremely difficult
563       but it is important that any free software developer remember
564       that the best interests of the of the free software community
565       and the quickest way to accomplish ones own project's goals and
566       the goals of similar project can often be accomplished by
567       <emphasis>not</emphasis> starting a new project.
568      </para>
569
570     </sect4>
571    </sect3>
572   </sect2>
573
574 <!-- Section2: licensing-->
575
576   <sect2 id="licensing">
577    <title>Licensing your Software</title>
578    
579    <para>
580     On one level, the difference between a piece of free software and
581     a piece of propriety software is the license. A license helps both
582     you as the developer by protecting your legal rights to your
583     software and helps demonstrate to those who wish to help you or
584     your project that they are encouraged to join.
585    </para>
586    
587    <sect3 id="chooselicense">
588     <title>Choosing a license</title>
589
590     <para>
591      Any discussion of licenses is also sure to generate at least a
592      small flame war as there are strong feelings that some free
593      software licenses are better than other free software
594      licenses. This discussion also brings up the question of
595      <quote>Open Source Software</quote> and the debate around
596      <quote>Open Source Software</quote> and <quote>Free
597      Software</quote>. However, because I've written the Free Software
598      Development HOWTO and not the Open Source Development HOWTO, my
599      own allegiances in this argument are out in the open.
600     </para>
601
602     <para>
603      In attempting to reach a middle ground, I recommend picking any
604      license that conforms to the <ulink
605      url="http://www.debian.org/social_contract">Debian Free Software
606      Guidelines</ulink>. Examples of these licenses are the
607      <acronym>GPL</acronym>, the <acronym>BSD</acronym>, and the
608      Artistic License. Conforming to the definition of Free Software
609      offered by Richard Stallman in <ulink
610      url="http://www.gnu.org/philosophy/free-sw.html">The Free
611      Software Definition</ulink>, any of these licenses will
612      uphold,<quote> users' freedom to run, copy, distribute, study,
613      change and improve the software.</quote> There are other licenses
614      as well but sticking with a more common license will offer the
615      advantage of immediate recognition and understanding.
616     </para>
617
618     <para>
619      In attempting a more in-depth analysis, I agree with Karl Fogel's
620      description of licenses as falling into two groups: those that
621      are the <acronym>GPL</acronym> and those that are not the
622      <acronym>GPL</acronym>.
623     </para>
624
625     <para>
626      Personally, I license all my software under the
627      <acronym>GPL</acronym>. Created and protected by the Free
628      Software Foundation and the GNU Project, the
629      <acronym>GPL</acronym> is the license for the Linux kernel,
630      GNOME, Emacs, and the majority of Linux software. Its an easy
631      choice but I believe it is a good one. <emphasis>However, there
632      is a viral aspect to the <acronym>GPL</acronym>that prevents the
633      mixture of <acronym>GPL</acronym>'ed code with
634      non-<acronym>GPL</acronym>'ed code. To many people (myself
635      included), this is a benefit, but to some, it is a major
636      drawback.</emphasis>
637     </para>
638
639     <para>
640      The three major license can be found at the following locations:
641     </para>
642
643     <para>
644      <itemizedlist>
645       <listitem>
646        <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
647        General Public License</ulink></para>
648       </listitem>
649       <listitem>
650        <para><ulink url="http://www.debian.org/misc/bsd.license">The
651        BSD License</ulink></para>
652       </listitem>
653       <listitem>
654        <para><ulink
655        url="http://language.perl.com/misc/Artistic.html">The Artistic
656        License</ulink></para>
657       </listitem>
658      </itemizedlist>
659     </para>
660
661     <para>
662      <emphasis>In all cases, please read through any license before
663      your release your software. As the developer, you can't afford
664      any license surprises.</emphasis>
665     </para>
666    </sect3>
667
668    <sect3 id="licensechoose">
669     <title>The mechanics of licensing</title>
670
671     <para>
672      The text of the <acronym>GPL</acronym> offers <ulink
673      url="http://www.gnu.org/copyleft/gpl.html#SEC4">a good
674      description</ulink> of mechanics of applying a license to a piece
675      of software. A checklist for applying a license would include:
676     </para>
677
678     <para>
679     <orderedlist>
680       <listitem>
681
682        <para>If at all possible, attach and distribute a full copy of
683        the license with the source and binary in a separate
684        file.</para>
685
686       </listitem>
687       <listitem>
688
689        <para>At the top of each source file in your program, attach a
690        notice of copyright and information on where the full license
691        can be found. The <acronym>GPL</acronym> recommends that each
692        file begin with:</para>
693
694        <screen>
695 <emphasis>one line to give the program's name and an idea of what it does.</emphasis>
696 Copyright (C) yyyy  name of author
697
698 This program is free software; you can redistribute it and/or
699 modify it under the terms of the GNU General Public License
700 as published by the Free Software Foundation; either version 2
701 of the License, or (at your option) any later version.
702
703 This program is distributed in the hope that it will be useful,
704 but WITHOUT ANY WARRANTY; without even the implied warranty of
705 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
706 GNU General Public License for more details.
707
708 You should have received a copy of the GNU General Public License
709 along with this program; if not, write to the Free Software
710 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
711        </screen>
712
713        <para>
714         The <acronym>GPL</acronym> goes on to recommend attaching
715         information on contacting you (the author) via email or
716         physical mail.
717       </para>
718
719       </listitem>
720       <listitem>
721
722        <para>
723         The <acronym>GPL</acronym> continues and suggests that if your
724         program runs in an interactive mode, you should have the
725         program output a notice each time it enters interactive mode
726         that includes a message like this one that points to more
727         information about the programs licensing:
728        </para>
729
730        <screen>
731 Gnomovision version 69, Copyright (C) year name of author
732 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
733 type `show w'.  This is free software, and you are welcome
734 to redistribute it under certain conditions; type `show c' 
735 for details.
736        </screen>
737
738       </listitem>
739       <listitem>
740        <para>Finally, it might be helpful to include a
741        <quote>copyright disclaimer</quote> with the program from an
742        employer or a school if you work as a programmer or if it seems
743        like your employer or school might be able to make an argument
744        for ownership of your code.</para>
745       </listitem>
746
747      </orderedlist>
748      </para>    
749    </sect3>
750
751    <sect3 id="licensewarning">
752     <title>Final license warning</title>
753
754     <para>
755      Please, please, please, place your software under some
756      license. It may not seem important, and to you, it may not be,
757      but licenses are important. For a piece of software to be
758      included in the Debian GNU/Linux distribution, it must have a
759      license that fits the <ulink
760      url="http://www.debian.org/social_contract">Debian Free Software
761      Guidelines</ulink>. If you have no license, your program can be
762      distributed in part of Debian until you re-release it under a free
763      license. Please save yourself and others trouble by releasing the
764      first version of your software with a clear license.
765     </para>
766
767    </sect3>
768
769  </sect2>
770
771 <!-- Section2: chooseversioning-->
772
773   <sect2 id="chooseversioning">
774    <title>Choosing a Method of Version Numbering</title>
775    <para>
776     <emphasis>The most important thing about a system of numbering is
777     that there is one.</emphasis> It may seem pedantic to emphasize
778     this point but you'd be surprised at the number of scripts and
779     small programs that pop up without any version number. 
780    </para>
781
782    <para>
783     <emphasis>The second most important thing about a system of
784     numbering is that the numbers always go up.</emphasis> Automatic
785     versioning systems and people's sense of order in the universe
786     will fall apart if version numbers don't rise. It doesn't
787     <emphasis>really</emphasis> matter if 2.1 is a big jump and
788     2.0.005 is a small jump but it does matter that 2.1 is more recent
789     than 2.0.005.
790    </para>
791
792    <para>
793     Follow these two rules and you will not go wrong. Still there are
794     several versioning system that are well known, useful, and that
795     might be worth looking into before you release your first version.
796    </para>
797
798    <variablelist>
799     <varlistentry>
800      <term>Linux kernel version numbering:</term>
801      <listitem>
802       <para>The Linux kernel uses a versioning system where the any
803       minor odd minor version number refers to an development or
804       testing release and any even minor version number refers to a
805       stable version. Under this system, 2.1 and 2.3 kernels were and
806       always will be development and testing kernels and 2.0, 2.2. and
807       2.4 kernels are all production code with a higher degree of
808       stability.
809      </para>
810
811       <para>
812        Whether you plan on having a split development model (as
813        described in <xref linkend="branches">) or only one version
814        released at a time, my experience with several free software
815        projects and with the Debian project has taught me that use of
816        Linux's version numbering system is worth taking into
817        consideration. In Debian, all minor versions are stable
818        distributions (2.0, 2.1, etc). However, many people assume that
819        2.1 is an unstable or development version and continue to use
820        an older version until they get so frustrated with the lack of
821        development and progress that they complain. If you never
822        release an odd minor version but only release even ones, nobody
823        is hurt, and less people are confused.
824       </para>
825
826      </listitem>
827     </varlistentry>
828     <varlistentry>
829      <term>Wine version numbering:</term>
830      <listitem>
831       <para>Because of the unusual nature of wine's development where
832       it constantly improving but not working towards any immediately
833       achievable goal, wine is released every three weeks. Wine does
834       this by versioning their releases in Year Month Day format where
835       each release might be labeled <quote>wine-XXXXXXXX</quote> where
836       the version from January 04, 2000 would be
837       <quote>wine-20000104</quote>. For certain projects, Year Month
838       Day format can make a lot of sense.
839       </para>
840
841      </listitem>
842     </varlistentry>
843     <varlistentry>
844      <term>Mozilla milestones:</term>
845      <listitem>
846       <para>When one considers Netscape 6 and vendor versions, the
847       mozilla's project development structure is one of the most
848       complex free software model available. Their version numbering
849       has reflected the unique situation in which it is
850       developed.
851       </para>
852
853       <para>
854        Mozilla's development structure has historically been made up
855        of milestones. From the beginning of the mozilla project, the
856        goals of the project in the order and degree to which they were
857        to be achieved were charted out on a series of <ulink
858        url="http://www.mozilla.org/roadmap.html">road
859        maps</ulink>. Major points and achievements along this road-maps
860        were marked as milestones. Therefore, mozilla was built and
861        distributed nightly as "nightly builds" but on a day when the
862        goals of a milestone on the road-map had been reached, that
863        particular build was marked as a milestone release.
864       </para>
865
866       <para>
867        While I haven't seen this method employed in any other projects
868        to date, I like the idea and think that it might have value in
869        any testing or development branch of a large free application
870        under heavy development.
871       </para>
872
873      </listitem>
874     </varlistentry>
875    </variablelist>
876   </sect2>
877
878 <!-- Section2: documentation-->
879
880   <sect2 id="documentation">
881    <title>Documentation</title>
882
883    <para>
884     A huge number of otherwise fantastic free software applications
885     have withered because their author was the only person who knew
886     how to use them well. Even if your program is written primarily
887     for a techno-savvy group of users, documentation is helpful and
888     necessary for the survival of your project. You will learn later
889     in <xref linkend="releasing"> that you must always release
890     something that is usable. <emphasis>A piece of software without
891     documentation is not usable.</emphasis>
892    </para>
893
894    <para>
895     There are lots of ways to document your project and lots of
896     different people to document for. The idea of documentation the
897     code itself to help facilitate development by a large community is
898     vital but is outside the scope of this HOWTO. This being the case,
899     this section deals mostly useful tactics for user-directed
900     documentation.
901    </para>
902
903    <para>
904     A combination of tradition and necessity has resulted in a
905     semi-regular system method of documentation in most free software
906     projects that is worth following. Both users and developers expect
907     to be able to get documentation in several ways and its essential
908     that you provide the information they are seeking in a form they
909     can read if your project is ever going to get off the
910     ground. People have come to expect:
911    </para>
912
913    <sect3>
914     <title>Man pages</title> 
915
916     <para>Your users will want to be able to type <quote>man
917     foo</quote> end up with a nicely formatted man page highlighting
918     the basic use of their application. Make sure that before you
919     release your program, you've planned for this.
920     </para>
921
922     <para>
923      Man pages are not difficult to write. There is excellent
924      documentation on the man page process available through the
925      <quote>The Linux Man-Page-HOWTO</quote> available through the
926      Linux Documentation project <acronym>(LDP)</acronym> written by
927      Jens Schweikhardt. It is available <ulink
928      url="http://www.schweikhardt.net/man_page_howto.html">from
929      Schweikhardt's site</ulink> or <ulink
930      url="http://www.linuxdoc.org/HOWTO/mini/Man-Page.html">from the
931      <acronym>LDP</acronym></ulink>.
932     </para>
933
934     <para>
935      It is also possible to write man pages using DocBook SGML and
936      convert them into man pages. Because man pages are so simple, I
937      have not been able to follow this up but would love help from
938      anyone who can give me more information on how exactly this is
939      done.
940     </para>
941    </sect3>
942
943    <sect3>
944     <title>Command line accessible documentation</title>
945
946     <para>
947      Most users will expect the most basic amount of documentation to
948      be easily available from the command line. For few programs should
949      then documentation extend for more than one screen (24 or 25
950      lines) but it should cover the basic usage, a brief (one or two
951      sentence) description of the program, a list of commands, all the
952      major options, and a pointer to more in-depth documentation for
953      those who need it. The command line documentation for Debian's
954      apt-get serves as an excellent example and a useful model:
955     </para>
956
957     <screen>
958 apt 0.3.19 for i386 compiled on May 12 2000  21:17:27
959 Usage: apt-get [options] command
960        apt-get [options] install pkg1 [pkg2 ...]
961
962 apt-get is a simple command line interface for downloading and
963 installing packages. The most frequently used commands are update
964 and install.
965
966 Commands:
967    update - Retrieve new lists of packages
968    upgrade - Perform an upgrade
969    install - Install new packages (pkg is libc6 not libc6.deb)
970    remove - Remove packages
971    source - Download source archives
972    dist-upgrade - Distribution upgrade, see apt-get(8)
973    dselect-upgrade - Follow dselect selections
974    clean - Erase downloaded archive files
975    autoclean - Erase old downloaded archive files
976    check - Verify that there are no broken dependencies
977
978 Options:
979   -h  This help text.
980   -q  Loggable output - no progress indicator
981   -qq No output except for errors
982   -d  Download only - do NOT install or unpack archives
983   -s  No-act. Perform ordering simulation
984   -y  Assume Yes to all queries and do not prompt
985   -f  Attempt to continue if the integrity check fails
986   -m  Attempt to continue if archives are unlocatable
987   -u  Show a list of upgraded packages as well
988   -b  Build the source package after fetching it
989   -c=? Read this configuration file
990   -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp
991 See the apt-get(8), sources.list(5) and apt.conf(5) manual
992 pages for more information and options.
993     </screen>
994
995     <para>
996      It has become a GNU convention to make this information
997      accessible with the <quote>-h</quote> and the
998      <quote>--help</quote> options. Most GNU/Linux users will expect
999      to be able to retrieve basic documentation these ways so if you
1000      choose to use different method, be prepared for the flames and
1001      for the fallout that may result.
1002     </para>
1003    </sect3>
1004    <sect3>
1005     <title>Files users will expect</title>
1006     <para>
1007      In addition to man pages and online help, there are certain files
1008      where people will look to documentation, especially in any
1009      package containing source code. In a source distribution, most of
1010      these files can be stored in a the root directory of the source
1011      distribution or in a subdirectory of the root called
1012      <quote>doc</quote> or <quote>Documentation</quote>. These files include:
1013     </para>
1014     <para>
1015      <variablelist>
1016       <varlistentry>
1017        <term>README or Readme</term>
1018
1019        <listitem>
1020         <para>
1021          A document containing all the basic installation,
1022          compilation, and even basic use instructions that make up
1023          the bare minimum information needed to get the program up and
1024          running. A README is not your chance to be verbose but needs
1025          to be concise and effective. An ideal README is at least 30
1026          lines long and more no more than 250.
1027         </para>
1028        </listitem>
1029
1030       </varlistentry>
1031       <varlistentry>
1032        <term>INSTALL or Install</term>
1033
1034        <listitem>
1035         <para>
1036          The INSTALL file should be much shorter than the INSTALL file
1037          and should quickly and concisely describe how to build and
1038          install the program. Usually an install simply instructs the
1039          user to run ./configure; make; make install and touches on
1040          any unusual options that may be necessary. More advanced
1041          users can usually avoid them but it's good practice to at
1042          least glance at the file to understand what can be
1043          expected. For most relatively standard install procedures and
1044          for most programs, INSTALL files are as short as possible are
1045          rarely over 100 lines.
1046         </para>
1047        </listitem>
1048
1049       </varlistentry>
1050       <varlistentry>
1051        <term>Changelog, ChangeLog, CHANGELOG, or changelog</term>
1052
1053        <listitem>
1054         <para>
1055          A changelog is a simple file that every well-managed free
1056          software project should include. A changelog is simple the
1057          file that, as its name would imply, logs or documents the
1058          changes to a program. The most simple way to do a changelog
1059          is to simply keep a file with the source code for your
1060          program and add a section to the top of the changelog with
1061          each release describing what has been, changed, fixed, or
1062          added to the program. It's a good idea to post the changelog
1063          onto the website as well because it can help people decide
1064          whether they want or need to upgrade to a newer version or
1065          wait for a more significant upgrade.
1066         </para>
1067        </listitem>
1068
1069       </varlistentry>
1070       <varlistentry>
1071        <term><acronym>FAQ</acronym></term>
1072
1073        <listitem>
1074         <para>
1075          For those of you that don't already
1076          know. <acronym>FAQ</acronym> stands for Frequently Asked
1077          Questions and the file is a collection of exactly that. FAQs
1078          are not difficult to make. Simply make a policy that if you
1079          are asked a question or see a question on a mailing list two
1080          or more times, add it the question (and its answer) to your
1081          FAQs. FAQs are more optional than the files listed above but
1082          they can save your time, increase usability, and decrease
1083          headaches on all sides.
1084         </para>
1085        </listitem>
1086
1087       </varlistentry>
1088      </variablelist>
1089     </para>
1090    </sect3>
1091
1092    <sect3>
1093     <title>Website</title>
1094     <para>
1095      It's only a sort of an issue of documentation but a good website
1096      is quickly becoming an essential part of any free software
1097      project. Your website should provide access to documentation (in
1098      <acronym>HTML</acronym> if possible). It should also include a
1099      section for news and events around your program and a section
1100      that details the process of getting involved with development or
1101      testing and creates an open invitation. It should also supply
1102      links to any mailing lists, similar websites, and directly to all
1103      the available ways of downloading your software.
1104     </para>
1105    </sect3>
1106
1107    <sect3>
1108     <title>Other documentation hints</title>
1109
1110     <para>
1111      It doesn't hurt to distribute any documentation for your program
1112      from your website or anywhere else (FAQs etc) with the
1113      program. Make a FAQ by cutting and posting common questions and
1114      answers from a mailing list or your own email. Then, don't
1115      hesitate through this in the programs tarball. If people don't
1116      need it, they will delete it. I can repeat it over and over:
1117      <emphasis>Too much documentation is not a sin.</emphasis>
1118     </para>
1119
1120     <para>
1121      All your documentation should be in plaintext, or, in cases where
1122      it is on your website primarily, in HTML. Everyone can cat a
1123      file, everyone has a pager, (almost) everyone can render
1124      HTML. <emphasis>You are welcome to distribute information in PDF,
1125      PostScript, RTF, or any number of other widely used formats but
1126      this information must also be available in plaintext or HTML or
1127      people will be very angry at you.</emphasis>
1128     </para>
1129    </sect3>
1130   </sect2>
1131
1132 <!-- Section2: presentation -->
1133
1134   <sect2 id="presentation">
1135    <title>Other Presentation Issues</title>
1136    <para>
1137     Many of the remaining issues surrounding the creation of a new
1138     free software program fall under what most people describe as
1139     common sense actions. Still, they are worth noting briefly in
1140     hopes that they may remind a developer of something they may have
1141     forgotten.
1142    </para>
1143
1144    <sect3>
1145     <title>Package formats</title>
1146     <para>
1147      Package formats may differ depending on the system you are
1148      developing for. For windows based software, Zip archives (.zip)
1149      usually serve as the package format of choice. If you are
1150      developing for GNU/Linux, *BSD, or any UN*X, make sure that your
1151      source code is always available in tar'ed and gzip'ed format
1152      (.tar.gz). UNIX compress (.Z) has gone out of style and
1153      usefulness and faster computers have brought bzip2 (.bz2) into
1154      the spot-lit as a more effective compression medium. I now make
1155      all my releases available in both gzip'ed and bzip2'ed formats.
1156     </para>
1157
1158     <para>
1159      Binary packages are largely distribution specific. You can build
1160      binary packages against a current version of a major
1161      distribution, you will only make your users happy. Try to foster
1162      relationships with users or developers of large distribution to
1163      develop a system for consistent binary packages. It's often a
1164      good idea to provide RedHat <acronym>RPM</acronym>'s (.rpm),
1165      Debian deb's (.deb) and source <acronym>RPM</acronym>'s
1166      <acronym>SRPM</acronym>'s. Binary packages can also be compiled
1167      against a specified system with specified libraries and
1168      distributed in tar.gz format as well. <emphasis>Remember: While
1169      these binaries packages are nice, getting the source packaged and
1170      released should always be your priority. Other can and will do
1171      the the binary packages for you.</emphasis>
1172     </para>
1173    </sect3>
1174
1175    <sect3>
1176     <title>Useful tidbits and presentation hints</title>
1177
1178     <para>
1179      <itemizedlist>
1180
1181       <listitem>
1182        <para>
1183         <emphasis>Make sure that your program can always be found in a
1184         single location.</emphasis> Often this means that you have a
1185         single directory accessible via <acronym>FTP</acronym> or
1186         <acronym>HTTP</acronym> where the newest version will be
1187         quickly recognized. One effective technique is a provide a
1188         symlink called <quote>projectname-latest</quote> that is
1189         always pointing to the most recent released or development
1190         version of your free software project.
1191        </para>
1192       </listitem>
1193
1194       <listitem>
1195        <para>
1196         <emphasis>Make sure that there is a consistent email address
1197         for bug reports.</emphasis> It's usually a good idea to make
1198         this something that is NOT your primary email address like
1199         projectname@host or projectname-bugs@host. This way if you
1200         ever decide to hand over maintainership or if your email
1201         address changes, you simply need to change where this email
1202         address forwards to. It also will allow for more than one
1203         person to deal with the influx of mail that is created if your
1204         project becomes as huge as you hope it will.
1205        </para>
1206       </listitem>
1207
1208      </itemizedlist>
1209     </para>
1210
1211    </sect3>
1212   </sect2>
1213  </sect1>
1214
1215 <!-- Section1: starting: END -->
1216
1217 <!-- Section1: developers -->
1218
1219  <sect1 id="developers">
1220   <title>Maintaining a Project: Interacting with Developers</title>
1221   <indexterm>
1222    <primary>fswd!developers</primary>
1223   </indexterm>
1224
1225   <para>
1226    Once you have gotten the project started, you have gotten over the
1227    most difficult hurdles in the development process of your
1228    program. Laying a firm foundation is essential, but the development
1229    process itself is equally important and provides an equal number of
1230    opportunities for failure. In the next two sections, I will and
1231    cover running a project by discussing how to maintain a project
1232    rough interactions with developers and with users.
1233   </para>
1234
1235   <para>
1236    In releasing your program, your program becomes free software. This
1237    transition is more than just a larger user base. By releasing your
1238    program as free software, <emphasis>your</emphasis> software
1239    becomes the <emphasis>free software community's</emphasis>
1240    software. The direction of your software's development will be
1241    reshaped, redirected, and fully determined by your users and, to a
1242    larger extent, by other developers in the community.
1243   </para>
1244
1245   <para>
1246    The major difference between free software development and propriety
1247    software development is the developer base. As the leader of a free
1248    software project, you need to attract and keep developers in a way
1249    that leaders of proprietary software projects simply don't have to
1250    worry about. <emphasis>As the person leading development of a free
1251    software project, you must harness the work of fellow developers by
1252    making responsible decisions and by and by choosing not to make
1253    decisions responsibly. You have to direct developers without being
1254    overbearing or bossy. You need to strive to earn respect and never
1255    forget to give it.</emphasis>
1256   </para>
1257
1258 <!-- Section2: delegation  -->
1259
1260   <sect2 id="delegation">
1261    <title>Delegating Work</title>
1262
1263    <para>
1264     By now, you've hypothetically followed me through the early
1265     writing of a piece of software, the creation of a website and
1266     system of documentation and and we've gone ahead and (as will be
1267     discussed in <xref linkend="releasing">) released it to the rest
1268     of the world. Times passes, and if things go well, people become
1269     interested and want to help. The patches begin flowing in.
1270    </para>
1271
1272    <para>
1273     <emphasis>Like the parent of any child who grows up, it's now time
1274     to wince and smile and do most difficult thing in any parents
1275     life: It's time to let go.</emphasis>
1276    </para>
1277
1278    <para>
1279     Delegation is the political way of describing this process of
1280     <quote>letting go.</quote> It is the process of handing some of
1281     the responsibility and power over your project to other responsible
1282     and involved developers. It is difficult for anyone who has
1283     invested a large deal of time and energy into a project but it
1284     essential for the growth of any free software project. One person
1285     can only do so much. <emphasis>A free software project is nothing
1286     without the involvement of a group of developers. A group of
1287     developers can only be maintained through respectful and
1288     responsible leadership and delegation.</emphasis>
1289    </para>
1290
1291    <para>
1292     As your project progresses, you will notice people who are putting
1293     significant amounts of time and effort into your project. These
1294     will be the people submitting the most patches, posting most on
1295     the mailing lists, engaging in long email discussions. It is your
1296     responsibility to contact these people and to try and shift some of
1297     the power and responsibility of your position as the project's
1298     maintainer onto them (if they want it). There are several easy
1299     ways you can do this:
1300    </para>
1301
1302    <sect3>
1303     <title>How to delegate</title>
1304  
1305     <para>
1306      Like anything, its easier to see how others delegate than to do
1307      it yourself. You may find that other developers seem even more
1308      experienced or knowledgeable than you. Your job as a maintainer
1309      does not mean you have to have to be the best or the
1310      brightest. It means you need are responsible for showing good
1311      judgment and for recognizing solutions that are maintainable and
1312      are not. In a sentence: <emphasis>Keep an eye out for other
1313      qualified developers who show an interest and sustained
1314      involvement with your project and try and shift responsibility
1315      towards them.</emphasis> The following ideas might be good places
1316      to start or good sources of inspiration:
1317     </para>
1318  
1319     <sect4>
1320      <title>Allow a larger group of people write access to your CVS
1321      repository and make real efforts towards rule by a
1322      committee</title>
1323
1324      <para>
1325       <ulink url="http://httpd.apache.org/">Apache</ulink> is an
1326       example of a project that is run by small group of developers
1327       who vote on major technical issues and the admission of new
1328       members and all have write access to the main source
1329       repository. Their process is detailed <ulink
1330       url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
1331      </para>
1332
1333      <para>
1334       The <ulink url="http://www.debian.org/"> Debian Project</ulink>
1335       is an extreme example of rule by committee. At current count,
1336       more than 700 developers have full responsibility for certain
1337       aspects of the projects. All these developers can upload into
1338       the main FTP servers, and vote on major issues. Direction for
1339       the project is determined by the project <ulink
1340       url="http://www.debian.org/social_contract">social
1341       contract</ulink> and a <ulink
1342       url="http://www.debian.org/devel/constitution">constitution</ulink>. To
1343       facilitate this system, there are special teams (i.e. the
1344       install team, the Japanese language team) and a technical
1345       committee and a project lead. There is a project leader as well
1346       but the leader's main responsibility is to, <quote>Appoint
1347       Delegates or delegate decisions to the Technical
1348       Committee.</quote>
1349      </para>
1350
1351      <para>
1352       While both of these projects operate on a scale that your
1353       project will not (at least initially), their example is
1354       helpful. Debian's idea of a project who lead who can do
1355       <emphasis>nothing</emphasis> but delegate can serve as a
1356       caricature of how a project can involve and empower a huge
1357       number of developers and grow to a huge size.
1358      </para>
1359
1360     </sect4>
1361
1362     <sect4 id="releasemanager">
1363      <title>Publicly appoint someone as the release manager for a
1364        specific release.</title>
1365
1366      <para>
1367       A release manager is usually responsible for coordinating
1368       testing, enforcing a code freeze, being responsible for
1369       stability and quality control, packaging up the software, and
1370       placing it in the appropriate places to be downloaded.
1371      </para>
1372
1373      <para>
1374       This use of the release manager is a good way to give yourself a
1375       break and to shift the responsibility for accepting and
1376       rejecting patches to someone else. It is a good way of very
1377       clearly defining a chunk of work on the project as belonging to
1378       a certain person and its a great way of giving yourself a break.
1379      </para>
1380     </sect4>
1381
1382     <sect4 id="delegatebranch">
1383      <title>Delegate control of an entire branch.</title>
1384      <para>
1385       If your project chooses to have branches (as described in <xref
1386       linkend="branches">), it might be a good idea to appoint someone
1387       else to be the the head of a branch. If you like focusing your
1388       energy on development releases and the implementation of new
1389       features, had total control over the stable releases to a
1390       well-suited developer.
1391      </para>
1392
1393      <para>
1394       The author of Linux, Linus Torvalds, came out and crowned Alan
1395       Cox as <quote>the man for stable kernels.</quote> All patches
1396       for stable kernels go to Alan and, if Linus were to be taken
1397       away from work on Linux for any reason, Alan Cox would be more
1398       than suited to fill his role as the acknowledged heir to the
1399       Linux maintainership.
1400      </para>
1401     </sect4>
1402    </sect3> 
1403   </sect2>
1404
1405 <!-- Section2: patching -->
1406
1407   <sect2 id="patching">
1408    <title>Accepting and Rejecting Patches</title>
1409    <para>
1410     This HOWTO has already touched on the fact that as the maintainer
1411     of a free software project, one of primary and most important
1412     responsibilities will be accepting and rejecting patches submitted
1413     to you by other developers.
1414    </para>
1415
1416    <sect3>
1417     <title>Technical judgment</title>
1418
1419     <para>
1420      In <emphasis>Open Source Development with CVS</emphasis>, Karl
1421      Fogel makes a convincing argument that the most important things
1422      to keep in mind are a firm knowledge of the scope of your program
1423      (that's the <quote>idea</quote> I talked about in <xref
1424      linkend="chooseproject">) and the ability to recognize,
1425      facilitate, and direct <quote>evolution</quote> of a free
1426      software program so that the program can grow and change and
1427      incorporate functionality that was originally unforeseen but avoid
1428      digressions that might expand the scope of the program too much
1429      and result and push the project towards an early death under its
1430      own weight and unwieldiness. These are the criteria that you as a
1431      project maintainer should take into account each time you receive
1432      a patch.
1433     </para>
1434
1435     <para>
1436      Fogel elaborates on this again and states the <quote>the
1437      questions to ask yourself when considering whether to implement
1438      (or approve) a change are:</quote>
1439     </para>
1440
1441     <para>
1442      <itemizedlist>
1443
1444       <listitem>
1445        <para>Will it benefit a significant percentage of the program's
1446        user community?</para>
1447       </listitem>
1448
1449       <listitem>
1450        <para>Does it fit within the program's domain or within a
1451        natural, intuitive extension of that domain?</para>
1452       </listitem>
1453
1454      </itemizedlist>
1455     </para>
1456
1457     <para>
1458      The answers to these questions are never straightforward and its
1459      very possible (and even likely) that the person who submitted the
1460      patch may feel differently about the answer to those questions
1461      than you do. However, if you feel that that the answer to either
1462      of those questions is <quote>no,</quote> it is your responsibility
1463      to reject the change. If you fail to do this, the project will
1464      become unwieldy and unmaintainable and will ultimately fail.
1465     </para>
1466    </sect3>
1467
1468    <sect3>
1469     <title>Rejecting patches</title>
1470
1471     <para>
1472      Rejecting patches is probably the most difficult and the most
1473      sensitive job that the maintainer of any free software project
1474      has to face. But sometimes it has to be done. I mentioned earlier
1475      (in <xref linkend="developers"> and in <xref
1476      linkend="delegation">) that any developer needs to try and
1477      balance your responsibility and power to make what you think are
1478      the best technical decisions with the fact that you will lose
1479      support from other developers if you seem like you are on a
1480      power trip or being overly bossy or possessive of a community-based
1481      project. I recommend that you keep three major facts in mind when
1482      rejecting patches (or other changes):
1483     </para>
1484
1485     <sect4>
1486      <title>Bring it to the community</title>
1487      <para>
1488       One of the best ways of justifying  a decision to reject a patch
1489       and working  to  not seem like  you  keep an  iron grip  on your
1490       project is by  not making the  decision  alone at all. It  might
1491       make  sense  to  turn over  larger  proposed  changes  or more
1492       difficult decisions to a development mailing list where they can
1493       be discussed. There will be some patches (bug fixes, etc.) which
1494       will  definitely be accepted  and some that you  feel are so off
1495       base that they do not even merit further discussion. It is those
1496       that fall into the grey area between these two groups that might
1497       merit a quick forward to a mailing list.
1498      </para>
1499
1500      <para>
1501       I recommend this process wholeheartedly. As the project
1502       maintainer you are worried about making the best decision for
1503       the project, for the project's users and developers, and for
1504       yourself as a responsible project leader. Turning things over to
1505       an email list will demonstrate your own responsible and
1506       responsive leadership as it tests and serves the interests of
1507       your software's community.
1508      </para>
1509     </sect4>
1510
1511     <sect4>
1512      <title>Technical issues is not always good justification</title>
1513      <para>
1514       Especially towards the beginning, you will find that many
1515       changes are difficult to implement, introduce new bugs, or have
1516       other technical problems. Try to see past these. Especially with
1517       added functionality, good ideas do not always come from good
1518       coders. Technical merit is a valid reason to postpone the
1519       application of a patch but it is not always a good reason to
1520       reject a change outright. Even small changes are worth the
1521       effort of working with the developer submitting the patch to iron out bugs and
1522       incorporate the change if you thing you think it seems like a
1523       good addition to your project. The effort on your part will work
1524       to make your project a community project and it will pull a new
1525       or less experienced developer onto your project and even teach
1526       them something that might help them in their next patch.
1527      </para>
1528     </sect4>
1529
1530     <sect4>
1531      <title>Common courtesy</title>
1532      <para>
1533       It should go without saying but, <emphasis>above all and in all
1534       cases, just be nice.</emphasis> If someone has an idea and cares
1535       about it enough to write some code and submit a patch, they
1536       care, they are motivated, and they are already involved. Your
1537       goal as the maintainer is make sure they submit again. They may
1538       have thrown you a dud this time but next time may be the idea or
1539       feature that revolutionizes your project. 
1540      </para>
1541
1542      <para>
1543       It is your responsibility to first justify your action to not
1544       incorporate their change clearly and concisely. Then thank
1545       them. Let them know that you a appreciate their help and feel
1546       horrible that you can't incorporate their change. Let them know
1547       that you look forward to their staying involved and you hope
1548       that the next patch or idea meshes better with your project
1549       because you appreciate their work and want to see it in the
1550       project. If you have ever had a patch rejected that put a large
1551       deal of time, thought, and energy into, you remember how it
1552       feels and it feels bad. Keep this in mind when you have to let
1553       someone down. It's never easy but you need to do everything you
1554       have to make it as not-unpleasant as possible.
1555      </para>
1556     </sect4>
1557    </sect3>
1558   </sect2>
1559
1560 <!-- Section2: branches  -->
1561
1562   <sect2 id="branches">
1563    <title>Stable and Development Branches</title>
1564
1565    <para>
1566     The idea of stable and development branches has already been
1567     described briefly in <xref linkend="chooseversioning"> and in
1568     <xref linkend="delegatebranch">. These alludes attest to the fact
1569     to some of the ways that multiple branches can affect your
1570     software. Branches can let you avoid (to some extent) some of the
1571     problems around rejecting patches (as described in <xref
1572     linkend="patching">) by allowing you to temporarily compromise the
1573     stability of your project without affected those users who need
1574     that stability.
1575    </para>
1576
1577    <para>
1578     The most common way of branching your project is to have one
1579     branch that is stable and one that is development. This is the
1580     model followed by the Linux kernel that is described in <xref
1581     linkend="chooseversioning">. In this model, there is always one
1582     branch that is stable and always one that is in
1583     development. Before any new release, the development branch goes
1584     into a <quote>feature freeze</quote> where major changes and added
1585     features are rejected or put on hold under the development kernel
1586     is released as the new stable branch and major development begins
1587     again on the development branch. Bug fixes and small changes that
1588     are unlikely to have any large negative repercussions are
1589     incorporated into the stable branch also to the development
1590     branch.
1591    </para>
1592
1593    <para>
1594     Linux's model is an extreme one. On many projects, there is no
1595     need to have two versions always available. It may make sense to
1596     have two versions only near a release. The Debian project has
1597     historically made both a stable and an unstable distribution
1598     available but has expanded to this to include: stable, unstable,
1599     testing, experimental, and (around release time) a frozen
1600     distribution that only incorporates bug fixes during the
1601     transition from unstable to stable. There are few projects whose
1602     size would necessitate a system like Debian but their use of
1603     branches helps demonstrate how they can be used to balance
1604     consistent and effective development with the need to make regular
1605     and usable releases.
1606    </para>
1607
1608    <para>
1609     In trying to set up a development tree for yourself, there are
1610     several things that might be useful to keep in mind:
1611    </para>
1612
1613    <para>
1614     <variablelist>
1615
1616      <varlistentry>
1617       <term>Minimize the number of branches</term>
1618       <listitem>
1619        <para>
1620         Debian may be able to make good use of four or five branches
1621         but it contains gigabytes of software in over 5000 packages
1622         compiled for a 5-6 different architectures. Two is a good
1623         number. Too many branches will confuse your users (I can't
1624         count how many times I had to describe Debian's system when it
1625         only had 2 and sometimes 3 branches!), potential developers
1626         and even yourself. Branches can help but they come at a cost
1627         so use them very sparingly.
1628        </para>
1629       </listitem>
1630      </varlistentry>
1631
1632      <varlistentry>
1633       <term>Make sure that all your different branches are explained</term>
1634       <listitem>
1635        <para>
1636         As I mentioned in the preceding paragraph, different branches
1637         <emphasis>will</emphasis> confuse your users. Do everything
1638         you can to avoid this by clearly explaining the different
1639         branches in a prominent page on your website and in a Readme
1640         file in the <acronym>FTP</acronym> or <acronym>HTTP</acronym>
1641         directory.
1642        </para>
1643
1644        <para>
1645         I might also recommend against a mistake that I think Debian
1646         has made. The terms <quote>unstable,</quote>
1647         <quote>testing,</quote> and <quote>experimental</quote> are
1648         vague and difficult to rank in order of stability (or
1649         instability as the case may be). Try explaining to someone
1650         that <quote>stable</quote> actually means <quote>ultra
1651         stable</quote> and that <quote>unstable</quote> doesn't
1652         actually include any unstable software but is really stable
1653         software that is untested as a distribution.
1654        </para>
1655
1656        <para>
1657         If you are going to do branches, especially early on, keep in
1658         mind that people are conditioned to understand the terms
1659         <quote>stable</quote> and <quote>development</quote> and you
1660         probably can't go wrong with this simple and common division of
1661         branches.
1662        </para>
1663       </listitem>
1664      </varlistentry>
1665
1666      <varlistentry>
1667       <term>Make sure all your branches are always available</term>
1668       <listitem>
1669        <para>
1670         Like a lot of document, this should probably should go without
1671         saying but experience has taught me that it's not always
1672         obvious to people. It's a good idea to physically split up
1673         different branches in different directories or directory trees
1674         on your <acronym>FTP</acronym> or <acronym>HTTP</acronym>
1675         site. Linux accomplishes this by having all the v2.2 and a
1676         v2.3 subdirectory where it is immediately obvious (after you
1677         know their version numbering scheme) which directory is the
1678         most recent stable and the current development
1679         releases. Debian accomplishes this by naming all their
1680         distribution by name and then changing symlinks named
1681         <quote>stable,</quote> <quote>unstable</quote> and
1682         <quote>frozen</quote> to point to which ever distribution (by
1683         name) is in whatever stage. Both methods work and their are
1684         others. In any case, it is important that different branches
1685         are always available, are accessible from consistent
1686         locations, and that different branches are clearly
1687         distinguished from each other so your users know exactly what
1688         they want to be downloading and where to get it.
1689        </para>
1690       </listitem>
1691      </varlistentry>
1692
1693     </variablelist>
1694    </para>
1695
1696   </sect2>
1697
1698 <!-- Section2: otherdev -->
1699
1700   <sect2 id="otherdev">
1701    <title>Other Development issues</title>
1702    <para>
1703     There are more issues around surrounding interaction with
1704     developers in a free software project that I can touch on in great
1705     detail in a HOWTO of this size. Please don't hesitate to contact
1706     me if you see any major omissions. Other smaller issues that are
1707     worth mentioning are:
1708    </para>
1709
1710    <sect3>
1711     <title>Freezing</title>
1712     <para>
1713      For those projects that choose to adopt a split development model
1714      (<xref linkend="branches">), freezing is a concept that is worth
1715      becoming familiar with. 
1716     </para>
1717
1718     <para>
1719      Freeze come in two major forms. A <quote>feature freeze</quote>
1720      is a period when no significant functionality is added to a
1721      program. It is a period where established functionality (even
1722      skeletons of barely working functionality) can be improved and
1723      perfected. It is a period where bugs are fixed. This type of
1724      freeze is usually applied some period (a month or two) before a
1725      release. It is easy to push a release back as you wait for
1726      <quote>one more feature</quote> and a freeze helps to avoid this
1727      situation by drawing the much needed line in the sand. It gives
1728      developers room they need to get a program ready for release.
1729     </para>
1730
1731     <para>
1732      The second type of freeze is a <quote>code freeze</quote> which
1733      is much more like a released piece of software. Once a piece of
1734      software has entered a code freeze, all changes to the code are
1735      frowned upon and only changes that fix known bugs are
1736      permitted. This type of freeze usually follows a <quote>feature
1737      freeze</quote> and directly precedes a release. Most released
1738      software is in what could be interpreted as a sort of high
1739      level<quote>code freeze.</quote>
1740     </para>
1741
1742     <para>
1743      Even you do not choose to appoint a release manager (<xref
1744      linkend="releasemanager">), you will have an easier time
1745      justifying the rejection or postponement of patches (<xref
1746      linkend="patching"> before a release with a publicly stated
1747      freeze in effect.
1748     </para>
1749    </sect3>
1750
1751    <sect3>
1752     <title>Forking</title>
1753     <para>
1754      Forks are the most extreme interpretation of a branch. A fork is
1755      when a group of developers takes code from a free software
1756      project and actually starts a brand new free software
1757      project. The most famous example of a fork is Emacs and
1758      XEmacs. Both emacsen are based on an almost identical code-base
1759      but for technical, political, and philosophical reasons,
1760      development was split into two projects which now compete with
1761      each other.
1762     </para>
1763
1764     <para>
1765      The short version of the fork section is, <emphasis>don't do
1766      them.</emphasis> Forks force developers to choose one project to
1767      work with, cause nasty political divisions, redundancy of work.
1768      Luckily, usually the threat of the fork is enough to scare the
1769      maintainer or maintainers of a project into changing the way they
1770      run their project to avoid it.
1771     </para>
1772
1773     <para>
1774      In his chapter on <quote>The Open Source Process,</quote> Karl
1775      Fogel describes how to do a fork if you absolutely must. If you
1776      have determined that is absolutely necessary and that the
1777      differences between you and the people threatening to fork are
1778      absolutely unresolvable, I recommend Fogel's book as a good place
1779      to start.
1780     </para>
1781    </sect3>
1782   </sect2>
1783  </sect1>
1784
1785 <!-- Section1: users -->
1786
1787  <sect1 id="users">
1788   <title>Maintaining a Project: Interacting with Users</title>
1789   <indexterm>
1790    <primary>fswd!users</primary>
1791   </indexterm>
1792
1793   <para>
1794    If you've worked your way up to here, congratulations, you are
1795    nearing the end of this document. This final section describes some
1796    of the situations in which you, in your capacity as project
1797    maintainer, will be interacting with users and gives some
1798    suggestions on how these situations might be handled effectively.
1799   </para>
1800
1801   <para>
1802    Interacting with users is difficult. In our discussion of
1803    interaction with developers, the underlying assumption is that in a
1804    free software project, a project maintainer must constantly strive to
1805    attract and keep developers who can easily leave at any time.
1806   </para>
1807
1808   <para>
1809    Users in the free software community are different than users in
1810    the world of proprietary software and they should be treated
1811    differently. Some ways in which the groups differ significantly
1812    follow:
1813   </para>
1814
1815   <para>
1816    <itemizedlist>
1817
1818     <listitem>
1819      <para>The lines between users and developers are blurred in ways
1820      that is totally foreign to any proprietary development
1821      model. Your users are often your developers and vice
1822      versa.</para>
1823     </listitem>
1824
1825     <listitem>
1826      <para>In the free software world, you are often your users only
1827      choice. Because there is such an emphasis on not replicating the
1828      work of others in the free software community and because the
1829      element of competition present in the propriety software model is
1830      absent (or at least in an extremely different form) in the free
1831      software development model your users will probably be the only
1832      project that does what you do (or at least the only one that does
1833      what you do in the way that you do it). This means your
1834      responsiveness to your users is even more important in that in
1835      the proprietary world.</para>
1836     </listitem>
1837
1838     <listitem>
1839      <para>In an almost paradoxical situation, free software projects
1840      have less immediate or dire consequences for ignoring their
1841      users--it is often easier to do. Because you don't usually need
1842      to compete with another product in the free software model,
1843      chances are good that you will not be scrambling to gain the
1844      features of the competitor's newest program. This means that your
1845      development process will have to be directed either internally,
1846      by your users or both.</para>
1847     </listitem>
1848    </itemizedlist>
1849   </para>
1850
1851   <para>
1852    Trying to tackle this unique situation can only be done
1853    indirectly. Developers and maintainers need to listen to users and
1854    to try and be as responsive as possible. A solid knowledge of the
1855    situation recounted above is any free software developers best tool
1856    for shifting his development or leadership style to fit the unique
1857    process of free software development. This chapters will try and
1858    introduce some of the more difficult or important points in any
1859    projects interactions with users and give some hints on how to
1860    tackle these.
1861   </para>
1862
1863 <!-- Section2: testing -->
1864
1865   <sect2 id="testing">
1866    <title>Testing and Testers</title>
1867
1868    <para>
1869     In addition to your users being your developers, they are also
1870     (and perhaps more commonly) your testers. Before I get flamed, I
1871     should rephrase my sentence: <emphasis>some</emphasis> users are
1872     your testers.
1873    </para>
1874
1875    <para>
1876     It is important that this distinction be made early on because not
1877     all of your users wants to be testers. Many users want to use
1878     stable software and don't care if they don't have the newest
1879     greatest software with the latest and greatest features. These
1880     users except a stable, tested piece of software with major or
1881     obvious bugs worked out or openly declared and will be angry if
1882     they find themselves in a testing position. This is yet another
1883     way in which a split development model (as mentioned in <xref
1884     linkend="branches">) might come in handy.
1885    </para>
1886
1887    <sect3>
1888     <title>Automated testing</title>
1889     <para>
1890      For many programs, many common and mistakes can be caught by
1891      automated means. Automated tests tend to be pretty good at
1892      catching errors that you've run into several times before or
1893      something you just forget and not very good at finding errors,
1894      even major ones, that were totally unforeseen.
1895     </para>
1896
1897     <para>
1898      CVS comes with a bourne shell script called sanity.sh that is
1899      worth looking at. Debian uses a program called lintian that
1900      checks Debian packages for all of the most common errors. While
1901      using these scripts may not be possible, there is a host of other
1902      sanity checking software on the net that may be applicable (feel
1903      free to email any recommendations). None of these will create a
1904      bug-free release but they will avoid at least some major
1905      oversights. Finally, if your programs become a long term
1906      endeavor, you will find that there are certain errors that you
1907      tend to make over and over. Start a collection of scripts that
1908      check for these errors to help prevent them in the future.
1909     </para>
1910    </sect3>
1911
1912    <sect3>
1913     <title>Testing by testers</title>
1914     <para>
1915      For any program that depends on user interactivity, many bugs
1916      will only be uncovered through testing by users actually clicking
1917      the keys and pressing the mouse buttons. For this you need
1918      testers and as many testers as possible.
1919     </para>
1920
1921     <para>
1922      The most difficult part of testing is finding testers. It's
1923      usually a good tactic to post a message to a relevant mailing
1924      list or news group announcing a specific proposed release date
1925      and outline the functionality of the program. If you put some
1926      time into the announcement, you are sure to get a few bites.
1927     </para>
1928
1929     <para>
1930      The second most difficult part of testing is keeping your testers
1931      and keeping them actively involved in the testing
1932      process. Fortunately, there are some tried and true tactics that
1933      can applied towards this end:
1934     </para>
1935
1936     <para>
1937      <itemizedlist>
1938
1939       <listitem>
1940        <para><emphasis>Make things simple for your testers.</emphasis>
1941        Your testers are doing you a favor so make it as easy as
1942        possible. This means that you should be careful to package your
1943        software in a way that is easy to find, unpack, install, and
1944        uninstall. This also means you should explain what you are
1945        looking for to each tester and make the means for reporting
1946        bugs simple and well established. The key is to provide as much
1947        structure as possible to make your tester's job easy and
1948        maintain as much flexibility as possible for those that want to
1949        do things a little differently.</para>
1950       </listitem>
1951
1952       <listitem>
1953        <para><emphasis>Be responsive to your testers.</emphasis> When
1954        your testers submit bugs, respond to them and respond
1955        quickly. Even if you are only responding to tell them that the
1956        bug has already been fixed, quick and consistent response make
1957        them feel like their work is heard, important, and
1958        appreciated.</para>
1959       </listitem>
1960
1961       <listitem>
1962        <para><emphasis>Thank your testers.</emphasis> Thank them
1963        personally each time they send you patch. Thank them publicly
1964        in the documentation and the about section of your program. You
1965        appreciate your testers and your program would not be possible
1966        without their help. Make sure they know and pat them on the
1967        back by making sure the rest of the world knows it too. It will
1968        be appreciated more than you expected.</para>
1969       </listitem>
1970
1971      </itemizedlist>
1972     </para>
1973    </sect3>
1974   </sect2>
1975
1976 <!-- Section2: support  -->
1977
1978   <sect2 id="support">
1979    <title>Setting up a Support Infrastructure</title>
1980
1981    <para>
1982     While testing is important, the large part of your interactions
1983     and responsibility to your users falls under the category of
1984     support. The best way to make sure your users are adequately
1985     supported in using your program is to set up a good infrastructure
1986     for this purpose so that your developers and users help each other
1987     and less of the burden falls on you while people get quicker and
1988     better responses to their questions. This infrastructure comes in
1989     several forms:
1990    </para>
1991
1992    <sect3>
1993     <title>Documentation</title>
1994     <para>
1995      It should not come as any surprise that the key element to any
1996      support infrastructure is good documentation. This topic was
1997      large covered in <xref linkend="documentation"> and will not be
1998      repeated here.
1999     </para>
2000    </sect3>
2001
2002    <sect3>
2003     <title>Mailing lists</title>
2004     <para>
2005      Aside from documentation, effective mailing lists will be your
2006      greatest tool in supporting user support. Running a mailing list
2007      well is more complicated than installing mailing list software
2008      onto a machine. 
2009     </para>
2010
2011     <sect4>
2012      <title>Separate lists</title>
2013      
2014      <para>
2015       A good idea is too separate your user and development mailing
2016       lists (perhaps into project-user@host and project-devel@host)
2017       and enforce the division. If people post a development question
2018       onto -user, politely ask them to repost it onto -devel and vise
2019       versa. Subscribe yourself to both groups and encourage primarily
2020       developers to do the same.
2021      </para>
2022
2023      <para>
2024       This system provides so that no one person is stuck doing all of
2025       the support work and works so that users learn more about the
2026       program, they can help new users with their questions.
2027      </para>
2028     </sect4>
2029
2030     <sect4>
2031      <title>Choose mailing list software well</title>
2032      <para>
2033       Please don't make the selection of mailing list software
2034       lightly. Please consider easy accessibility by users without a
2035       lot of technical experience so you want to be as easy as
2036       possible. Web accessibility to an archive of the list is also
2037       important.
2038      </para>
2039
2040      <para>
2041       The two biggest free software mailing list programs are <ulink
2042       url="http://www.greatcircle.com/majordomo/">majordomo</ulink>
2043       and <ulink url="http://www.list.org/">GNU Mailman</ulink>. A
2044       long time advocate of majordomo, I would now recommend any
2045       project choose GNU Mailman. It fulfills the criteria listed above
2046       and makes it easier to do. It provides a good mailing list
2047       program for a free software project maintainer as opposed to a
2048       good mailing list application for a mailing list administrator.
2049      </para>
2050
2051      <para>
2052       There are other things you want to take in setting up your
2053       list. If it is possible to gate your mailing lists to USENET and
2054       provide them in digest form as well as making them accessible on
2055       the web, you will please some users and work to make the support
2056       infrastructure slightly more accessible.
2057      </para>
2058     </sect4>
2059    </sect3>
2060
2061    <sect3>
2062     <title>Other support ideas</title>
2063
2064     <para>
2065      A mailing list and accessible documentation all you can do to set
2066      up good user support infrastructure. Be creative. If you stumble
2067      across something works well, email me and I'll include it here in
2068      the HOWTO.
2069     </para>
2070     <sect4>
2071      <title>Make your self accessible</title>
2072      <para>
2073       You can not put to few methods to access you. If you hang out in
2074       an <acronym>IRC</acronym> channel, don't hesitate to list in
2075       your projects documentation. List email and snail mail
2076       addresses, or ways to reach you via <acronym>ICQ</acronym>,
2077       <acronym>AIM</acronym>, or Jabber.
2078     </para>
2079     </sect4>
2080
2081     <sect4>
2082      <title>Bug management software</title>
2083      <para>
2084       For many large software projects, use of bug management software
2085       is essential to keep track of which bugs have been fixed, which
2086       bugs have not been fixed, and which bugs are being fixed by
2087       which people. Debian uses the <ulink
2088       url="http://bugs.debian.org">Debian Bug Tracking System</ulink>
2089       (<acronym>BTS</acronym>) although it may not be best choice for
2090       every project (it seems to currently be buckling under its own
2091       weight. As well as a damn good web browser, the mozilla project
2092       has spawned a sub-project resulting in a bug tracking system
2093       called <ulink
2094       url="http://www.mozilla.org/projects/bugzilla/">bugzilla</ulink>.
2095      </para>
2096
2097      <para>
2098       These systems (and others like them) can be unwieldy so
2099       developers should be careful to not spend more time on the bug
2100       tracking system than on the bugs or the projects themselves. If
2101       a project continues to grow, use of a bug tracking system can
2102       provide an easy standard way for users and testers to report
2103       bugs and for developers and maintainers to fix them in an
2104       orderly fashion.
2105      </para>
2106     </sect4>
2107    </sect3>
2108   </sect2>
2109
2110 <!-- Section2: releasing -->
2111
2112   <sect2 id="releasing">
2113    <title>Releasing Your Program</title>
2114
2115    <para>
2116     As mentioned earlier in the HOWTO, the first rule or releasing is,
2117     <emphasis>release something useful.</emphasis> Non-working or
2118     not-useful software will not attract anyone to your
2119     project. People will be turned off of your project and be likely
2120     to simply gloss over it next time they see a new version
2121     announced. Half-working software, if useful, will intrigue people,
2122     whet their appetites for the version to come, and encourage them
2123     to join the development process.
2124    </para>
2125
2126    <sect3>
2127     <title>When to release</title>
2128
2129     <para>
2130      Making the decision to release your software for the first time
2131      is an incredibly important and incredibly stressful decision. But
2132      it needs to be done. My advice is to try and make something that
2133      is complete enough to be usable and incomplete enough to allow
2134      for flexibility and imagination by your future developers. It's
2135      not an easy decision. Ask for help on a local Linux User Group
2136      mailing list or from a group of developer friends.
2137     </para>
2138
2139     <para>
2140      One tactic is to first do an <quote>alpha</quote> or
2141      <quote>beta</quote> release as described below in <xref
2142      linkend="alphabeta">. However, most of the guidelines described
2143      above still apply.
2144     </para>
2145
2146     <para>
2147      <emphasis>When you feel in your gut it is time and you feel
2148      you've weighed the situation well several times, cross your
2149      fingers and take the plunge.</emphasis>
2150    </para>
2151    </sect3>
2152
2153    <sect3>
2154     <title>How to release</title>
2155
2156     <para>
2157      If you've followed the guidelines described in this HOWTO up
2158      until this point, the mechanics of doing a release are going to
2159      be the easy part of releasing. If you have set up a consistent
2160      distribution locations and the other infrastructure described in
2161      the preceding sections, releasing should be as simple as
2162      building the package, checking it once over, and uploading it
2163      into the appropriate place and then reflecting the release on
2164      your website.
2165     </para>
2166    </sect3>
2167
2168    <sect3 id="alphabeta">
2169     <title>Alpha, beta, and development releases</title>
2170
2171     <para>
2172      When contemplating releases, it worth considering the fact that
2173      not every release needs to be a full numbered release. Software
2174      users are accustomed to pre-releases but you must be careful to
2175      label these releases accurately or they cause more problems then
2176      they are worth.
2177     </para>
2178
2179     <para>
2180      <variablelist>
2181
2182       <varlistentry>
2183        <term>alpha releases</term>
2184        <listitem>
2185         <para>
2186          Alpha releases are expected to be unstable, perhaps a little
2187          unsafe, but definitely usable. Alpha versions should have
2188          full functionality and limited testing. They can have known
2189          bugs and kinks that have yet to be worked out. Before sure to
2190          keep in mind that <emphasis>alpha releases are still
2191          releases</emphasis> and people are not going to be expecting
2192          a nightly build from the CVS source. An alpha should work and
2193          have minimal testing and bug fixing already finished.
2194         </para>
2195        </listitem>
2196       </varlistentry>
2197
2198       <varlistentry>
2199        <term>beta releases</term>
2200        <listitem>
2201         <para>
2202          Beta releases are general expected to be usable and
2203          slightly unstable, although definitely
2204          <emphasis>not</emphasis> unsafe. Beta releases usually
2205          preclude a full release by under a month. They can contain
2206          small known bugs but no major ones. All major functionality
2207          should be fully implemented although the exact mechanics can
2208          still be worked out. Beta releases are great tool to whet the
2209          appetites of potential users by giving them a very
2210          realistic view of where your project is going in the very
2211          near future and can help keep interest by giving people
2212          <emphasis>something.</emphasis>
2213         </para>
2214        </listitem>
2215       </varlistentry>
2216
2217       <varlistentry>
2218        <term>development releases</term>
2219        <listitem>
2220         <para>
2221          Development release is much more vague term than
2222          <quote>alpha</quote> or <quote>beta</quote>. I usually choose
2223          to reserve the term for discussion of a development
2224          branch. There are other ways to use the term. So many in
2225          fact, that I feel the term has been cheapened. The popular
2226          window manager <ulink
2227          url="http://www.enlightenment.org">Enlightenment</ulink> has
2228          released <emphasis>nothing but</emphasis> development
2229          releases. Most often, the term is used to describe releases
2230          that are not even to alpha or beta stages though and if I
2231          were to release a pre-alpha release in order to keep interest
2232          in my project live, this is probably how I would have to label
2233          it.
2234         </para>
2235        </listitem>
2236       </varlistentry>
2237
2238      </variablelist>
2239
2240     </para>
2241    </sect3>
2242   </sect2>
2243
2244 <!-- Section2: announcing  -->
2245
2246   <sect2 id="announcing">
2247    <title>Announcing Your Project</title>
2248
2249    <para>
2250     Well, you've done it. You've (at least for the purposes of this
2251     HOWTO) designed, built, and released your free software
2252     project. All that is left is for you to tell the world so they
2253     know to come and try it out and hopefully jump on board with
2254     development. If everything is in order as described above, this
2255     will be a quick and painless process. A quick announcement is all
2256     that it takes to put yourself on the free software communities
2257     radar screen.
2258    </para>
2259
2260    <sect3>
2261     <title>Mailing lists and USENET</title>
2262     <para>
2263      Email is still the way that most people on the Internet get their
2264      information. Its a good idea to send a message announcing your
2265      program to any relevant mailing list you know of and any relevant
2266      USENET discussion group. Karl Fogel recommends that use you
2267      simple subject describing the fact that the message is an
2268      announcement, the name of the program, the version, and a
2269      half-line long description of its functionality. This way, any
2270      interested user or developer will be immediately attracted to
2271      your announcement. Fogel's example looks like:
2272     </para>
2273
2274     <screen>Subject: ANN: aub 1.0, a program to assemble USENET binaries</screen>
2275
2276     <para>
2277      The rest of the email should describe the programs functionality
2278      quickly and concisely in no more than two paragraphs and should
2279      provide links to the projects webpage and direct links to
2280      downloads for those that want it right away.
2281     </para>
2282
2283     <para>
2284      You should repeat this announcement process consistently in the
2285      same locations for each subsequent release.
2286     </para>
2287    </sect3>
2288
2289    <sect3>
2290     <title>freshmeat.net</title>
2291     <para>
2292      Mentioned earlier in <xref linkend="evalwhere">, in today's free
2293      software community, announcements of your project on freshmeat
2294      are almost more important than announcements on mailing list
2295      announcements.
2296     </para>
2297
2298     <para>
2299      Visit the <ulink url="http://freshmeat.net">freshmeat
2300      website</ulink> or their <ulink
2301      url="http://freshmeat.net/add-project/">submit project
2302      page</ulink> to post your project on their site and in their
2303      database. In addition to a large website, freshmeat provides a
2304      daily newsletter that highlights all the days releases and
2305      reaches a huge audience (I skim it every night for any
2306      interesting new releases).
2307     </para>
2308
2309     <para>
2310      Once you've finished this...
2311     </para>
2312
2313     <para>
2314      Congratulations. You've not the maintainer of an active free
2315      software project. Good luck and feel free to stay in touch with
2316      me about your experiences. I'd love to incorporate them into this
2317      HOWTO.
2318     </para>
2319    </sect3>
2320   </sect2>
2321 </sect1>
2322
2323 </article>
2324
2325 <!-- Keep this comment at the end of the file
2326 Local variables:
2327 mode: sgml
2328 sgml-omittag:t
2329 sgml-shorttag:t
2330 sgml-namecase-general:t
2331 sgml-general-insert-case:lower
2332 sgml-minimize-attributes:nil
2333 sgml-always-quote-attributes:t
2334 sgml-indent-step:1
2335 sgml-indent-data:nil
2336 sgml-parent-document:nil
2337 sgml-exposed-tags:nil
2338 sgml-local-catalogs:nil
2339 sgml-local-ecat-files:nil
2340 End:
2341 -->

Benjamin Mako Hill || Want to submit a patch?