d85158d685b630b3e837b5f4fd936ca9b9f2c88e
[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     </address>
18    </affiliation>
19   </author>
20   
21   <revhistory>
22    <revision>
23     <revnumber>v0.2</revnumber>
24     <date>8 April 2001</date>
25     <authorinitials>bch</authorinitials>
26    </revision>
27
28    <revision>
29     <revnumber>v0.01</revnumber>
30     <date>27 March 2001</date>
31     <authorinitials>bch</authorinitials>
32     <revremark>Initial Release</revremark>
33    </revision>
34   </revhistory>
35
36   <abstract>
37    <indexterm>
38     <primary>fswd</primary>
39    </indexterm>
40    
41    <para>
42     This HOWTO is designed for people with experience in programming
43     and some skills in managing a software project but who are new to
44     the world of free software. This document is meant to act as a
45     guide to the non-technical aspects of free software development
46     and was written to be a crash course in the people skills that
47     aren't taught to commercial coders but that can make or break a
48     free software project.
49    </para>
50   </abstract>
51   
52  </artheader>
53
54 <!-- Section1: intro -->
55
56  <sect1 id="intro">
57   <title>Introduction</title>
58   
59   <indexterm>
60    <primary>fswd!introduction</primary>
61   </indexterm>
62   
63   <para>
64    Skimming through freshmeat.net provides mountains of reasons for this
65    HOWTO's existence--the Internet is littered with excellently
66    written and useful programs that have faded away into the universe
67    of free software forgottenness. This dismal scene made me ask
68    myself, "Why?"
69   </para>
70
71   <para>
72    This HOWTO tries to do a lot of thing (probably too many), but it
73    can't answer that question and won't attempt it. What this HOWTO
74    will attempt to do is give your Free Software project a fighting
75    chance--an edge. If you write a piece of crap that no one is
76    interested in, you can read this HOWTO until you can recite it in
77    your sleep and your project will probably fail. Then again, you can
78    write a beautiful, relevant piece of software and follow every
79    instruction in this HOWTO and your software may still not make
80    it. Sometimes life is like that. However, I'll go out a limb and
81    say that if you write a great, relevant pieces of software and
82    ignore the advise in this HOWTO, you'll probably fail <emphasis>
83    more often</emphasis>.
84   </para>
85
86   <para>
87    A lot of the information in this HOWTO is best called common
88    sense. Of course, as any debate on interfaces will prove, what is
89    common sense to some programmers proves totally unintuitive to
90    others. After explaining bits and pieces of this HOWTO to Free
91    Software developers on several occasions, I realized that writing
92    this HOWTO might provide a useful resource and a forum for
93    programmers to share ideas about what has and has not worked for
94    them.
95   </para>
96
97   <para>
98    As anyone involved in any of what seems like an unending parade of
99    ridiculous intellectual property clashes will attest to, a little
100    bit of legalese proves important.
101   </para>
102
103 <!-- Section2: copyright -->
104
105   <sect2 id="copyright">
106    <title>Copyright Information</title>
107
108    <para>
109     This document is copyrighted (c) 2000 Benjamin (Mako) Hill and is
110     distributed under the terms of the Linux Documentation Project
111     (LDP) license, stated below.
112    </para>
113
114    <para>
115     Unless otherwise stated, Linux HOWTO documents are copyrighted by
116     their respective authors. Linux HOWTO documents may be reproduced
117     and distributed in whole or in part, in any medium physical or
118     electronic, as long as this copyright notice is retained on all
119     copies. Commercial redistribution is allowed and encouraged;
120     however, the author would like to be notified of any such
121     distributions.
122    </para>
123
124    <para>
125     All translations, derivative works, or aggregate works
126     incorporating any Linux HOWTO documents must be covered under this
127     copyright notice. That is, you may not produce a derivative work
128     from a HOWTO and impose additional restrictions on its
129     distribution. Exceptions to these rules may be granted under
130     certain conditions; please contact the Linux HOWTO coordinator at
131     the address given below.
132    </para>
133
134    <para>
135     In short, we wish to promote dissemination of this information
136     through as many channels as possible. However, we do wish to
137     retain copyright on the HOWTO documents, and would like to be
138     notified of any plans to redistribute the HOWTOs.
139    </para>
140
141    <para>
142     If you have any questions, please contact
143     <email>linux-howto@metalab.unc.edu</email>
144    </para>
145   </sect2>
146
147 <!-- Section2: disclaimer -->
148
149   <sect2 id="disclaimer">
150    <title>Disclaimer</title>
151
152    <para>
153     No liability for the contents of this documents can be accepted.
154     Use the concepts, examples and other content at your own risk.  As
155     this is a new edition of this document, there may be errors and
156     inaccuracies, that may of course be damaging to your system.
157     Proceed with caution, and although this is highly unlikely, the
158     author(s) do not take any responsibility for that.
159    </para>
160
161    <para>
162     All copyrights are held by their by their respective owners, unless
163     specifically noted otherwise.  Use of a term in this document
164     should not be regarded as affecting the validity of any trademark
165     or service mark.
166    </para>
167
168    <para>
169     Naming of particular products or brands should not be seen 
170     as endorsements.
171    </para>
172
173    <para>
174     You are strongly recommended to take a backup of your system 
175     before major installation and backups at regular intervals.
176    </para>
177   </sect2>
178
179 <!-- Section2: newversions-->
180
181   <sect2 id="newversions">
182    <title>New Versions</title>
183
184     <indexterm>
185      <primary>fswd!news on</primary>
186     </indexterm>
187
188    <para>
189     This is the second pre-release of this HOWTO. It is written to be
190     released to developers for critique and brainstorming and
191     submitted to Hampshire College for academic credit. Please keep in
192     mind that this version of the HOWTO is still in an infant stage
193     and will be revised extensively before it gets publicized widely.
194    </para>
195
196    <para>
197     The latest version number of this document should always be listed
198     on <ulink url="http://people.debian.org/~mako/projects/howto">the projects
199     homepage </ulink> hosted by Debian.
200    </para>
201
202    <para>
203     The newest version of this HOWTO will always be made available at
204     the same website, in a variety of formats:
205    </para>
206
207    <para>
208    <itemizedlist>
209
210     <listitem>
211      <para>
212       <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO/t1.html">HTML</ulink>.
213      </para>
214     </listitem>
215
216
217     <listitem>
218      <para>
219       <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.html">HTML (single page)</ulink>.
220      </para>
221     </listitem>
222
223     <listitem>
224      <para>
225        <ulink URL="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.txt">plain text</ulink>.
226      </para>
227     </listitem>
228
229     <listitem>
230      <para>
231       <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.ps.gz">Compressed postscript</ulink>.
232      </para>
233     </listitem>
234
235     <listitem>
236      <para>
237       <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.sgml.gz">Compressed SGML source</ulink>.
238      </para>
239     </listitem>
240    </itemizedlist>
241    </para>
242   </sect2>
243
244 <!-- Section2: credits -->
245
246   <sect2 id="credits">
247    <title>Credits</title>
248
249    <para>
250     In this version I have the pleasure of acknowledging:
251    </para>
252
253    <para>
254     <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
255     Source Development with CVS</emphasis> published by the Coriolis
256     Open Press. Large parts of his book are available <ulink
257     url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
258     the book are available under the GPL and constitute the best
259     tutorial on CVS I've ever seen. The rest of the book covers, "the
260     challenges and philosophical issues inherent in running an Open
261     Source project using CVS." The book does a good job of covering
262     some of the subjects brought up in this HOWTO and much
263     more. <ulink url="http://cvsbook.red-bean.com">The book's
264     website</ulink> has information on ordering the book and provides
265     several translations of the chapters on CVS. If you are seriously
266     interested in running a Free Software project, you want this
267     book. I tried to mention Fogel in sections of this HOWTO where I
268     knew I was borrowing directly from his ideas. If I missed any, I'm
269     sorry. I'll try and have those fixed in future versions.
270    </para>
271    
272    <para>
273     Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
274     com</email>
275    </para>
276
277    <para>
278     Also providing support material, and inspiration for this HOWTO is
279     Eric S. Raymond for his prolific, consistent, and carefully
280     crafted arguments and Lawrence Lessig for reminding me of the
281     importance of Free Software. Additionaly, I want to thank every
282     user and developer involved with the <ulink
283     url="http://www.debian.org">Debian Project</ulink>. The project
284     has provided me with a home, a place to practice free software
285     advocacy, a place to make a difference, a place to learn from
286     those how have been involved with the movement much longer than I,
287     and proof of a free software project that definitely, definitely
288     works.
289    </para>
290
291    <para>
292     Above all, I want to thank <emphasis>Richard Stallman</emphasis>
293     for his work at the Free Software Foundation and for never giving
294     up. Stallman provides and articulates the philosophical basis that
295     attracts me to free software and that drives me towards writing a
296     document to make sure it succeeds. RMS can always be emailed at
297     <email>rms (at) gnu (dot) org</email>.
298    </para>
299
300   </sect2>
301
302 <!-- Section2: feedback -->
303
304   <sect2 id="feedback">
305    <title>Feedback</title>
306
307    <para>
308     Feedback is always and most certainly welcome for this
309     document. Without your submissions and input, this document
310     wouldn't exist. Do you feel that something is missing? Don't
311     hesitate to contact me to have me write a chapter, section, or
312     subsection or to write one yourself. I want this document to be a
313     product of the Free Software development process that it heralds
314     and I believe that its ultimate success will be rooted in its
315     ability to do this. Please send your additions, comments, and
316     criticisms to the following email address:
317     <email>mako@debian.org</email>.
318    </para>
319    </sect2>
320
321 <!-- Section2: translations -->
322
323   <sect2 id="translations">
324    <title>Translations</title>
325
326    <para>
327     I know that not everyone speaks English. Translations are nice and
328     I'd love for this HOWTO to gain the kind of international reach
329     afforded by translated versions.
330    </para>
331
332    <para>
333     However, this HOWTO is still young and I have to yet to be
334     contacted about a translation so English is all that is currently
335     available. If you would like to help with or do a translation, you
336     will gain my utmost respect and admiration and you'll get to be
337     part of a cool process. If you are at all interested, please don't
338     hesitate to contact me at: <email>mako@debian.org</email>.
339    </para>
340    </sect2>
341  </sect1>
342
343 <!-- Section1: intro: END -->
344
345 <!-- Section1: starting -->
346
347  <sect1 id="starting">
348   <title>Starting a Project</title>
349
350    <indexterm>
351     <primary>fswd!starting</primary>
352    </indexterm>
353   <para>
354    With very little argument, the beginning is the most difficult part
355    of successful free software development. Laying a firm foundation
356    will determine whether your project flourishes or withers away and
357    dies. It is also the subject that is of most immediate interest to
358    anyone reading this document as a tutorial.
359   </para>
360
361   <para>
362    Starting a project involves a dilemma that you as a developer must
363    try and deal with: no potential user for your program is interested
364    in a program that doesn't work while the development process that
365    you want to employ holds involvement of users as imperative.
366   </para>
367
368   <para>
369    It is in these dangerous initial moments that anyone working to
370    start a free software project must try and strike a balance along
371    these lines. One of the most important ways that someone trying to
372    start a project can work towards this balance is by establishing a
373    solid framework for the development process through some of the
374    suggestions mentioned in this section.
375   </para>
376
377
378 <!-- Section2: chooseproject-->
379
380   <sect2 id="chooseproject">
381    <title>Choosing a Project</title>
382
383    <para>
384     If you are reading this document, there's a good chance you
385     already have an idea for a project in mind. Chances are also
386     pretty good that it fills a percieved gap by doing something that
387     no other free software project does or by doing something in a way
388     that is unique enough to necessitate a brand new piece of
389     software.
390    </para>
391
392    <sect3 id=identifyidea>
393     <title>Identify and articulate your idea</title>
394     <para>
395      Eric S. Raymond writes about how free software projects start in
396      his essay, <quote>The Cathedral and the Bazaar,</quote> which
397      comes as required reading for any free software developer. It is
398      available <ulink
399      url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/">online
400      </ulink>.
401     </para>
402
403     <para>
404      In <quote>The Cathedral and the Bazaar,</quote> Raymond tells us
405      that: <quote>every good work of software starts by scratching
406      a developers itch.</quote> Raymond's now widely accepted
407      hypothesis is that new free software programs are written, first
408      and foremost, to solve a specific problem facing the developer.
409     </para>
410
411     <para>
412      If you have an idea for a program in mind, chances are good that
413      it targets a specific problem or <quote>itch</quote> you want to
414      see scratched. <emphasis>This idea is the project.</emphasis>
415      Articulate it clearly. Write it out. Describe the problem you
416      will attack in detail. The success of your project in tackling a
417      particular problem will be tied to your ability to identify that
418      problem clearly early on. Find out exactly what it is that you
419      want your project to do.
420     </para>
421
422     <para>
423      Monty Manley articulates the importance of this initial step in
424      an essay, <quote><ulink
425      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
426      Projects the Open Source Way.</ulink></quote> As the next section
427      will show, there is <emphasis>a lot</emphasis> of work that needs
428      to be done before software is even ready to be coded. Manley
429      says, <quote>Beginning an OSS project properly means that a
430      developer must, first and foremost, avoid writing code too
431      soon!</quote>
432     </para>
433    </sect3>
434
435    <sect3 id=evalulateidea>
436     <title>Evaluate your idea</title>
437
438     <para>
439      In evaluating your idea, you need to first ask yourself a few
440      questions.  This should happen before you move any further
441      through this HOWTO. Ask yourself: <emphasis>Is the free software
442      development model really is the right one for your
443      project?</emphasis>
444     </para>
445
446     <para>
447      Obviously, since the program scratches your itch, you are
448      definitely interested in seeing it implemented in code. But,
449      because one hacker coding in solitude fails to qualify as a free
450      software development effort, you need to ask yourself a second
451      question: <emphasis>Is anybody else interested?</emphasis>
452     </para>
453
454     <para>
455      Sometimes the answer is a simple <quote>no.</quote> If you want
456      to write a set of scripts to sort <emphasis>your</emphasis>
457      <acronym>MP3</acronym> collection on <emphasis>your</emphasis>
458      machine, <emphasis>maybe</emphasis> the free software development
459      model is not the best one to choose. However, if you want to
460      write a set of scripts to sort <emphasis>anyone's</emphasis>
461      <acronym>MP3</acronym>s, a free software project might fill a
462      useful gap.
463     </para>
464
465     <para>
466      Luckily, The Internet is a place so big and so diverse that,
467      chances are, there is someone, somewhere, who shares your
468      interests and how feels the same <quote>itch.</quote> It is the
469      fact that there are so many people with so many similar needs and
470      desires that introduces the third major question: <emphasis>Has
471      somebody already had your idea or a reasonably similar
472      one?</emphasis>
473     </para>
474
475      <sect4 id=evalwhere>
476       <title>Finding Similar Projects</title>
477
478      <para>
479       There are places you can go on the web to try and answer the
480       question above. If you have experience with the free software
481       community, you are probably already familiar with many of these
482       sites. All of the resources listed bellow offer searching of
483       their databases:
484      </para>
485
486      <para>
487      <variablelist>
488        <varlistentry>
489         <term>freshmeat.net</term>
490         <listitem>
491          <para><ulink url="http://freshmeat.net">freshmeat.net</ulink>
492          describes itself as, <quote>the Web's largest index of Linux
493          and Open Source software</quote> and its reputation along
494          these lines is totally unparalleled and unquestioned. If you
495          can't find it on freshmeat, its doubtful that you (or anyone
496          else) will find it at all.</para>
497         </listitem>
498        </varlistentry>
499
500        <varlistentry>
501         <term>Slashdot</term>
502         <listitem>
503          <para><ulink url="http://slashdot.org">Slashdot</ulink>
504          provides <quote>News for Nerds: Stuff that Matters,</quote>
505          which usually includes discussion of free software, open
506          source, technology, and geek culture new and events. It is
507          not unusual for an particularly sexy development effort to be
508          announced here so it definitely worth checking.</para>
509         </listitem>
510        </varlistentry>
511
512        <varlistentry>
513         <term>SourceForge</term>
514         <listitem>
515          <para><ulink url="http://sourceforge.net">SourceForge</ulink>
516          houses and facilitates a growing number of open source and
517          free software projects. It is also quickly becoming a nexus
518          and an necessary stop for free software
519          developers. SourceForge's <ulink
520          url="http://sourceforge.net/softwaremap/trove_list.php">software
521          map</ulink> and <ulink url="http://sourceforge.net/new/"> new
522          release</ulink> pages should be necessary stops before
523          embarking on a new free software project. SourceForge also
524          provides a at <ulink
525          url="http://sourceforge.net/snippet/">Code Snippet
526          Library</ulink> which contains useful reusable chunks of code
527          in an array of languages which can come in useful in any
528          project.</para>
529         </listitem>
530        </varlistentry>
531
532        <varlistentry>
533         <term>Google and Google's Linux Search</term>
534         <listitem>
535          <para><ulink url="http://www.google.com">Google</ulink> and
536          <ulink url="http://www.google.com/linux"> Google's Linux
537          Search</ulink>, provide powerful web searches that may reveal
538          people working on similar projects. It is not a catalog of
539          software or news like freshmeat or Slashdot, but it is worth
540          checking to make sure you aren't pouring your effort into a
541          redundant project.</para>
542         </listitem>
543        </varlistentry>
544
545       </variablelist>
546      </para>
547     </sect4>
548
549     <sect4 id=evalhow>
550      <title>Deciding to Proceed</title>
551      <para>
552       Once you have successfully charted the terrain and have an idea
553       about what kinds of similar free software projects exist, every
554       developer needs to decide whether to proceed with their own
555       project. It is rare that a new project seeks to accomplish a
556       goal that is not at all similar or related to the goal of
557       another project. Anyone starting a new project needs to ask
558       themselves: <quote>Will the new project be duplicating work done
559       by another project? Will the new project be competing for
560       developers with an existing project? Can the goals of the new
561       project be accomplished by adding functionality to an existing
562       project?</quote>
563      </para>
564
565      <para>
566       If the answer to any of these questions is <quote>yes,</quote>
567       try to contact the developer of the existing project(s) in
568       question and see if he or she might be willing to collaborate
569       with you.
570      </para>
571
572      <para>
573       For many developers this may be the single most difficult aspect
574       of free software development but it is an essential one. It is
575       easy to become fired up by an idea and be caught up in the
576       momentum and excitement of a new project. It is often extremely
577       difficult to do but, it is important that any free software
578       developer remember that the best interests of the free software
579       community and the quickest way to accomplish your own project's
580       goals and the goals of similar projects can often be
581       accomplished by <emphasis>not</emphasis> starting a new
582       development effort.
583      </para>
584
585     </sect4>
586    </sect3>
587   </sect2>
588
589 <!-- Section2: naming-->
590
591   <sect2 id="naming">
592    <title>Naming your project</title>
593
594    <para>
595     While there are plenty of projects that fail with descriptive
596     names and plenty that succeed without them, I think naming your
597     project is worth giving a bit of thought. Leslie Orchard tackles
598     this issue in an <ulink
599     url="http://www.advogato.org/article/67.html">Advogato
600     article</ulink>. His article is short and definately worth looking
601     over quickly.
602    </para>
603
604    <para>
605     The synopsis is that Orchard recommends you pick a name where,
606     after hearing the name, many users or developers will both:
607    </para>
608
609    <para>
610     <itemizedlist>
611      <listitem>
612       <para>Know what the project does.</para>
613      </listitem>
614      <listitem>
615       <para>Remember it tomorrow.</para>
616      </listitem>
617     </itemizedlist>
618    </para>
619
620    <para>
621     Humorously, Orchard's project, <quote>Iajitsu,</quote> does
622     neither. It is probably unrelated that development has effectively
623     frozen since the article was written.
624    </para>
625
626    <para>
627     He makes a good point though. There are companies whose only job
628     is to make names for pieces of software. They make
629     <emphasis>ridiculous</emphasis> amount of money doing it and are
630     supposedly worth it. While you probably can't aford a company like
631     this, you can afford to learn from their existance and think a
632     little bit about the name you are giving your project because it
633     <emphasis>does</emphasis> matter.
634    </para>
635
636    <para>
637     If there is a name you really want but it doesn't fit Orchard's
638     criteria, you can still go ahead. I thought <quote>gnubile</quote>
639     was one of the best I'd heard for a free software project ever and
640     I still talk about it long after I've stopped using the
641     program. However, if you can flexible on the subject, listen to
642     Orchard's advice. It might help you.
643    </para>
644   </sect2>
645
646 <!-- Section2: licensing-->
647
648   <sect2 id="licensing">
649    <title>Licensing your Software</title>
650    
651    <para>
652     On one (somewhat simplistic) level, the difference between a piece
653     of free software and a piece of propriety software is the
654     license. A license helps you as the developer by protecting your
655     legal rights to have your software distributed under your terms
656     and helps demonstrate to those who wish to help you or your
657     project that they are encouraged to join.
658    </para>
659    
660    <sect3 id="chooselicense">
661     <title>Choosing a license</title>
662
663     <para>
664      Any discussion of licenses is also sure to generate at least a
665      small flame war as there are strong feelings that some free
666      software licenses are better than others. This discussion also
667      brings up the question of <quote>Open Source Software</quote> and
668      the debate over the terms <quote>Open Source Software</quote> and
669      <quote>Free Software</quote>. However, because I've written the
670      Free Software Development HOWTO and not the Open Source
671      Development HOWTO, my own allegiances in this argument are in the
672      open.
673     </para>
674
675     <para>
676      In attempting to reach a middle ground through diplomacy without
677      sacrificing my own philosophy, I will recommend picking any
678      license that conforms to the <ulink
679      url="http://www.debian.org/social_contract">Debian Free Software
680      Guidelines</ulink>. Originally compiled by the Debian project
681      under Bruce Perens, the <acronym>DFSG</acronym> forms the first
682      version of the <ulink
683      url="http://www.opensource.org/docs/definition_plain.html">Open
684      Source Definition.</ulink> Examples of free licenses given by the
685      <acronym>DFSG</acronym> are the <acronym>GPL</acronym>, the
686      <acronym>BSD</acronym>, and the Artistic License.
687     </para>
688
689     <para>
690      Conforming to the definition of free software offered by Richard
691      Stallman in <ulink
692      url="http://www.gnu.org/philosophy/free-sw.html"><quote>The Free
693      Software Definition</quote></ulink>, any of these licenses will
694      uphold, <quote>users' freedom to run, copy, distribute, study,
695      change and improve the software.</quote> There are plenty of
696      other licenses that also conform to the <acronym>DFSG</acronym>
697      but sticking with a more well-known license will offer the advantage
698      of immediate recognition and understanding.
699     </para>
700
701     <para>
702      In attempting a more in-depth analysis, I agree with Karl Fogel's
703      description of licenses as falling into two groups: those that
704      are the <acronym>GPL</acronym> and those that are not the
705      <acronym>GPL</acronym>.
706     </para>
707
708     <para>
709      Personally, I license all my software under the
710      <acronym>GPL</acronym>. Created and protected by the Free
711      Software Foundation and the GNU Project, the
712      <acronym>GPL</acronym> is the license for the Linux kernel,
713      GNOME, Emacs, and the vast majority of GNU/Linux software. It's
714      the obvious choice but I believe it is a good one. Any BSD
715      fanatic will urge you to remember that there is a viral aspect to
716      the <acronym>GPL</acronym> that prevents the mixture of
717      <acronym>GPL</acronym>'ed code with non-<acronym>GPL</acronym>'ed
718      code. To many people (myself included), this is a benefit, but to
719      some, it is a major drawback.
720     </para>
721
722     <para>
723      The three major licenses can be found at the following locations:
724     </para>
725
726     <para>
727      <itemizedlist>
728       <listitem>
729        <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
730        General Public License</ulink></para>
731       </listitem>
732       <listitem>
733        <para><ulink url="http://www.debian.org/misc/bsd.license">The
734        BSD License</ulink></para>
735       </listitem>
736       <listitem>
737        <para><ulink
738        url="http://language.perl.com/misc/Artistic.html">The Artistic
739        License</ulink></para>
740       </listitem>
741      </itemizedlist>
742     </para>
743
744     <para>
745      <emphasis>In any case, please read through any license before
746      your release your software under it. As the primary developer,
747      you can't afford any license surprises.</emphasis>
748     </para>
749    </sect3>
750
751    <sect3 id="licensechoose">
752     <title>The mechanics of licensing</title>
753
754     <para>
755      The text of the <acronym>GPL</acronym> offers <ulink
756      url="http://www.gnu.org/copyleft/gpl.html#SEC4">a good
757      description</ulink> of mechanics of applying a license to a piece
758      of software. My quick checklist for applying a license includes:
759     </para>
760
761     <para>
762      <itemizedlist>
763      
764       <listitem>
765        <para>If at all possible, attach and distribute a full copy of
766        the license with the source and binary by including a separate
767        file.</para>
768       </listitem>
769
770       <listitem>
771        <para>At the top of each source file in your program, attach a
772        notice of copyright and include information on where the full
773        license can be found. The <acronym>GPL</acronym> recommends
774        that each file begin with:</para>
775
776        <screen>
777 <emphasis>one line to give the program's name and an idea of what it does.</emphasis>
778 Copyright (C) yyyy  name of author
779
780 This program is free software; you can redistribute it and/or
781 modify it under the terms of the GNU General Public License
782 as published by the Free Software Foundation; either version 2
783 of the License, or (at your option) any later version.
784
785 This program is distributed in the hope that it will be useful,
786 but WITHOUT ANY WARRANTY; without even the implied warranty of
787 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
788 GNU General Public License for more details.
789
790 You should have received a copy of the GNU General Public License
791 along with this program; if not, write to the Free Software
792 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
793        </screen>
794
795        <para>
796         The <acronym>GPL</acronym> goes on to recommend attaching
797         information on methods for contacting you (the author) via
798         email or physical mail.
799       </para>
800       </listitem>
801
802       <listitem>
803        <para>
804         The <acronym>GPL</acronym> continues and suggests that if your
805         program runs in an interactive mode, you should write the
806         program to output a notice each time it enters interactive
807         mode that includes a message like this one that points to full
808         information about the programs license:
809        </para>
810
811        <screen>
812 Gnomovision version 69, Copyright (C) year name of author
813 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
814 type `show w'.  This is free software, and you are welcome
815 to redistribute it under certain conditions; type `show c' 
816 for details.
817        </screen>
818       </listitem>
819
820       <listitem>
821        <para>Finally, it might be helpful to include a
822        <quote>copyright disclaimer</quote> from an employer or a
823        school if you work as a programmer or if it seems like your
824        employer or school might be able to make an argument for
825        ownership of your code later on. These aren't often needed but
826        there are plenty of free software developers who have gotten
827        into trouble and wish they'd asked for one.</para>
828       </listitem>
829
830      </itemizedlist>
831     </para>    
832    </sect3>
833
834    <sect3 id="licensewarning">
835     <title>Final license warning</title>
836
837     <para>
838      Please, please, please, place your software under
839      <emphasis>some</emphasis> license. It may not seem important, and
840      to you it may not be, but licenses <emphasis>are</emphasis>
841      important. For a piece of software to be included in the Debian
842      GNU/Linux distribution, it must have a license that fits the
843      <ulink url="http://www.debian.org/social_contract">Debian Free
844      Software Guidelines</ulink>. If your software has no license, it
845      can not be distributed as a package in Debian until you
846      re-release it under a free license. Please save yourself and
847      others trouble by releasing the first version of your software
848      with a clear license.
849     </para>
850
851    </sect3>
852
853  </sect2>
854
855 <!-- Section2: chooseversioning-->
856
857   <sect2 id="chooseversioning">
858    <title>Choosing a Method of Version Numbering</title>
859
860    <para>
861     <emphasis>The most important thing about a system of version
862     numbering is that there is one.</emphasis> It may seem pedantic to
863     emphasize this point but you'd be surprised at the number of
864     scripts and small programs that pop up without any version number
865     at all.
866    </para>
867
868    <para>
869     <emphasis>The second most important thing about a system of
870     numbering is that the numbers always go up.</emphasis> Automatic
871     version tracking systems and people's sense of order in the
872     universe will fall apart if version numbers don't rise. It doesn't
873     <emphasis>really</emphasis> matter if 2.1 is a big jump and
874     2.0.005 is a small jump but it does matter that 2.1 is more recent
875     than 2.0.005.
876    </para>
877
878    <para>
879     Follow these two simple rules and you will not go (too)
880     wrong. Beyond this, the most common technique seems to be the
881     <quote>major level,</quote> <quote>minor level,</quote>
882     <quote>patch level</quote> version numbering scheme. Whether you
883     are familiar with the name or not, you interact with it all the
884     time. The first number is the major number and it signifies major
885     changes or rewrites. The second number is the minor number and it
886     represents added or tweaked functionality on top of a largely
887     coherant structure. The third number is the patch number and it
888     usually will only refer to releases fixing bugs.
889    </para>
890
891    <para>
892     The widespread use of this scheme is why I know the nature and
893     relative degree in the differences between a 2.4.12 release of the
894     Linux kernel and a 2.4.11, 2.2.12, and 1.2.12 without knowning
895     anything about any of the releases.
896    </para>
897
898    <para>
899     You can bend or break these rules, and people do. But beware, if
900     you choose to, someone will get annoyed, assume you don't know,
901     and try and educate you, probably not nicely. I always follow this
902     method and I implore you to do so as well.
903    </para>
904    
905    <para>
906     There are several version numbering systems that are well known,
907     useful, and that might be worth looking into before you release
908     your first version.
909    </para>
910
911    <variablelist>
912     <varlistentry>
913      <term>Linux kernel version numbering:</term>
914      <listitem>
915       <para>The Linux kernel uses a versioning system where any odd
916       minor version number refers to an development or testing release
917       and any even minor version number refers to a stable
918       version. Think about it for a second. Under this system, 2.1 and
919       2.3 kernels were and always will be development or testing
920       kernels and 2.0, 2.2. and 2.4 kernels are all production code
921       with a higher degree of stability and more testing.
922      </para>
923
924       <para>
925        Whether you plan on having a split development model (as
926        described in <xref linkend="branches">) or only one version
927        released at a time, my experience with several free software
928        projects and with the Debian project has taught me that use of
929        Linux's version numbering system is worth taking into
930        consideration. In Debian, <emphasis>all</emphasis> minor
931        versions are stable distributions (2.0, 2.1, etc). However,
932        many people assume that 2.1 is an unstable or development
933        version and continue to use an older version until they get so
934        frustrated with the lack of development progress that they
935        complain and figure the system out. If you never release an odd
936        minor version but only release even ones, nobody is hurt, and
937        less people are confused. It's an idea worth taking into
938        consideration.
939       </para>
940      </listitem>
941     </varlistentry>
942
943     <varlistentry>
944      <term>Wine version numbering:</term>
945      <listitem>
946       <para>Because of the unusual nature of wine's development where
947       the not-emulator is constantly improving but not working towards
948       any immediately achievable goal, wine is released every three
949       weeks. Wine does this by labeling their releases in <quote>Year
950       Month Day</quote> format where each release might be labeled
951       <quote>wine-XXXXXXXX</quote> where the version from January 04,
952       2000 would be <quote>wine-20000104</quote>. For certain
953       projects, <quote>Year Month Day</quote> format can make a lot of
954       sense.
955       </para>
956      </listitem>
957     </varlistentry>
958
959     <varlistentry>
960      <term>Mozilla milestones:</term>
961      <listitem>
962       <para>When one considers Netscape 6 and vendor versions, the
963       mozilla's project development structure is one of the most
964       complex free software models available. The project's version
965       numbering has reflected the unique situation in which it is
966       developed.
967       </para>
968
969       <para>
970        Mozilla's version numbering structure has historically been
971        made up of milestones. From the beginning of the mozilla
972        project, the goals of the project in the order and degree to
973        which they were to be achieved were charted out on a series of
974        <ulink url="http://www.mozilla.org/roadmap.html">road
975        maps</ulink>. Major points and achievements along these
976        road-maps were marked as milestones. Therefore, although
977        mozilla was built and distributed nightly as <quote>nightly
978        builds,</quote> on a day when the goals of a milestone on the
979        road-map had been reached, that particular build was marked as
980        a <quote>milestone release.</quote>
981       </para>
982
983       <para>
984        While I haven't seen this method employed in any other projects
985        to date, I like the idea and think that it might have value in
986        any testing or development branch of a large application under
987        heavy development.
988       </para>
989      </listitem>
990     </varlistentry>
991
992    </variablelist>
993   </sect2>
994
995 <!-- Section2: documentation-->
996
997   <sect2 id="documentation">
998    <title>Documentation</title>
999
1000    <para>
1001     A huge number of otherwise fantastic free software applications
1002     have withered and died because their author was the only person
1003     who knew how to use them fully. Even if your program is written
1004     primarily for a techno-savvy group of users, documentation is
1005     helpful and even necessary for the survival of your project. You
1006     will learn later in <xref linkend="releasing"> that you should
1007     always release something that is usable. <emphasis>A piece of
1008     software without documentation is not usable.</emphasis>
1009    </para>
1010
1011    <para>
1012     There are lots of different people you should document for and
1013     there are lots of ways to document your project. <emphasis>The
1014     importance of documentation in source code to help facilitate
1015     development by a large community is vital</emphasis> but it falls
1016     outside the scope of this HOWTO. This being the case, this section
1017     deals with useful tactics for user-directed documentation.
1018    </para>
1019
1020    <para>
1021     A combination of tradition and necessity has resulted in a
1022     semi-regular system of documentation in most free software
1023     projects that is worth following. Both users and developers expect
1024     to be able to get documentation in several ways and it's essential
1025     that you provide the information they are seeking in a form they
1026     can read if your project is ever going to get off the
1027     ground. People have come to expect:
1028    </para>
1029
1030    <sect3>
1031     <title>Man pages</title> 
1032
1033     <para>Your users will want to be able to type <quote>man
1034     yourprojectname</quote> end up with a nicely formatted man page
1035     highlighting the basic use of your application. Make sure that
1036     before you release your program, you've planned for this.
1037     </para>
1038
1039     <para>
1040      Man pages are not difficult to write. There is excellent
1041      documentation on the man page writing process available through
1042      the <quote>The Linux Man-Page-HOWTO</quote> which is available
1043      through the Linux Documentation project <acronym>(LDP)</acronym>
1044      and is written by Jens Schweikhardt. It is available <ulink
1045      url="http://www.schweikhardt.net/man_page_howto.html">from
1046      Schweikhardt's site</ulink> or <ulink
1047      url="http://www.linuxdoc.org/HOWTO/mini/Man-Page.html">from the
1048      <acronym>LDP</acronym></ulink>.
1049     </para>
1050
1051     <para>
1052      It is also possible to write man pages using DocBook
1053      SGML. Because man pages are so simple and the DocBook method
1054      relatively new, I have not been able to follow this up but would
1055      love help from anyone who can give me more information on how
1056      exactly how this is done.
1057     </para>
1058    </sect3>
1059
1060    <sect3>
1061     <title>Command line accessible documentation</title>
1062
1063     <para>
1064      Most users will expect some basic amount of documentation to be
1065      easily available from the command line. For few programs should
1066      this type of documentation extend for more than one screen (24 or
1067      25 lines) but it should cover the basic usage, a brief (one or
1068      two sentence) description of the program, a list of the commands
1069      with explanations, as well as all the major options (also with
1070      explanations), plus a pointer to more in-depth documentation for
1071      those who need it. The command line documentation for Debian's
1072      apt-get serves as an excellent example and a useful model:
1073     </para>
1074
1075     <screen>
1076 apt 0.3.19 for i386 compiled on May 12 2000  21:17:27
1077 Usage: apt-get [options] command
1078        apt-get [options] install pkg1 [pkg2 ...]
1079
1080 apt-get is a simple command line interface for downloading and
1081 installing packages. The most frequently used commands are update
1082 and install.
1083
1084 Commands:
1085    update - Retrieve new lists of packages
1086    upgrade - Perform an upgrade
1087    install - Install new packages (pkg is libc6 not libc6.deb)
1088    remove - Remove packages
1089    source - Download source archives
1090    dist-upgrade - Distribution upgrade, see apt-get(8)
1091    dselect-upgrade - Follow dselect selections
1092    clean - Erase downloaded archive files
1093    autoclean - Erase old downloaded archive files
1094    check - Verify that there are no broken dependencies
1095
1096 Options:
1097   -h  This help text.
1098   -q  Loggable output - no progress indicator
1099   -qq No output except for errors
1100   -d  Download only - do NOT install or unpack archives
1101   -s  No-act. Perform ordering simulation
1102   -y  Assume Yes to all queries and do not prompt
1103   -f  Attempt to continue if the integrity check fails
1104   -m  Attempt to continue if archives are unlocatable
1105   -u  Show a list of upgraded packages as well
1106   -b  Build the source package after fetching it
1107   -c=? Read this configuration file
1108   -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp
1109 See the apt-get(8), sources.list(5) and apt.conf(5) manual
1110 pages for more information and options.
1111     </screen>
1112
1113     <para>
1114      It has become a GNU convention to make this type of information
1115      accessible with the <quote>-h</quote> and the
1116      <quote>--help</quote> options. Most GNU/Linux users will expect
1117      to be able to retrieve basic documentation these ways so if you
1118      choose to use different methods, be prepared for the flames and
1119      fallout that may result.
1120     </para>
1121    </sect3>
1122
1123    <sect3>
1124     <title>Files users will expect</title>
1125     <para>
1126      In addition to man pages and command-line help, there are certain
1127      files where people will look for documentation, especially in any
1128      package containing source code. In a source distribution, most of
1129      these files can be stored in a the root directory of the source
1130      distribution or in a subdirectory of the root called
1131      <quote>doc</quote> or <quote>Documentation.</quote> Common files
1132      in these places include:
1133     </para>
1134
1135     <para>
1136      <variablelist>
1137       <varlistentry>
1138        <term>README or Readme</term>
1139
1140        <listitem>
1141         <para>A document containing all the basic installation,
1142         compilation, and even basic use instructions that make up the
1143         bare minimum information needed to get the program up and
1144         running. A README is not your chance to be verbose but should
1145         be concise and effective. An ideal README is at least 30 lines
1146         long and more no more than 250.</para>
1147        </listitem>
1148
1149       </varlistentry>
1150       <varlistentry>
1151        <term>INSTALL or Install</term>
1152
1153        <listitem>
1154         <para>The INSTALL file should be much shorter than the README
1155         file and should quickly and concisely describe how to build
1156         and install the program. Usually an INSTALL file simply
1157         instructs the user to run <quote>./configure; make; make
1158         install</quote> and touches on any unusual options or actions
1159         that may be necessary. For most relatively standard install
1160         procedures and for most programs, INSTALL files are as short
1161         as possible are rarely over 100 lines.</para>
1162        </listitem>
1163
1164       </varlistentry>
1165       <varlistentry>
1166        <term>CHANGELOG, Changelog, ChangeLog, or changelog</term>
1167
1168        <listitem>
1169         <para>A CHANGELOG is a simple file that every well-managed
1170         free software project should include. A CHANGELOG is simple
1171         the file that, as its name implies, logs or documents the
1172         changes you make to your program. The most simple way to
1173         maintain a CHANGELOG is to simply keep a file with the source
1174         code for your program and add a section to the top of the
1175         CHANGELOG with each release describing what has been, changed,
1176         fixed, or added to the program. It's a good idea to post the
1177         CHANGELOG onto the website as well because it can help people
1178         decide whether they want or need to upgrade to a newer version
1179         or wait for a more significant improvement.</para>
1180        </listitem>
1181
1182       </varlistentry>
1183       <varlistentry>
1184        <term>NEWS</term>
1185
1186        <listitem>
1187         <para>A NEWS file and a ChangeLog are similar. Unlike a
1188         CHANGELOG, a NEWS file is not typically updated with new
1189         versions. Whenever new features are added, the developer
1190         responisble will make a note in the NEWS file. NEWS files
1191         should not have to be changed before a release (they should be
1192         kept up to date all along) but it's usually a good idea to
1193         check first anyway because often developers just forget to
1194         keep them as current as they should.</para>
1195        </listitem>
1196
1197       </varlistentry>
1198       <varlistentry>
1199        <term><acronym>FAQ</acronym></term>
1200
1201        <listitem>
1202         <para>For those of you that don't already know,
1203         <acronym>FAQ</acronym> stands for Frequently Asked Questions
1204         and a FAQ is a collection of exactly that. FAQs are not
1205         difficult to make. Simply make a policy that if you are asked
1206         a question or see a question on a mailing list two or more
1207         times, add the question (and its answer) to your FAQ. FAQs are
1208         more optional than the files listed above but they can save
1209         your time, increase usability, and decrease headaches on all
1210         sides.</para>
1211        </listitem>
1212
1213       </varlistentry>
1214      </variablelist>
1215     </para>
1216    </sect3>
1217
1218    <sect3>
1219     <title>Website</title> 
1220     <para>
1221      It's only indirectly an issue of documentation but a good website
1222      is quickly becoming an essential part of any free software
1223      project. Your website should provide access to your documentation
1224      (in <acronym>HTML</acronym> if possible). It should also include
1225      a section for news and events around your program and a section
1226      that details the process of getting involved with development or
1227      testing and make an open invitation. It should also supply links
1228      to any mailing lists, similar websites, and provide a direct link
1229      to all the available ways of downloading your software.
1230     </para>
1231    </sect3>
1232
1233    <sect3>
1234     <title>Other documentation hints</title>
1235
1236     <para>
1237      All your documentation should be in plaintext, or, in cases where
1238      it is on your website primarily, in HTML. Everyone can cat a
1239      file, everyone has a pager, (almost) everyone can render
1240      HTML. <emphasis>You are welcome to distribute information in PDF,
1241      PostScript, RTF, or any number of other widely used formats but
1242      this information must also be available in plaintext or HTML or
1243      people will be very angry at you.</emphasis>
1244     </para>
1245
1246     <para>
1247      It doesn't hurt to distribute any documentation for your program
1248      from your website (FAQs etc) with your program. Don't hesitate
1249      throw any of this in the program's tarball. If people don't need
1250      it, they will delete it. I can repeat it over and over:
1251      <emphasis>Too much documentation is not a sin.</emphasis>
1252     </para>
1253    </sect3>
1254   </sect2>
1255
1256 <!-- Section2: presentation -->
1257
1258   <sect2 id="presentation">
1259    <title>Other Presentation Issues</title>
1260    <para>
1261     Many of the remaining issues surrounding the creation of a new
1262     free software program fall under what most people describe as
1263     common sense issues. Its often said that software engineering is
1264     90 percent common sense combined with 10 percent specialized
1265     knowledge. Still, they are worth noting briefly in hopes that they
1266     may remind a developer of something they may have forgotten.
1267    </para>
1268
1269    <sect3>
1270     <title>Package formats</title>
1271     <para>
1272      Package formats may differ depending on the system you are
1273      developing for. For windows based software, Zip archives (.zip)
1274      usually serve as the package format of choice. If you are
1275      developing for GNU/Linux, *BSD, or any UN*X, make sure that your
1276      source code is always available in tar'ed and gzip'ed format
1277      (.tar.gz). UNIX compress (.Z) has gone out of style and
1278      usefulness and faster computers have brought bzip2 (.bz2) into
1279      the spot-light as a more effective compression medium. I now make
1280      all my releases available in both gzip'ed and bzip2'ed tarballs.
1281     </para>
1282
1283     <para>
1284      Binary packages should always be distribution specific. If you
1285      can build binary packages against a current version of a major
1286      distribution, you will only make your users happy. Try to foster
1287      relationships with users or developers of large distributiosn to
1288      develop a system for the consistent creation of binary
1289      packages. It's often a good idea to provide RedHat
1290      <acronym>RPM</acronym>'s (.rpm), Debian deb's (.deb) and source
1291      <acronym>RPM</acronym>'s <acronym>SRPM</acronym>'s if
1292      possible. Remember: <emphasis>While these binaries packages are
1293      nice, getting the source packaged and released should always be
1294      your priority. Your users or fellow developers can and will do
1295      the the binary packages for you.</emphasis>
1296     </para>
1297    </sect3>
1298
1299    <sect3>
1300     <title>Version control systems</title>
1301
1302     <para>
1303      A version control system can make a lot of these problems of
1304      packaging (and a lot of other problems mentioned in this HOWTO)
1305      less problematic. If you are using *NIX, CVS is your best bet. I
1306      recommend Karl Fogel's book on the subject (and the <ulink
1307      url="http://cvsbook.red-bean.com/">posted HTML version</ulink>)
1308      wholeheartedly.
1309     </para>
1310
1311     <para>
1312      CVS or not, you should probably invest some time into learning
1313      about a version control system because it provides an automated
1314      way of solving many of the problems described by this HOWTO.  I
1315      am not aware of any free version control systems for Windows or
1316      MacOS but I know that CVS clients exist for both
1317      platforms. Websites like <ulink
1318      url="http://sourceforge.net">SourceForge</ulink> do a great job
1319      as well with a nice, easy-to-use web interface to CVS.
1320     </para>
1321
1322     <para>
1323      I'd love to devote more space in this HOWTO to CVS because I love
1324      it (I even use CVS to keep versions straight on this HOWTO!) but
1325      I think it falls outside the scope of this document and should
1326      (already has) its own HOWTO.
1327     </para>
1328
1329    </sect3>
1330
1331    <sect3>
1332     <title>Useful tidbits and presentation hints</title>
1333
1334     <para>
1335      Other useful hints include:
1336     </para>
1337
1338     <para>
1339      <itemizedlist>
1340
1341       <listitem>
1342        <para>
1343         <emphasis>Make sure that your program can always be found in a
1344         single location.</emphasis> Often this means that you have a
1345         single directory accessible via <acronym>FTP</acronym> or the
1346         web where the newest version can be quickly recognized. One
1347         effective technique is a provide a symlink called
1348         <quote>yourprojectname-latest</quote> that is always pointing
1349         to the most recent released or development version of your
1350         free software application. Keep in mind that this location
1351         will recieve many requests for downloads around releases so
1352         make sure that the server you choose has adequate bandwidth.
1353        </para>
1354       </listitem>
1355
1356       <listitem>
1357        <para>
1358         <emphasis>Make sure that there is a consistent email address
1359         for bug reports.</emphasis> It's usually a good idea to make
1360         this something that is NOT your primary email address like
1361         yourprojectname@host or yourprojectname-bugs@host. This way,
1362         if you ever decide to hand over maintainership or if your
1363         email address changes, you simply need to change where this
1364         email address forwards. It also will allow for more than one
1365         person to deal with the influx of mail that is created if your
1366         project becomes as huge as you hope it will.
1367        </para>
1368       </listitem>
1369
1370      </itemizedlist>
1371     </para>
1372    </sect3>
1373   </sect2>
1374  </sect1>
1375
1376 <!-- Section1: starting: END -->
1377
1378 <!-- Section1: developers -->
1379
1380  <sect1 id="developers">
1381   <title>Maintaining a Project: Interacting with Developers</title>
1382   <indexterm>
1383    <primary>fswd!developers</primary>
1384   </indexterm>
1385
1386   <para>
1387    Once you have gotten your project started, you have overcome the
1388    most difficult hurdles in the development process of your
1389    program. Laying a firm foundation is essential, but the development
1390    process itself is equally important and provides just as many
1391    opportunities for failure. In the next two sections, I will
1392    describe running a project by discussing how to maintain a
1393    development effort through interactions with developers and with
1394    users.
1395   </para>
1396
1397   <para>
1398    In releasing your program, your program becomes free software. This
1399    transition is more than just a larger user base. By releasing your
1400    program as free software, <emphasis>your</emphasis> software
1401    becomes the <emphasis>free software community's</emphasis>
1402    software. The direction of your software's development will be
1403    reshaped, redirected, and fully determined by your users and, to a
1404    larger extent, by other developers in the community.
1405   </para>
1406
1407   <para>
1408    The major difference between free software development and
1409    propriety software development is the developer base. As the leader
1410    of a free software project, you need to attract and keep developers
1411    in a way that leaders of proprietary software projects simply don't
1412    have to worry about. <emphasis>As the person leading development of
1413    a free software project, you must harness the work of fellow
1414    developers by making responsible decisions and by responsibly
1415    choosing not to make decisions. You have to direct developers
1416    without being overbearing or bossy. You need to strive to earn
1417    respect and never forget to give it out.</emphasis>
1418   </para>
1419
1420 <!-- Section2: delegation  -->
1421
1422   <sect2 id="delegation">
1423    <title>Delegating Work</title>
1424
1425    <para>
1426     By now, you've hypothetically followed me through the early
1427     programming of a piece of software, the creation of a website and
1428     system of documentation, and we've gone ahead and (as will be
1429     discussed in <xref linkend="releasing">) released it to the rest
1430     of the world. Times passes, and if things go well, people become
1431     interested and want to help. The patches begin flowing in.
1432    </para>
1433
1434    <para>
1435     <emphasis>Like the parent of any child who grows up, it's now time
1436     to wince, smile and do most difficult thing in any parents
1437     life: It's time to let go.</emphasis>
1438    </para>
1439
1440    <para>
1441     Delegation is the political way of describing this process of
1442     <quote>letting go.</quote> It is the process of handing some of
1443     the responsibility and power over your project to other
1444     responsible and involved developers. It is difficult for anyone
1445     who has invested a large deal of time and energy into a project
1446     but it essential for the growth of any free software project. One
1447     person can only do so much. A free software project is nothing
1448     without the involvement of <emphasis>a group</emphasis> of
1449     developers. A group of developers can only be maintained through
1450     respectful and responsible leadership and delegation.
1451    </para>
1452
1453    <para>
1454     As your project progresses, you will notice people who are putting
1455     significant amounts of time and effort into your project. These
1456     will be the people submitting the most patches, posting most on
1457     the mailing lists, and engaging in long email discussions. It is
1458     your responsibility to contact these people and to try and shift
1459     some of the power and responsibility of your position as the
1460     project's maintainer onto them (if they want it). There are
1461     several easy ways you can do this:
1462    </para>
1463
1464    <para>
1465     In a bit of a disclaimer, delegation need not mean rule by
1466     comittee. In many cases it does and this has been proven to
1467     work. In other cases this has created problems. <ulink
1468     url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
1469     Projects the Open Source Way</ulink> argues that <quote>OSS
1470     projects do best when one person is the clear leader of a team and
1471     makes the big decisions (design changes, release dates, and so
1472     on).</quote> I think this often true but would urge developers to
1473     consider the ideas that the project leader need not be the
1474     project's founder and that these important powers need not all rest
1475     with one person but that a release manager may be different than a
1476     lead developer. These situations are tricky politically so
1477     be careful and make sure it's necessary before you go around
1478     empowering people.
1479    </para>
1480
1481    <sect3>
1482     <title>How to delegate</title>
1483  
1484     <para>
1485      You may find that other developers seem even more experienced or
1486      knowledgeable than you. Your job as a maintainer does not mean
1487      you have to be the best or the brightest. It means you
1488      are responsible for showing good judgment and for
1489      recognizing which solutions are maintainable and which are not. 
1490     </para>
1491     <para>
1492      Like anything, its easier to watch others delegate than to do it
1493      yourself. In a sentence: <emphasis>Keep an eye out for other
1494      qualified developers who show an interest and sustained
1495      involvement with your project and try and shift responsibility
1496      towards them.</emphasis> The following ideas might be good places
1497      to start or good sources of inspiration:
1498     </para>
1499  
1500     <sect4>
1501      <title>Allow a larger group of people to have write access to your CVS
1502      repository and make real efforts towards rule by a
1503      committee</title>
1504
1505      <para>
1506       <ulink url="http://httpd.apache.org/">Apache</ulink> is an
1507       example of a project that is run by small group of developers
1508       who vote on major technical issues and the admission of new
1509       members and all have write access to the main source
1510       repository. Their process is detailed <ulink
1511       url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
1512      </para>
1513
1514      <para>
1515       The <ulink url="http://www.debian.org/"> Debian Project</ulink>
1516       is an extreme example of rule by committee. At current count,
1517       more than 700 developers have full responsibility for
1518       aspects of the project. All these developers can upload into
1519       the main FTP server, and vote on major issues. Direction for
1520       the project is determined by the project's <ulink
1521       url="http://www.debian.org/social_contract">social
1522       contract</ulink> and a <ulink
1523       url="http://www.debian.org/devel/constitution">constitution</ulink>. To
1524       facilitate this system, there are special teams (i.e. the
1525       install team, the Japanese language team) as well as a technical
1526       committee and a project leader. The leader's main responsibility
1527       is to, <quote>appoint delegates or delegate decisions to the
1528       Technical Committee.</quote>
1529      </para>
1530
1531      <para>
1532       While both of these projects operate on a scale that your
1533       project will not (at least initially), their example is
1534       helpful. Debian's idea of a project leader who can do
1535       <emphasis>nothing</emphasis> but delegate serves as a
1536       caricature of how a project can involve and empower a huge
1537       number of developers and grow to a huge size.
1538      </para>
1539
1540     </sect4>
1541
1542     <sect4 id="releasemanager">
1543      <title>Publicly appoint someone as the release manager for a
1544        specific release</title>
1545
1546      <para>
1547       A release manager is usually responsible for coordinating
1548       testing, enforcing a code freeze, being responsible for
1549       stability and quality control, packaging up the software, and
1550       placing it in the appropriate places to be downloaded.
1551      </para>
1552
1553      <para>
1554       This use of the release manager is a good way to give yourself a
1555       break and to shift the responsibility for accepting and
1556       rejecting patches onto someone else. It is a good way of very
1557       clearly defining a chunk of work on the project as belonging to
1558       a certain person and its a great way of giving yourself room to
1559       breath.
1560      </para>
1561     </sect4>
1562
1563     <sect4 id="delegatebranch">
1564      <title>Delegate control of an entire branch</title>
1565      <para>
1566       If your project chooses to have branches (as described in <xref
1567       linkend="branches">), it might be a good idea to appoint someone
1568       else to be the the head of a branch. If you like focusing your
1569       energy on development releases and the implementation of new
1570       features, hand total control over the stable releases to a
1571       well-suited developer.
1572      </para>
1573
1574      <para>
1575       The author of Linux, Linus Torvalds, came out and crowned Alan
1576       Cox as <quote>the man for stable kernels.</quote> All patches
1577       for stable kernels go to Alan and, if Linus were to be taken
1578       away from work on Linux for any reason, Alan Cox would be more
1579       than suited to fill his role as the acknowledged heir to the
1580       Linux maintainership.
1581      </para>
1582     </sect4>
1583    </sect3> 
1584   </sect2>
1585
1586 <!-- Section2: patching -->
1587
1588   <sect2 id="patching">
1589    <title>Accepting and Rejecting Patches</title>
1590    <para>
1591     This HOWTO has already touched on the fact that as the maintainer
1592     of a free software project, one of your primary and most important
1593     responsibilities will be accepting and rejecting patches submitted
1594     to you by other developers.
1595    </para>
1596
1597    <sect3>
1598     <title>Technical judgment</title>
1599
1600     <para>
1601      In <emphasis>Open Source Development with CVS</emphasis>, Karl
1602      Fogel makes a convincing argument that the most important things
1603      to keep in mind when rejecting or accepting patches are:
1604     </para>
1605
1606     <para>
1607      <itemizedlist>
1608
1609       <listitem>
1610        <para>A firm knowledge of the scope of your program (that's the
1611        <quote>idea</quote> I talked about in <xref linkend="chooseproject">);</para>
1612       </listitem>
1613       
1614       <listitem>
1615        <para>The ability to recognize, facilitate, and direct
1616        <quote>evolution</quote> of your program so that the program
1617        can grow and change and incorporate functionality that was
1618        originally unforeseen;</para>
1619       </listitem>
1620
1621       <listitem>
1622        <para>The necessity to avoid digressions that might expand the
1623        scope of the program too much and result and push the project
1624        towards an early death under its own weight and
1625        unwieldiness.</para>
1626       </listitem>
1627
1628      </itemizedlist>
1629     </para>
1630
1631     <para>
1632      These are the criteria that you as a project maintainer should
1633      take into account each time you receive a patch.
1634     </para>
1635
1636     <para>
1637      Fogel elaborates on this and states the <quote>the
1638      questions to ask yourself when considering whether to implement
1639      (or approve) a change are:</quote>
1640     </para>
1641
1642     <para>
1643      <itemizedlist>
1644
1645       <listitem>
1646        <para>Will it benefit a significant percentage of the program's
1647        user community?</para>
1648       </listitem>
1649
1650       <listitem>
1651        <para>Does it fit within the program's domain or within a
1652        natural, intuitive extension of that domain?</para>
1653       </listitem>
1654
1655      </itemizedlist>
1656     </para>
1657
1658     <para>
1659      The answers to these questions are never straightforward and its
1660      very possible (and even likely) that the person who submitted the
1661      patch may feel differently about the answer to these questions
1662      than you do. However, if you feel that that the answer to either
1663      of those questions is <quote>no,</quote> it is your responsibility
1664      to reject the change. If you fail to do this, the project will
1665      become unwieldy and unmaintainable and many ultimately fail.
1666     </para>
1667    </sect3>
1668
1669    <sect3>
1670     <title>Rejecting patches</title>
1671
1672     <para>
1673      Rejecting patches is probably the most difficult and sensitive
1674      job that the maintainer of any free software project has to
1675      face. But sometimes it has to be done. I mentioned earlier (in
1676      <xref linkend="developers"> and in <xref linkend="delegation">)
1677      that you need to try and balance your responsibility and power to
1678      make what you think are the best technical decisions with the
1679      fact that you will lose support from other developers if you seem
1680      like you are on a power trip or being overly bossy or possessive
1681      of the community's project. I recommend that you keep these three
1682      major concepts in mind when rejecting patches (or other changes):
1683     </para>
1684
1685     <sect4>
1686      <title>Bring it to the community</title>
1687      <para>
1688       One of the best ways of justifying a decision to reject a patch
1689       and working to not seem like you keep an iron grip on your
1690       project is by not making the decision alone at all. It might
1691       make sense to turn over larger proposed changes or more
1692       difficult decisions to a development mailing list where they can
1693       be discussed and debated. There will be some patches (bug fixes,
1694       etc.) which will definitely be accepted and some that you feel
1695       are so offbase that they do not even merit further
1696       discussion. It is those that fall into the grey area between
1697       these two groups that might merit a quick forward to a mailing
1698       list.
1699      </para>
1700
1701      <para>
1702       I recommend this process wholeheartedly. As the project
1703       maintainer you are worried about making the best decision for
1704       the project, for the project's users and developers, and for
1705       yourself as a responsible project leader. Turning things over to
1706       an email list will demonstrate your own responsibility and
1707       responsive leadership as it tests and serves the interests of
1708       your software's community.
1709      </para>
1710     </sect4>
1711
1712     <sect4>
1713      <title>Technical issues are not always good justification</title>
1714      <para>
1715       Especially towards the beginning of your project's life, you
1716       will find that many changes are difficult to implement,
1717       introduce new bugs, or have other technical problems. Try to see
1718       past these. Especially with added functionality, good ideas do
1719       not always come from good programmers. Technical merit is a
1720       valid reason to postpone an application of a patch but it is not
1721       always a good reason to reject a change outright. Even small
1722       changes are worth the effort of working with the developer
1723       submitting the patch to iron out bugs and incorporate the change
1724       if you think it seems like a good addition to your project. The
1725       effort on your part will work to make your project a community
1726       project and it will pull a new or less experienced developer
1727       into your project and even teach them something that might help
1728       them in making their next patch.
1729      </para>
1730     </sect4>
1731
1732     <sect4>
1733      <title>Common courtesy</title>
1734      <para>
1735       It should go without saying but, <emphasis>above all and in all
1736       cases, just be nice.</emphasis> If someone has an idea and cares
1737       about it enough to write some code and submit a patch, they
1738       care, they are motivated, and they are already involved. Your
1739       goal as the maintainer is make sure they submit again. They may
1740       have thrown you a dud this time but next time may be the idea or
1741       feature that revolutionizes your project. 
1742      </para>
1743
1744      <para>
1745       It is your responsibility to first justify your choice to not
1746       incorporate their change clearly and concisely. Then thank
1747       them. Let them know that you a appreciate their help and feel
1748       horrible that you can't incorporate their change. Let them know
1749       that you look forward to their staying involved and you hope
1750       that the next patch or idea meshes better with your project
1751       because you appreciate their work and want to see it in your
1752       application. If you have ever had a patch rejected after putting
1753       a large deal of time, thought, and energy into it, you remember
1754       how it feels and it feels bad. Keep this in mind when you have
1755       to let someone down. It's never easy but you need to do
1756       everything you can to make it as not-unpleasant as possible.
1757      </para>
1758     </sect4>
1759    </sect3>
1760   </sect2>
1761
1762 <!-- Section2: branches  -->
1763
1764   <sect2 id="branches">
1765    <title>Stable and Development Branches</title>
1766
1767    <para>
1768     The idea of stable and development branches has already been
1769     described briefly in <xref linkend="chooseversioning"> and in
1770     <xref linkend="delegatebranch">. These allusions attest to some of
1771     the ways that multiple branches can affect your software. Branches
1772     can let you avoid (to some extent) some of the problems around
1773     rejecting patches (as described in <xref linkend="patching">) by
1774     allowing you to temporarily compromise the stability of your
1775     project without affecting those users who need that stability.
1776    </para>
1777
1778    <para>
1779     The most common way of branching your project is to have one
1780     branch that is stable and one that is for development. This is the
1781     model followed by the Linux kernel that is described in <xref
1782     linkend="chooseversioning">. In this model, there is
1783     <emphasis>always</emphasis> one branch that is stable and always
1784     one that is in development. Before any new release, the
1785     development branch goes into a <quote>feature freeze</quote> as
1786     described in <xref linkend="freezing"> where major changes and
1787     added features are rejected or put on hold under the development
1788     kernel is released as the new stable branch and major development
1789     resumes on the development branch. Bug fixes and small changes
1790     that are unlikely to have any large negative repercussions are
1791     incorporated into the stable branch as well as the development
1792     branch.
1793    </para>
1794
1795    <para>
1796     Linux's model provides an extreme example. On many projects, there is no
1797     need to have two versions constantly available. It may make sense to
1798     have two versions only near a release. The Debian project has
1799     historically made both a stable and an unstable distribution
1800     available but has expanded to this to include: stable, unstable,
1801     testing, experimental, and (around release time) a frozen
1802     distribution that only incorporates bug fixes during the
1803     transition from unstable to stable. There are few projects whose
1804     size would necessitate a system like Debian's but this use of
1805     branches helps demonstrate how they can be used to balance
1806     consistent and effective development with the need to make regular
1807     and usable releases.
1808    </para>
1809
1810    <para>
1811     In trying to set up a development tree for yourself, there are
1812     several things that might be useful to keep in mind:
1813    </para>
1814
1815    <para>
1816     <variablelist>
1817
1818      <varlistentry>
1819       <term>Minimize the number of branches</term>
1820       <listitem>
1821        <para>Debian may be able to make good use of four or five
1822        branches but it contains gigabytes of software in over 5000
1823        packages compiled for 5-6 different architectures. For you,
1824        two is probably a good ceiling. Too many branches will confuse
1825        your users (I can't count how many times I had to describe
1826        Debian's system when it only had 2 and sometimes 3 branches!),
1827        potential developers and even yourself. Branches can help but
1828        they come at a cost so use them very sparingly.</para>
1829       </listitem>
1830      </varlistentry>
1831
1832      <varlistentry>
1833       <term>Make sure that all your different branches are explained</term>
1834       <listitem>
1835        <para>As I mentioned in the preceding paragraph, different
1836        branches <emphasis>will</emphasis> confuse your users. Do
1837        everything you can to avoid this by clearly explaining the
1838        different branches in a prominent page on your website and in a
1839        README file in the <acronym>FTP</acronym> or
1840        web directory.</para>
1841
1842        <para>
1843         I might also recommend against a mistake that I think Debian
1844         has made. The terms <quote>unstable,</quote>
1845         <quote>testing,</quote> and <quote>experimental</quote> are
1846         vague and difficult to rank in order of stability (or
1847         instability as the case may be). Try explaining to someone
1848         that <quote>stable</quote> actually means <quote>ultra
1849         stable</quote> and that <quote>unstable</quote> doesn't
1850         actually include any unstable software but is really stable
1851         software that is untested as a distribution.
1852        </para>
1853
1854        <para>
1855         If you are going to use branches, especially early on, keep in
1856         mind that people are conditioned to understand the terms
1857         <quote>stable</quote> and <quote>development</quote> and you
1858         probably can't go wrong with this simple and common division of
1859         branches.
1860        </para>
1861       </listitem>
1862      </varlistentry>
1863
1864      <varlistentry>
1865       <term>Make sure all your branches are always available</term>
1866       <listitem>
1867        <para>Like a lot of this document, this should probably should
1868        go without saying but experience has taught me that it's not
1869        always obvious to people. It's a good idea to physically split
1870        up different branches into different directories or directory
1871        trees on your <acronym>FTP</acronym> or web site. Linux
1872        accomplishes this by having kernels in a v2.2 and a v2.3
1873        subdirectory where it is immediately obvious (after you know
1874        their version numbering scheme) which directory is for the most
1875        recent stable and the current development releases. Debian
1876        accomplishes this by naming all their distribution with names
1877        (i.e. woody, potato, etc.) and then changing symlinks named
1878        <quote>stable,</quote> <quote>unstable</quote> and
1879        <quote>frozen</quote> to point to which ever distribution (by
1880        name) is in whatever stage. Both methods work and there are
1881        others. In any case, it is important that different branches
1882        are always available, are accessible from consistent locations,
1883        and that different branches are clearly distinguished from each
1884        other so your users know exactly what they want and where to
1885        get it.</para>
1886       </listitem>
1887      </varlistentry>
1888
1889     </variablelist>
1890    </para>
1891
1892   </sect2>
1893
1894 <!-- Section2: otherdev -->
1895
1896   <sect2 id="otherdev">
1897    <title>Other Development issues</title>
1898    <para>
1899     There are more issues surrounding interaction with developers in a
1900     free software project that I can not touch on in great detail in a
1901     HOWTO of this size and scope. Please don't hesitate to contact me if you see
1902     any major omissions.
1903    </para>
1904
1905    <para>
1906      Other smaller issues that are worth mentioning are:
1907    </para>
1908
1909    <sect3 id="freezing">
1910     <title>Freezing</title>
1911     <para>
1912      For those projects that choose to adopt a split development model
1913      (<xref linkend="branches">), freezing is a concept that is worth
1914      becoming familiar with. 
1915     </para>
1916
1917     <para>
1918      Freezes come in two major forms. A <quote>feature freeze</quote>
1919      is a period when no significant functionality is added to a
1920      program. It is a period where established functionality (even
1921      skeletons of barely working functionality) can be improved and
1922      perfected. It is a period where bugs are fixed. This type of
1923      freeze is usually applied some period (a month or two) before a
1924      release. It is easy to push a release back as you wait for
1925      <quote>one more feature</quote> and a freeze helps to avoid this
1926      situation by drawing the much needed line in the sand. It gives
1927      developers room they need to get a program ready for release.
1928     </para>
1929
1930     <para>
1931      The second type of freeze is a <quote>code freeze</quote> which
1932      is much more like a released piece of software. Once a piece of
1933      software has entered a <quote>code freeze,</quote> all changes to
1934      the code are discouraged and only changes that fix known bugs
1935      are permitted. This type of freeze usually follows a
1936      <quote>feature freeze</quote> and directly precedes a
1937      release. Most released software is in what could be interpreted
1938      as a sort of high level <quote>code freeze.</quote>
1939     </para>
1940
1941     <para>
1942      Even if you never choose to appoint a release manager (<xref
1943      linkend="releasemanager">), you will have an easier time
1944      justifying the rejection or postponement of patches (<xref
1945      linkend="patching">) before a release with a publicly stated
1946      freeze in effect.
1947     </para>
1948    </sect3>
1949
1950    <sect3>
1951     <title>Forking</title>
1952     <para>
1953      Forks are like the most extreme version of a branch. A fork is
1954      when a group of developers takes code from a free software
1955      project and actually starts a brand new free software
1956      project with it. The most famous example of a fork was between Emacs and
1957      XEmacs. Both emacsen are based on an identical code-base
1958      but for technical, political, and philosophical reasons,
1959      development was split into two projects which now compete with
1960      each other.
1961     </para>
1962
1963     <para>
1964      The short version of the fork section is, <emphasis>don't do
1965      them.</emphasis> Forks force developers to choose one project to
1966      work with, cause nasty political divisions, and redundancy of
1967      work.  Luckily, usually the threat of the fork is enough to scare
1968      the maintainer or maintainers of a project into changing the way
1969      they run their project.
1970     </para>
1971
1972     <para>
1973      In his chapter on <quote>The Open Source Process,</quote> Karl
1974      Fogel describes how to do a fork if you absolutely must. If you
1975      have determined that is absolutely necessary and that the
1976      differences between you and the people threatening to fork are
1977      absolutely unresolvable, I recommend Fogel's book as a good place
1978      to start.
1979     </para>
1980    </sect3>
1981   </sect2>
1982  </sect1>
1983
1984 <!-- Section1: users -->
1985
1986  <sect1 id="users">
1987   <title>Maintaining a Project: Interacting with Users</title>
1988   <indexterm>
1989    <primary>fswd!users</primary>
1990   </indexterm>
1991
1992   <para>
1993    If you've worked your way up to here, congratulations, you are
1994    nearing the end of this document. This final section describes some
1995    of the situations in which you, in your capacity as project
1996    maintainer, will be interacting with users. It gives some
1997    suggestions on how these situations might be handled effectively.
1998   </para>
1999
2000   <para>
2001    Interacting with users is difficult. In our discussion of
2002    interaction with developers, the underlying assumption is that in a
2003    free software project, a project maintainer must constantly strive to
2004    attract and keep developers who can easily leave at any time.
2005   </para>
2006
2007   <para>
2008    Users in the free software community are different than developers
2009    and are also different than users in the world of proprietary
2010    software and they should be treated differently than either
2011    group. Some ways in which the groups differ significantly follow:
2012   </para>
2013
2014   <para>
2015    <itemizedlist>
2016
2017     <listitem>
2018      <para>The lines between users and developers are blurred in ways
2019      that is totally foreign to any proprietary development
2020      model. Your users are often your developers and vice
2021      versa.</para>
2022     </listitem>
2023
2024     <listitem>
2025      <para>In the free software world, you are often your users' only
2026      choice. Because there is such an emphasis on not replicating the
2027      work of others in the free software community and because the
2028      element of competition present in the propriety software model is
2029      absent (or at least in an extremely different form) in the free
2030      software development model, you will probably be the only project
2031      that does what you do (or at least the only one that does what
2032      you do in the way that you do it). This means your responsiveness
2033      to your users is even more important than in the proprietary
2034      software world.</para>
2035     </listitem>
2036
2037     <listitem>
2038      <para>In an almost paradoxical situation, free software projects
2039      have less immediate or dire consequences for ignoring their users
2040      altogether. It is also often easier to do. Because you don't
2041      usually need to compete with another product, chances are good
2042      that you will not be scrambling to gain the features of your
2043      competitor's newest program. This means that your development
2044      process will have to be directed either internally, by a
2045      commitment to your users, or through both.</para>
2046     </listitem>
2047    </itemizedlist>
2048   </para>
2049
2050   <para>
2051    Trying to tackle this unique situation can only be done
2052    indirectly. Developers and maintainers need to listen to users and
2053    to try and be as responsive as possible. A solid knowledge of the
2054    situation recounted above is any free software developer's best tool
2055    for shifting his development or leadership style to fit the unique
2056    process of free software development. This chapters will try and
2057    introduce some of the more difficult or important points in any
2058    projects interactions with users and give some hints on how to
2059    tackle these.
2060   </para>
2061
2062 <!-- Section2: testing -->
2063
2064   <sect2 id="testing">
2065    <title>Testing and Testers</title>
2066
2067    <para>
2068     In addition to your users being your developers, they are also
2069     (and perhaps more commonly) your testers. Before I get flamed, I
2070     should rephrase my sentence: <emphasis>some of your
2071     users</emphasis> (those who explicityly volunteer) are your
2072     testers.
2073    </para>
2074
2075    <para>
2076     It is important that this distinction be made early on because not
2077     all of your users want to be testers. Many users want to use
2078     stable software and don't care if they don't have the newest,
2079     greatest software with the latest, greatest features. These users
2080     except a stable, tested piece of software without major or obvious
2081     bugs and will be angry if they find themselves testing. This is
2082     yet another way in which a split development model (as mentioned
2083     in <xref linkend="branches">) might come in handy.
2084    </para>
2085
2086    <para>
2087      <quote><ulink
2088      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2089      Projects the Open Source Way</ulink></quote> describes what a
2090      good test should look for:
2091    </para>
2092
2093    <variablelist>
2094     <varlistentry>
2095      <term>Boundary conditions</term>
2096
2097      <listitem>
2098       <para>Maximum buffer lengths, data conversions, upper/lower
2099       boundary limits, and so on.</para>
2100      </listitem>
2101
2102     </varlistentry>
2103     <varlistentry>
2104      <term>Inappropriate behavior</term>
2105
2106      <listitem>
2107       <para>Its a good idea to find out what a program will do if a
2108       user hands it a value it isn't expecting, hits the wrong button,
2109       etc. Ask yourself a bunch of <quote>what if</quote> questions
2110       and think of anything that <emphasis>might</emphasis> fail or
2111       <emphasis>might</emphasis> go wrong and find out what your
2112       program would do in those cases.</para>
2113      </listitem>
2114
2115     </varlistentry>
2116     <varlistentry>
2117      <term>Graceful failure</term>
2118
2119      <listitem>
2120       <para>The answer to a number of the <quote>what if</quote>
2121       questions above is probably <quote>failure</quote> which is
2122       often the only answer. Now make sure that it happens
2123       nicely. Make sure that when it crashes, there is some indication
2124       of why it crashed or failed so that the user or developer
2125       understands whats going on.</para>
2126      </listitem>
2127
2128     </varlistentry>
2129
2130     <varlistentry>
2131      <term>Standards conformance</term>
2132
2133      <listitem>
2134       <para>If possible, make sure your programs conforms to
2135       standards. If it's interactive, don't be too creative with
2136       interfaces. If it is non-interactive, make sure it communicates
2137       over appropriate and established channels with other programs
2138       and with the rest of the system.</para>
2139      </listitem>
2140
2141     </varlistentry>
2142    </variablelist>
2143
2144    <sect3>
2145     <title>Automated testing</title>
2146     <para>
2147      For many programs, many common mistakes can be caught by
2148      automated means. Automated tests tend to be pretty good at
2149      catching errors that you've run into several times before or
2150      the things you just forget. They are not very good at finding
2151      errors, even major ones, that are totally unforeseen.
2152     </para>
2153
2154     <para>
2155      CVS comes with a bourne shell script called sanity.sh that is
2156      worth looking at. Debian uses a program called lintian that
2157      checks Debian packages for all of the most common errors. While
2158      use of these scripts may not be helpful, there is a host of other
2159      sanity checking software on the net that may be applicable (feel
2160      free to email me any recommendations). None of these will create
2161      a bug-free release but they will avoid at least some major
2162      oversights. Finally, if your programs become a long term
2163      endeavor, you will find that there are certain errors that you
2164      tend to make over and over. Start a collection of scripts that
2165      check for these errors to help keep them out of future releases.
2166     </para>
2167    </sect3>
2168
2169    <sect3>
2170     <title>Testing by testers</title>
2171     <para>
2172      For any program that depends on user interactivity, many bugs
2173      will only be uncovered through testing by users actually clicking
2174      the keys and pressing the mouse buttons. For this you need
2175      testers and as many as possible.
2176     </para>
2177
2178     <para>
2179      The most difficult part of testing is finding testers. It's
2180      usually a good tactic to post a message to a relevant mailing
2181      list or news group announcing a specific proposed release date
2182      and outlining the functionality of your program. If you put some
2183      time into the announcement, you are sure to get a few responses.
2184     </para>
2185
2186     <para>
2187      The second most difficult part of testing is
2188      <emphasis>keeping</emphasis> your testers and keeping them
2189      actively involved in the testing process. Fortunately, there are
2190      some tried and true tactics that can applied towards this end:
2191     </para>
2192
2193     <para>
2194      <variablelist>
2195
2196       <varlistentry>
2197        <term>Make things simple for your testers</term>
2198        <listitem>
2199         <para>Your testers are doing you a favor so make it as easy as
2200         possible for them. This means that you should be careful to
2201         package your software in a way that is easy to find, unpack,
2202         install, and uninstall. This also means you should explain
2203         what you are looking for to each tester and make the means for
2204         reporting bugs simple and well established. The key is to
2205         provide as much structure as possible to make your testers'
2206         jobs easy and to maintain as much flexibility as possible for
2207         those that want to do things a little differently.</para>
2208        </listitem>
2209       </varlistentry>
2210
2211       <varlistentry>
2212        <term>Be responsive to your testers</term>
2213        <listitem>
2214         <para>When your testers submit bugs, respond to them and
2215         respond quickly. Even if you are only responding to tell them
2216         that the bug has already been fixed, quick and consistent
2217         responses make them feel like their work is heard, important,
2218         and appreciated.</para>
2219        </listitem>
2220       </varlistentry>
2221
2222       <varlistentry>
2223        <term>Thank your testers</term>
2224        <listitem>
2225         <para>Thank them personally each time they send you
2226         patch. Thank them publicly in the documentation and the about
2227         section of your program. You appreciate your testers and your
2228         program would not be possible without their help. Make sure
2229         they know it. Publicly, pat them on the back to make sure the rest of
2230         the world knows it too. It will be appreciated more than you
2231         expected.</para>
2232        </listitem>
2233
2234       </varlistentry>
2235      </variablelist>
2236     </para>
2237
2238    </sect3>
2239   </sect2>
2240
2241 <!-- Section2: support  -->
2242
2243   <sect2 id="support">
2244    <title>Setting up Support Infrastructure</title>
2245
2246    <para>
2247     While testing is important, the large part of your interactions
2248     and responsibility to your users falls under the category of
2249     support. The best way to make sure your users are adequately
2250     supported in using your program is to set up a good infrastructure
2251     for this purpose so that your developers and users help each other
2252     and less of the burden falls on you. This way, people will also
2253     get quicker and better responses to their questions. This
2254     infrastructure comes in several major forms:
2255    </para>
2256
2257    <sect3>
2258     <title>Documentation</title>
2259     <para>
2260      It should not come as any surprise that the key element to any
2261      support infrastructure is good documentation. This topic was
2262      large covered in <xref linkend="documentation"> and will not be
2263      repeated here.
2264     </para>
2265    </sect3>
2266
2267    <sect3>
2268     <title>Mailing lists</title>
2269     <para>
2270      Aside from documentation, effective mailing lists will be your
2271      greatest tool in providing user support. Running a mailing list
2272      well is more complicated than installing mailing list software
2273      onto a machine.
2274     </para>
2275
2276     <sect4>
2277      <title>Separate lists</title>
2278      
2279      <para>
2280       A good idea is too separate your user and development mailing
2281       lists (perhaps into project-user@host and project-devel@host)
2282       and enforce the division. If people post a development question
2283       onto -user, politely ask them to repost it onto -devel and vise
2284       versa. Subscribe yourself to both groups and encourage all
2285       primarily developers to do the same.
2286      </para>
2287
2288      <para>
2289       This system provides so that no one person is stuck doing all of
2290       the support work and works so that users learn more about the
2291       program, they can help newer users with their questions.
2292      </para>
2293     </sect4>
2294
2295     <sect4>
2296      <title>Choose mailing list software well</title>
2297      <para>
2298       Please don't make the selection of mailing list software
2299       impulsively. Please consider easy accessibility by users without
2300       a lot of technical experience so you want to be as easy as
2301       possible. Web accessibility to an archive of the list is also
2302       important.
2303      </para>
2304
2305      <para>
2306       The two biggest free software mailing list programs are <ulink
2307       url="http://www.greatcircle.com/majordomo/">majordomo</ulink>
2308       and <ulink url="http://www.list.org/">GNU Mailman</ulink>. A
2309       long time advocate of majordomo, I would now recommend any
2310       project choose GNU Mailman. It fulfills the criteria listed
2311       above and makes it easier. It provides a good mailing
2312       list program for a free software project maintainer as opposed
2313       to a good mailing list application for a mailing list
2314       administrator.
2315      </para>
2316
2317      <para>
2318       There are other things you want to take into consideration in
2319       setting up your list. If it is possible to gate your mailing
2320       lists to USENET and provide it in digest form as well as
2321       making them accessible on the web, you will please some users
2322       and work to make the support infrastructure slightly more
2323       accessible.
2324      </para>
2325     </sect4>
2326    </sect3>
2327
2328    <sect3>
2329     <title>Other support ideas</title>
2330
2331     <para>
2332      A mailing list and accessible documentation are far from all you
2333      can do to set up good user support infrastructure. Be
2334      creative. If you stumble across something that works well, email me
2335      and I'll include it here.
2336     </para>
2337
2338     <sect4>
2339      <title>Make your self accessible</title>
2340      <para>
2341       You can not list too few methods to reach you. If you hang out
2342       in an <acronym>IRC</acronym> channel, don't hesitate to list it
2343       in your projects documentation. List email and snailmail
2344       addresses, and ways to reach you via <acronym>ICQ</acronym>,
2345       <acronym>AIM</acronym>, or Jabber if they apply.
2346     </para>
2347     </sect4>
2348
2349     <sect4>
2350      <title>Bug management software</title>
2351      <para>
2352       For many large software projects, use of bug management software
2353       is essential to keep track of which bugs have been fixed, which
2354       bugs have not been fixed, and which bugs are being fixed by
2355       which people. Debian uses the <ulink
2356       url="http://bugs.debian.org">Debian Bug Tracking System</ulink>
2357       (<acronym>BTS</acronym>) although it may not be best choice for
2358       every project (it seems to currently be buckling under its own
2359       weight) As well as a damn good web browser, the mozilla project
2360       has spawned a sub-project resulting in a bug tracking system
2361       called <ulink
2362       url="http://www.mozilla.org/projects/bugzilla/">bugzilla</ulink>
2363       which has become extremely possible and which I like a lot.
2364      </para>
2365
2366      <para>
2367       These systems (and others like them) can be unwieldy so
2368       developers should be careful to not spend more time on the bug
2369       tracking system than on the bugs or the projects themselves. If
2370       a project continues to grow, use of a bug tracking system can
2371       provide an easy standard avenue for users and testers to report
2372       bugs and for developers and maintainers to fix them and track
2373       them in an orderly fashion.
2374      </para>
2375     </sect4>
2376    </sect3>
2377   </sect2>
2378
2379 <!-- Section2: releasing -->
2380
2381   <sect2 id="releasing">
2382    <title>Releasing Your Program</title>
2383
2384    <para>
2385     As mentioned earlier in the HOWTO, the first rule of releasing is,
2386     <emphasis>release something useful.</emphasis> Non-working or
2387     not-useful software will not attract anyone to your
2388     project. People will be turned off of your project and will be likely
2389     to simply gloss over it next time they see a new version
2390     announced. Half-working software, if useful, will intrigue people,
2391     whet their appetites for versions to come, and encourage them to
2392     join the development process.
2393    </para>
2394
2395    <sect3>
2396     <title>When to release</title>
2397
2398     <para>
2399      Making the decision to release your software for the first time
2400      is an incredibly important and incredibly stressful decision. But
2401      it needs to  done. My advice is to try and make something that
2402      is complete enough to be usable and incomplete enough to allow
2403      for flexibility and room for imagination by your future
2404      developers. It's not an easy decision. Ask for help on a local
2405      Linux User Group mailing list or from a group of developer
2406      friends.
2407     </para>
2408
2409     <para>
2410      One tactic is to first do an <quote>alpha</quote> or
2411      <quote>beta</quote> release as described below in <xref
2412      linkend="alphabeta">. However, most of the guidelines described
2413      above still apply.
2414     </para>
2415
2416     <para>
2417      <emphasis>When you feel in your gut that it is time and you feel
2418      you've weighed the situation well several times, cross your
2419      fingers and take the plunge.</emphasis>
2420    </para>
2421
2422     <para>
2423      After you've released for the first time, knowing when to release
2424      becomes less stressful, but just as difficult to gauge. I like
2425      the criteria offered by Robert Krawitz in his article, <ulink
2426      url="http://www.advogato.org/article/196.html"><quote>Free
2427      Software Project Management</quote></ulink> for maintaining a
2428      good release cycle. He recommends that you ask yourself,
2429      <quote>does this release...</quote>
2430     </para>
2431
2432     <para>
2433      <itemizedlist>
2434       <listitem>
2435        <para>Contain sufficient new functionality or bug fixes to be
2436        worth the effort.</para>
2437       </listitem>
2438
2439       <listitem>
2440        <para>Be spaced sufficiently far apart to allow the user time
2441        to work with the latest release.</para>
2442       </listitem>
2443
2444       <listitem>
2445        <para>Be sufficiently functional so that the user can get work
2446        done (quality).</para>
2447       </listitem>
2448      </itemizedlist>
2449     </para>
2450
2451     <para>
2452      If the answer is yes to all of these questions, its probably time
2453      for a release. If in doubt, remember that asking for advice can't
2454      hurt.
2455     </para>
2456    </sect3>
2457
2458    <sect3>
2459     <title>How to release</title>
2460
2461     <para>
2462      If you've followed the guidelines described in this HOWTO up
2463      until this point, the mechanics of doing a release are going to
2464      be the easy part of releasing. If you have set up consistent
2465      distribution locations and the other infrastructure described in
2466      the preceding sections, releasing should be as simple as building
2467      the package, checking it once over, and uploading it into the
2468      appropriate place and then making your website reflect the
2469      change.
2470     </para>
2471    </sect3>
2472
2473    <sect3 id="alphabeta">
2474     <title>Alpha, beta, and development releases</title>
2475
2476     <para>
2477      When contemplating releases, it worth considering the fact that
2478      not every release needs to be a full numbered release. Software
2479      users are accustomed to pre-releases but you must be careful to
2480      label these releases accurately or they will cause more problems then
2481      they are worth.
2482     </para>
2483
2484     <para>
2485      The observation is often made that many free software developers
2486      seem to be confused about the release cycle. <quote><ulink
2487      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2488      Projects the Open Source Way</ulink></quote> suggests that you memorize
2489      the phrase, <quote>Alpha is not Beta. Beta is not Release</quote>
2490      and I'd agree that tis is a probably a good idea.
2491     </para>
2492
2493     <para>
2494      <variablelist>
2495
2496       <varlistentry>
2497        <term>alpha releases</term>
2498        <listitem>
2499         <para>Alpha software is feature-complete but sometimes only
2500         partially functional.</para>
2501
2502         <para>Alpha releases are expected to be unstable, perhaps a
2503         little unsafe, but definitely usable. They
2504         <emphasis>can</emphasis> have known bugs and kinks that have
2505         yet to be worked out. Before releasing an alpha, be sure to
2506         keep in mind that <emphasis>alpha releases are still
2507         releases</emphasis> and people are not going to be expecting a
2508         nightly build from the CVS source. An alpha should work and
2509         have minimal testing and bug fixing already finished.</para>
2510        </listitem>
2511       </varlistentry>
2512
2513       <varlistentry>
2514        <term>beta releases</term>
2515        <listitem>
2516         <para>Beta software is feature-complete and functional, but is
2517         in the testing cycle and still has a few bugs left to be
2518         ironed out.</para>
2519
2520         <para>Beta releases are general expected to be usable and
2521         slightly unstable, although definitely <emphasis>not
2522         unsafe.</emphasis> Beta releases usually preclude a full
2523         release by under a month. They can contain small known bugs
2524         but no major ones. All major functionality should be fully
2525         implemented although the exact mechanics can still be worked
2526         out. Beta releases are great tool to whet the appetites of
2527         potential users by giving them a very realistic view of where
2528         your project is going to be in the very near future and can
2529         help keep interest by giving people
2530         <emphasis>something.</emphasis></para>
2531        </listitem>
2532       </varlistentry>
2533
2534       <varlistentry>
2535        <term>development releases</term>
2536        <listitem>
2537         <para><quote>Development release</quote> is much a more vague
2538         term than <quote>alpha</quote> or <quote>beta</quote>. I
2539         usually choose to reserve the term for discussion of a
2540         development branch although there are other ways to use the
2541         term. So many in fact, that I feel the term has been
2542         cheapened. The popular window manager <ulink
2543         url="http://www.enlightenment.org">Enlightenment</ulink> has
2544         released <emphasis>nothing but</emphasis> development
2545         releases. Most often, the term is used to describe releases
2546         that are not even alpha or beta and if I were to release a
2547         pre-alpha version of a piece of software in order to keep
2548         interest in my project alive, this is probably how I would
2549         have to label it.</para>
2550        </listitem>
2551       </varlistentry>
2552
2553      </variablelist>
2554
2555     </para>
2556    </sect3>
2557   </sect2>
2558
2559 <!-- Section2: announcing  -->
2560
2561   <sect2 id="announcing">
2562    <title>Announcing Your Project</title>
2563
2564    <para>
2565     Well, you've done it. You've (at least for the purposes of this
2566     HOWTO) designed, built, and released your free software
2567     project. All that is left is for you to tell the world so they
2568     know to come and try it out and hopefully jump on board with
2569     development. If everything is in order as described above, this
2570     will be a quick and painless process. A quick announcement is all
2571     that it takes to put yourself on the free software community's
2572     radar screen.
2573    </para>
2574
2575    <sect3>
2576     <title>Mailing lists and USENET</title>
2577     <para>
2578      Email is still the way that most people on the Internet get their
2579      information. Its a good idea to send a message announcing your
2580      program to any relevant mailing list you know of and any relevant
2581      USENET discussion group. Karl Fogel recommends that use you
2582      simple subject describing the fact that the message is an
2583      announcement, the name of the program, the version, and a
2584      half-line long description of its functionality. This way, any
2585      interested user or developer will be immediately attracted to
2586      your announcement. Fogel's example looks like:
2587     </para>
2588
2589     <screen>Subject: ANN: aub 1.0, a program to assemble USENET binaries</screen>
2590
2591     <para>
2592      The rest of the email should describe the programs functionality
2593      quickly and concisely in no more than two paragraphs and should
2594      provide links to the projects webpage and direct links to
2595      downloads for those that want to try it right away.
2596     </para>
2597
2598     <para>
2599      You should repeat this announcement process consistently in the
2600      same locations for each subsequent release.
2601     </para>
2602    </sect3>
2603
2604    <sect3>
2605     <title>freshmeat.net</title>
2606     <para>
2607      Mentioned earlier in <xref linkend="evalwhere">, in today's free
2608      software community, announcements of your project on freshmeat
2609      are almost more important than announcements on mailing lists.
2610     </para>
2611
2612     <para>
2613      Visit the <ulink url="http://freshmeat.net">freshmeat.net
2614      website</ulink> or their <ulink
2615      url="http://freshmeat.net/add-project/">submit project
2616      page</ulink> to post your project onto their site and into their
2617      database. In addition to a large website, freshmeat provides a
2618      daily newsletter that highlights all the days releases and
2619      reaches a huge audience (I personally skim it every night for any
2620      interesting new releases).
2621     </para>
2622    </sect3>
2623   </sect2>
2624 </sect1>
2625
2626  <bibliography>
2627
2628   <bibliodiv>
2629    <title>Printed Books</title>
2630
2631    <biblioentry>
2632     <biblioset>
2633      <author>
2634       <surname>Fogel</surname>
2635       <firstname>Karl</firstname>
2636      </author>
2637      
2638      <title>Open Source Development with CVS</title>
2639      
2640      <publisher>
2641       <publishername>Coriolois Open Press</publishername>
2642      </publisher>
2643      <pubdate>1999</pubdate>
2644
2645      <isbn>1-57610-490-7</isbn>
2646
2647      <abstract>
2648       <para>
2649        Fogel's <quote>guide to using CVS in the free software
2650        world</quote> is much more than its subitle. In the publisher's
2651        own words: <quote><emphasis>Open Source Development with
2652        CVS</emphasis> is one of the first books available that teaches
2653        you development and implementation of Open Source
2654        software.</quote> It also includes the best reference and
2655        tutorial to CVS I have ever seen. It is the book that was
2656        <emphasis>so good</emphasis> that it prompted me to write this
2657        HOWTO because I thought the role it tried to serve was so
2658        important and useful. Please check it or buy it if you can and
2659        are seriously interested in running a free software project.
2660       </para>
2661      </abstract>
2662     </biblioset>
2663    </biblioentry>
2664
2665    <biblioentry
2666     <biblioset>
2667      <author>
2668       <surname>Lessig</surname>
2669       <firstname>Lawrence</firstname>
2670      </author>
2671
2672      <title>Code and Other Laws of Cyberspace</title>
2673      
2674      <publisher>
2675       <publishername>Basic Books</publishername>
2676      </publisher>
2677      <pubdate>2000</pubdate>
2678      
2679      <isbn>0-465-03913-8</isbn>
2680
2681      <abstract>
2682       <para>
2683        While it only briefly talks about free software (and does it by
2684        tiptoeing around the free software/open source issue with the
2685        spineless use of the term <quote>open code</quote> that only a
2686        laywer could coin), Lessig's book is brilliant. Written by a
2687        lawyer, it talks about how regulation on the Internet is not
2688        done with law, but with the code itself and how the nature of
2689        the code will determine the nature of future freedoms. In
2690        addition to being a quick and enjoyable read, it gives some
2691        cool history and describes how we <emphasis>need</emphasis>
2692        free software in a way more powerfully than anything I've read
2693        outside of <ulink
2694        url="http://www.gnu.org/philosophy/right-to-read.html">RMS's
2695        <quote>Right to Read.</quote></ulink>
2696       </para>
2697      </abstract>
2698     </biblioset>
2699    </biblioentry>
2700    
2701    <biblioentry>
2702     <biblioset>
2703      <author>
2704       <surname>Raymond</surname>
2705       <firstname>Eric</firstname>
2706      </author>
2707      
2708      <title>The Cathedral and the Bazaar</title>
2709      <subtitle>Musings on Linux and Open Source by an Accidental Revolutionary</subtitle>
2710      
2711      <publisher>
2712       <publishername>O'Reilly</publishername>
2713      </publisher>
2714      <pubdate>1999</pubdate>
2715     
2716      <isbn>1-56592-724-9</isbn>
2717      <abstract>
2718       <para>
2719        Although I have to honestly say that I am not the ESR fan that
2720        I used to be, this book proved invaluable in getting me where I
2721        am today. The essay that gives the book its title does a good
2722        job of sketching the free software process and does an an
2723        amazing job of making an argument for free software/open source
2724        development as a road to better software. The rest of the book
2725        has other of ESR's articles, which for the most part are posted
2726        on his website. Still, it's nice thing to own in hard copy and
2727        something that every free software/open source hacker should
2728        read.
2729       </para>
2730      </abstract>
2731     </biblioset>
2732    </biblioentry>
2733   </bibliodiv>
2734
2735   <bibliodiv>
2736    <title>Web-Accessable Resources</title>
2737
2738    <para>
2739     This is a list of the web resources pertaining to this HOWTO that
2740     I've found most helpful in compiling this information. If you know
2741     of others that would help, please don't hesitate to email me at
2742     <email>mako@debian.org</email> and we can look into getting it
2743     added to the list and represented in the HOWTO.
2744    </para>
2745
2746    <para>
2747     I'd recommend that any free software developer (or potential one)
2748     skim through these sites becaue they have each have a lot to say.
2749    </para>
2750
2751    <biblioentry>
2752     <biblioset>
2753      <author>
2754       <surname>Manley</surname>
2755       <firstname>Montey</firstname>
2756      </author>
2757      
2758      <title><ulink
2759      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2760      Projects the Open Source Way</ulink></title>
2761      
2762      <publisher>
2763       <publishername><ulink
2764       url="http://www.linuxprogramming.com">Linux
2765       Programming</ulink></publishername>
2766      </publisher>
2767      <pubdate>Oct 31, 2000</pubdate>
2768
2769      <abstract>
2770       <para>
2771        In one of the better articles on the subject that I've read,
2772        Monty sums up some of the major points I touch on including:
2773        starting a project, testing, documenation, organizing a team and
2774        leadership, and several other topics. While more opiniated that
2775        I try to be, I think its an important article that I found very
2776        helpful in writing this HOWTO. I've tried to cite him in
2777        the places where I borrowed from him most.
2778       </para>
2779
2780       <para>
2781        I have problems much of this piece and I recommend you read
2782        <xref linkend="krawitz"> at the same time you read Monty's
2783        article for a good critique.
2784       </para>
2785      </abstract>
2786     </biblioset>
2787    </biblioentry>
2788
2789    <biblioentry>
2790     <biblioset>
2791      <author>
2792       <surname>Gabriel</surname>
2793       <firstname>Richard</firstname>
2794      </author>
2795      
2796      <title><ulink
2797      url="http://www.jwz.org/doc/worse-is-better.html">The Rise of
2798      <quote>Worse is Better</quote></ulink></title>
2799
2800      <abstract>
2801       <para>
2802        A well written article although I think the title may have
2803        confused as many people as the rest of the essay helped. It
2804        offers a good description of how to design programs that will
2805        succeed and stay maintainable as they grow.
2806       </para>
2807      </abstract>
2808     </biblioset>
2809    </biblioentry>
2810   </bibliodiv>
2811
2812   <bibliodiv>
2813    <title>Advogato Articles</title>
2814
2815    <para>
2816     I've found that one of the best resources that any free software
2817     developer has at his or her disposal is Advogato.org. If you haven't
2818     yet had a chance to visit <ulink url="http://www.advogato.org">the
2819     website</ulink>, do.
2820    </para>
2821
2822    <para>
2823     I have spent a huge amount of time on advogato and I've gone
2824     through and provided links to the articles that I think might be
2825     of particular interest to anyone reading this HOWTO. I think that
2826     skimming through these links can be helfpul and I promise that if
2827     you do, you'll learn a lot. You will learn that my idea of how a
2828     free software project should be run is not the
2829     <emphasis>only</emphasis> idea. I think that's important.
2830    </para>
2831
2832    <para>
2833     If nothing else, there is <emphasis>way</emphasis> more
2834     information on that website than I could ever fit into, or
2835     reference from this HOWTO. I have listed what I think are the most
2836     relavant articles here with short descriptions that I've written.
2837    </para>
2838
2839
2840    <biblioentry>
2841     <biblioset>
2842      <author>
2843       <surname>Hindle</surname>
2844       <firstname>Stephen</firstname>
2845      </author>
2846      
2847      <title><ulink url="http://www.advogato.org/article/262.html">'Best Practices' for Open Source?</ulink></title>
2848      
2849      <publisher>
2850       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2851      </publisher>
2852      <pubdate>March 21, 2001</pubdate>
2853
2854      <abstract>
2855       <para>
2856        Touching mostly on programming practice (as most articles on
2857        the subject usually do), the article talks a little about
2858        project managment (<quote>Use it!</quote>) and a bit about
2859        communication within a free software project.
2860       </para>
2861      </abstract>
2862     </biblioset>
2863    </biblioentry>
2864
2865    <biblioentry>
2866     <biblioset>
2867      <author>
2868       <surname>Cohen</surname>
2869       <firstname>Bram</firstname>
2870      </author>
2871      
2872      <title><ulink
2873      url="http://www.advogato.org/article/258.html"></ulink>How to
2874      Write Maintainable Code</title>
2875      
2876      <publisher>
2877       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2878      </publisher>
2879      <pubdate>March 15, 2001</pubdate>
2880      
2881      <abstract>
2882       <para>
2883        This article touches upon the "writing maintainable code"
2884        discussion that I try hard to avoid in my HOWTO. It's one of
2885        the better (and most diplomatic) articles on the subject that
2886        I've found.
2887       </para>
2888      </abstract>
2889     </biblioset>
2890    </biblioentry>
2891    <biblioentry id="krawitz">
2892     <biblioset>
2893      <author>
2894       <surname>Krawitz</surname>
2895       <firstname>Robert</firstname>
2896      </author>
2897      
2898      <title><ulink url="http://www.advogato.org/article/196.html">Free
2899      Source Project Management</ulink></title>
2900      
2901      <publisher>
2902       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2903      </publisher>
2904      <pubdate>November 4, 2000</pubdate>
2905     
2906      <abstract>
2907       <para>
2908        This article made me happy because it challenged many of the
2909        problems that I had with Monty's article on <ulink
2910        url="http://www.linuxprogramming.com">LinuxProgramming</ulink>. The
2911        author argues that Monty calls simply for the application of
2912        old (proprietary software) project management techniques in
2913        free software projects instead of working to come up with
2914        something new. I found his article to be extremely well thought
2915        out and I think it's an essential read for any free software
2916        project manager.
2917       </para>
2918      </abstract>
2919     </biblioset>
2920    </biblioentry>
2921
2922    <biblioentry>
2923     <biblioset>
2924      <author>
2925       <surname>Martins</surname>
2926       <firstname>Lalo</firstname>
2927      </author>
2928      
2929      <title><ulink url="http://www.advogato.org/article/128.html">Ask
2930      the Advogatos: why do Free Software projects
2931      fail?</ulink></title>
2932      
2933      <publisher>
2934       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2935      </publisher>
2936      <pubdate>July 20, 2000</pubdate>
2937
2938      <abstract>
2939       <para>
2940        While the article is little more than a question, reading the
2941        answers to this question offered by advogato's readers can
2942        help. In a lot of ways, this HOWTO acts as my answer to the
2943        questions posed in this article but there are others, many of
2944        which might take issue with whats is in this HOWTO. It's worth
2945        checking out.
2946       </para>
2947      </abstract>
2948     </biblioset>
2949    </biblioentry>
2950
2951    <biblioentry>
2952     <biblioset>
2953      <author>
2954       <surname>Burley</surname>
2955       <firstname>David</firstname>
2956      </author>
2957      
2958      <title><ulink
2959      url="http://www.advogato.org/article/107.html">In-Roads to Free
2960      Software Development</ulink></title>
2961      
2962      <publisher>
2963       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2964      </publisher>
2965      <pubdate>June 14, 2000</pubdate>
2966     
2967      <abstract>
2968       <para>
2969        This document was written as a response to <ulink
2970        url="http://www.advogato.org/article/72.html">another advogato
2971        article</ulink>. Although not about running a project, this
2972        describes some of the ways that you can get started with free
2973        software development without starting a project. I think this
2974        is an important article. If you are interested in becoming
2975        involved with free software, this article showcases some of the
2976        ways that you can do this without actually starting a project
2977        (something that I hope this HOWTO has demonstrated is not to be
2978        taken lightly).
2979       </para>
2980      </abstract>
2981     </biblioset>
2982    </biblioentry>
2983
2984    <biblioentry>
2985     <biblioset>
2986      <author>
2987       <surname>Moorman</surname>
2988       <firstname>Jacob</firstname>
2989      </author>
2990      
2991      <title><ulink
2992      url="http://www.advogato.org/article/72.html"></ulink>Importance
2993      of Non-Developer Supporters in Free Software</title>
2994      
2995      <publisher>
2996       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2997      </publisher>
2998      <pubdate>April 16, 2000</pubdate>
2999     
3000      <abstract>
3001       <para>
3002        Moorman's is a short article but it brings up some good
3003        points. The comment reminding developers to thank their testers
3004        and end-users is invaluable and oft-forgotten.
3005       </para>
3006      </abstract>
3007     </biblioset>
3008    </biblioentry>
3009
3010    <biblioentry>
3011     <biblioset>
3012      <author>
3013       <surname>Orchard</surname>
3014       <firstname>Leslie</firstname>
3015      </author>
3016      
3017      <title><ulink url="http://www.advogato.org/article/67.html">On
3018      Naming an Open Source Project</ulink></title>
3019      
3020      <publisher>
3021       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3022      </publisher>
3023      <pubdate>April 12, 2000</pubdate>
3024     
3025      <abstract>
3026       <para>
3027        I didn't even have a section on project naming in this HOWTO
3028        (See <xref linkend="naming">) until Leslie Orchard's article
3029        reminded me of it. Thanks to Leslie for writing this article!
3030       </para>
3031      </abstract>
3032     </biblioset>
3033    </biblioentry>
3034
3035    <biblioentry>
3036     <biblioset>
3037      <author>
3038       <surname>Allen</surname>
3039       <firstname>David</firstname>
3040      </author>
3041      
3042      <title><ulink url="http://www.advogato.org/article/40.html">Version Numbering Madness</ulink></title>
3043      
3044      <publisher>
3045       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3046      </publisher>
3047      <pubdate>Februrary 28, 2000</pubdate>
3048     
3049      <abstract>
3050       <para>
3051        In this article, David Allen challengs the whole
3052        <quote>Major.Minor.Patch</quote> version numbering scheme. Its
3053        good to read this as you read <xref
3054        linkend="chooseversioning">. I liked the article and it
3055        describes some of the projects that I bring up in my discussion
3056        of verion numbering.
3057       </para>
3058      </abstract>
3059     </biblioset>
3060    </biblioentry>
3061
3062   </bibliodiv>
3063  </bibliography>
3064
3065 </article>
3066
3067 <!-- Keep this comment at the end of the file
3068 Local variables:
3069 mode: sgml
3070 sgml-omittag:t
3071 sgml-shorttag:t
3072 sgml-namecase-general:t
3073 sgml-general-insert-case:lower
3074 sgml-minimize-attributes:nil
3075 sgml-always-quote-attributes:t
3076 sgml-indent-step:1
3077 sgml-indent-data:nil
3078 sgml-parent-document:nil
3079 sgml-exposed-tags:nil
3080 sgml-local-catalogs:nil
3081 sgml-local-ecat-files:nil
3082 End:
3083 -->

Benjamin Mako Hill || Want to submit a patch?