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

Benjamin Mako Hill || Want to submit a patch?