]> projects.mako.cc - fspm_howto/blob - FreeSoftwareProjectManagementHOWTO.sgml
incorporated link fix from Brian Proffitt
[fspm_howto] / FreeSoftwareProjectManagementHOWTO.sgml
1
2 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
3
4 <article>
5
6 <!-- Header -->
7
8  <artheader>
9   <title>Free Software Project Management HOWTO</title>
10   
11   <author>
12    <firstname>Benjamin</firstname>
13    <othername>Mako</othername>
14    <surname>Hill</surname>
15    <affiliation>
16     <address>
17       <email>mako@atdot.cc</email>
18     </address>
19    </affiliation>
20   </author>
21
22   <revhistory>
23    <revision>
24     <revnumber>v0.3.3</revnumber>
25     <date>22 August 2008</date>
26    <authorinitials>bmh</authorinitials>
27    </revision>
28    <revision>
29
30     <revnumber>v0.3.2</revnumber>
31     <date>15 April 2002</date>
32    <authorinitials>bmh</authorinitials>
33    </revision>
34
35    <revision>
36     <revnumber>v0.3.1</revnumber>
37     <date>18 June 2001</date>
38     <authorinitials>bmh</authorinitials>
39    </revision>
40
41    <revision>
42     <revnumber>v0.3</revnumber>
43     <date>5 May 2001</date>
44     <authorinitials>bmh</authorinitials>
45    </revision>
46
47    <revision>
48     <revnumber>v0.2.1</revnumber>
49     <date>10 April 2001</date>
50     <authorinitials>bmh</authorinitials>
51    </revision>
52
53    <revision>
54     <revnumber>v0.2</revnumber>
55     <date>8 April 2001</date>
56     <authorinitials>bmh</authorinitials>
57    </revision>
58
59    <revision>
60     <revnumber>v0.01</revnumber>
61     <date>27 March 2001</date>
62     <authorinitials>bmh</authorinitials>
63     <revremark>Initial Release</revremark>
64    </revision>
65   </revhistory>
66
67   <abstract>
68    <indexterm>
69     <primary>fswd</primary>
70    </indexterm>
71    
72    <para>
73     This HOWTO is designed for people with experience in programming
74     and some skills in managing a software project but who are new to
75     the world of free software. This document is meant to act as a
76     guide to the non-technical aspects of free software project
77     management and was written to be a crash course in the people
78     skills that aren't taught to commercial coders but that can make
79     or break a free software project.
80    </para>
81   </abstract>
82   
83  </artheader>
84
85 <!-- Section1: intro -->
86
87  <sect1 id="intro">
88   <title>Introduction</title>
89   
90   <indexterm>
91    <primary>fswd!introduction</primary>
92   </indexterm>
93   
94   <para>
95    Skimming through freshmeat.net provides mountains of reasons for this
96    HOWTO's existence--the Internet is littered with excellently
97    written and useful programs that have faded away into the universe
98    of free software forgottenness. This dismal scene made me ask
99    myself, "Why?"
100   </para>
101
102   <para>
103    This HOWTO tries to do a lot of things (probably too many), but it
104    can't answer that question and won't attempt it. What this HOWTO
105    will attempt to do is give your Free Software project a fighting
106    chance--an edge. If you write a piece of crap that no one is
107    interested in, you can read this HOWTO until you can recite it in
108    your sleep and your project will probably fail. Then again, you can
109    write a beautiful, relevant piece of software and follow every
110    instruction in this HOWTO and your software may still not make
111    it. Sometimes life is like that. However, I'll go out a limb and
112    say that if you write a great, relevant pieces of software and
113    ignore the advise in this HOWTO, you'll probably fail <emphasis>
114    more often</emphasis>.
115   </para>
116
117   <para>
118    A lot of the information in this HOWTO is best called common
119    sense. Of course, as any debate on interfaces will prove, what is
120    common sense to some programmers proves totally unintuitive to
121    others. After explaining bits and pieces of this HOWTO to Free
122    Software developers on several occasions, I realized that writing
123    this HOWTO might provide a useful resource and a forum for
124    programmers to share ideas about what has and has not worked for
125    them.
126   </para>
127
128   <para>
129    As anyone involved in any of what seems like an unending parade of
130    ridiculous intellectual property clashes will attest to, a little
131    bit of legalese proves important.
132   </para>
133
134 <!-- Section2: copyright -->
135
136   <sect2 id="copyright">
137    <title>Copyright Information</title>
138
139    <para>
140     This document is copyrighted (c) 2000-2008 Benjamin Mako Hill and is
141     distributed under the terms of the <citetitle>GNU Free
142     Documentation License</citetitle>.
143    </para>
144
145     <para>
146      Permission is granted to copy, distribute and/or modify this
147      document under the terms of the <link
148      linkend="fdl"><citetitle>GNU Free Documentation
149      License</citetitle></link>, Version 1.2 or any later version
150      published by the Free Software Foundation with no Invariant
151      Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy
152      of the license can be found in <xref linkend="fdl">.
153     </para>
154   </sect2>
155
156 <!-- Section2: disclaimer -->
157
158   <sect2 id="disclaimer">
159    <title>Disclaimer</title>
160
161    <para>
162     No liability for the contents of this documents can be accepted.
163     Use the concepts, examples and other content at your own risk.  As
164     this is a new edition of this document, there may be errors and
165     inaccuracies, that may of course be damaging to your project (and
166     potentially your system).  Proceed with caution, and although this
167     is highly unlikely, the author(s) does not take any responsibility
168     for that.
169    </para>
170
171    <para>
172     All copyrights are held by their by their respective owners, unless
173     specifically noted otherwise.  Use of a term in this document
174     should not be regarded as affecting the validity of any trademark
175     or service mark.
176    </para>
177
178    <para>
179     Naming of particular products or brands should not be seen 
180     as endorsements.
181    </para>
182
183   </sect2>
184
185 <!-- Section2: newversions-->
186
187   <sect2 id="newversions">
188    <title>New Versions</title>
189
190    <para>
191     This version is the part of the third pre-release cycle of this
192     HOWTO. It is written to be released to developers for critique and
193     brainstorming. While the HOWTO is now several years old, please keep
194     in mind that this version of the HOWTO is still in an "early" stage
195     and will continue to be revised extensively.
196    </para>
197
198    <para>
199     The latest version number of this document should always be listed
200     on <ulink url="http://mako.cc/projects/howto">the projects
201     homepage</ulink>.
202    </para>
203
204    <para>
205     The newest version of this HOWTO will always be made available at
206     the same website, in a variety of formats:
207    </para>
208
209    <para>
210    <itemizedlist>
211
212     <listitem>
213      <para>
214       <ulink url="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO/t1.html">HTML</ulink>.
215      </para>
216     </listitem>
217
218
219     <listitem>
220      <para>
221       <ulink url="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO.html">HTML (single page)</ulink>.
222      </para>
223     </listitem>
224
225     <listitem>
226      <para>
227       <ulink URL="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO.txt">plain text</ulink>.
228      </para>
229     </listitem>
230
231     <listitem>
232      <para>
233       <ulink url="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO.ps.gz">Compressed postscript</ulink>.
234      </para>
235     </listitem>
236
237     <listitem>
238      <para>
239       <ulink url="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO.sgml.gz">Compressed SGML source</ulink>.
240      </para>
241     </listitem>
242    </itemizedlist>
243    </para>
244   </sect2>
245
246 <!-- Section2: credits -->
247
248   <sect2 id="credits">
249    <title>Credits</title>
250
251    <para>
252     In this version I have the pleasure of acknowledging:
253    </para>
254
255    <para>Fellow Debian developers Martin Michlmayr and Vivek
256    Venugopalan who sent me information and links to extremely
257    interesting articles. I've added both to the bibliography and I've
258    added information from each into the HOWTO. Thanks to Andrew Shugg
259    who pointed out several errors in the document. Also, a big thanks
260    to Sung Wook Her (AKA RedBaron) who is doing the first translation
261    of the HOWTO into Korean. I've been happy to see that people have
262    enjoyed and benefited from the HOWTO so far.</para>
263
264    <para>
265     Older thanks that I don't want to take out yet include: Josh
266     Crawford, Andy King, and Jaime Davila who all read through this in
267     entirety and gave me feedback that has helped me make changes and
268     improvements to this document. I can't thank you guys enough for
269     your help. An extra <quote>Thank You</quote> goes to Andy King who
270     who read through this several times and submitted patches to make
271     life easier for me.
272    </para>
273
274    <para>
275     Karl Fogel, the author of <citetitle>Open Source Development with
276     CVS</citetitle> published by the Coriolis Open Press. Large parts
277     of his book are available <ulink
278     url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
279     the book are available under the GPL and constitute the best
280     tutorial on CVS I've ever seen. The rest of the book covers,
281     <quote>the challenges and philosophical issues inherent in running
282     an Open Source project using CVS.</quote> The book does a good job
283     of covering some of the subjects brought up in this HOWTO and much
284     more. <ulink url="http://cvsbook.red-bean.com">The book's
285     website</ulink> has information on ordering the book and provides
286     several translations of the chapters on CVS. If you are seriously
287     interested in running a Free Software project, you want this
288     book. I tried to mention Fogel in sections of this HOWTO where I
289     knew I was borrowing directly from his ideas. If I missed any, I'm
290     sorry. I'll try and have those fixed in future versions.
291    </para>
292    
293    <para>
294     Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
295     com</email>
296    </para>
297
298    <para>
299     Also providing support material, and inspiration for this HOWTO is
300     Eric S. Raymond for his prolific, consistent, and carefully
301     crafted arguments and Lawrence Lessig for reminding me of the
302     importance of Free Software. Additionally, I want to thank every
303     user and developer involved with the <ulink
304     url="http://www.debian.org">Debian Project</ulink>. The project
305     has provided me with a home, a place to practice free software
306     advocacy, a place to make a difference, a place to learn from
307     those who have been involved with the movement much longer than I,
308     and proof of a free software project that definitely, definitely
309     works.
310    </para>
311
312    <para>
313     Above all, I want to thank <emphasis>Richard Stallman</emphasis>
314     for his work at the Free Software Foundation and for never giving
315     up. Stallman provides and articulates the philosophical basis that
316     attracts me to free software and that drives me toward writing a
317     document to make sure it succeeds. RMS can always be emailed at
318     <email>rms (at) gnu (dot) org</email>.
319    </para>
320
321   </sect2>
322
323 <!-- Section2: feedback -->
324
325   <sect2 id="feedback">
326    <title>Feedback</title>
327
328    <para>
329     Feedback is always and most certainly welcome for this
330     document. Without your submissions and input, this document
331     wouldn't exist. Do you feel that something is missing? Don't
332     hesitate to contact me to have me write a chapter, section, or
333     subsection or to write one yourself. I want this document to be a
334     product of the Free Software development process that it heralds
335     and I believe that its ultimate success will be rooted in its
336     ability to do this. Please send your additions, comments, and
337     criticisms to the following email address:
338     <email>mako@atdot.cc</email>.
339    </para>
340    </sect2>
341
342 <!-- Section2: translations -->
343
344   <sect2 id="translations">
345    <title>Translations</title>
346
347    <para>
348     I know that not everyone speaks English. Translations are nice and
349     I'd love for this HOWTO to gain the kind of international reach
350     afforded by translated versions.
351    </para>
352
353    <para>
354     This HOWTO has graciously translated into German by Robert F.
355     Schmitt.  That copy is accessible in the following formats:
356    </para>
357
358    <itemizedlist>
359     <listitem>
360      <para>
361       <ulink url="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO.DE.html">HTML (single page)</ulink>.
362      </para>
363     </listitem>
364
365     <listitem>
366      <para>
367       <ulink url="http://mako.cc/projects/howto/FreeSoftwareProjectManagement-HOWTO.DE.rstl">Restructured Text Source</ulink>.
368      </para>
369     </listitem>
370    </itemizedlist>
371
372    <para>
373     If you would like to help with or do a translation, you will gain my
374     utmost respect and admiration and you'll get to be part of a cool
375     process. If you are at all interested, please don't hesitate to
376     contact me at: <email>mako@atdot.cc</email>.
377    </para>
378    </sect2>
379  </sect1>
380
381 <!-- Section1: intro: END -->
382
383 <!-- Section1: starting -->
384
385  <sect1 id="starting">
386   <title>Starting a Project</title>
387
388    <indexterm>
389     <primary>fswd!starting</primary>
390    </indexterm>
391   <para>
392    With very little argument, the beginning is the most difficult
393    period in a project's life to do successful free software project
394    management. Laying a firm foundation will determine whether your
395    project flourishes or withers away and dies. It is also the subject
396    that is of most immediate interest to anyone reading this document
397    as a tutorial.
398   </para>
399
400   <para>
401    Starting a project involves a dilemma that you as a developer must
402    try and deal with: no potential user for your program is interested
403    in a program that doesn't work, while the development process that
404    you want to employ holds involvement of users as imperative.
405   </para>
406
407   <para>
408    It is in these dangerous initial moments that anyone working to
409    start a free software project must try and strike a balance along
410    these lines. One of the most important ways that someone trying to
411    start a project can work toward this balance is by establishing a
412    solid framework for the development process through some of the
413    suggestions mentioned in this section.
414   </para>
415
416
417 <!-- Section2: chooseproject-->
418
419   <sect2 id="chooseproject">
420    <title>Choosing a Project</title>
421
422    <para>
423     If you are reading this document, there's a good chance you
424     already have an idea for a project in mind. Chances are also
425     pretty good that it fills a perceived gap by doing something that
426     no other free software project does or by doing something in a way
427     that is unique enough to necessitate a brand new piece of
428     software.
429    </para>
430
431    <sect3 id=identifyidea>
432     <title>Identify and articulate your idea</title>
433     <para>
434      Eric S. Raymond writes about how free software projects start in
435      his essay, <ulink
436      url="http://catb.org/~esr/writings/cathedral-bazaar/"><quote>The
437      Cathedral and the Bazaar,</quote></ulink> which comes as required
438      reading for any free software developer. It is available online .
439     </para>
440
441     <para>
442      In <quote>The Cathedral and the Bazaar,</quote> Raymond tells us
443      that: <quote>every good work of software starts by scratching
444      a developers itch.</quote> Raymond's now widely accepted
445      hypothesis is that new free software programs are written, first
446      and foremost, to solve a specific problem facing the developer.
447     </para>
448
449     <para>
450      If you have an idea for a program in mind, chances are good that
451      it targets a specific problem or <quote>itch</quote> you want to
452      see scratched. <emphasis>This idea is the project.</emphasis>
453      Articulate it clearly. Write it out. Describe the problem you
454      will attack in detail. The success of your project in tackling a
455      particular problem will be tied to your ability to identify that
456      problem clearly early on. Find out exactly what it is that you
457      want your project to do.
458     </para>
459
460     <para>
461      Monty Manley articulates the importance of this initial step in
462      an essay, <quote><ulink
463      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
464      Projects the Open Source Way.</ulink></quote> As the next section
465      will show, there is <emphasis>a lot</emphasis> of work that needs
466      to be done before software is even ready to be coded. Manley
467      says, <quote>Beginning an OSS project properly means that a
468      developer must, first and foremost, avoid writing code too
469      soon!</quote>
470     </para>
471    </sect3>
472
473    <sect3 id=evalulateidea>
474     <title>Evaluate your idea</title>
475
476     <para>
477      In evaluating your idea, you need to first ask yourself a few
478      questions.  This should happen before you move any further
479      through this HOWTO. Ask yourself: <emphasis>Is the free software
480      development model really the right one for your
481      project?</emphasis>
482     </para>
483
484     <para>
485      Obviously, since the program scratches your itch, you are
486      definitely interested in seeing it implemented in code. But,
487      because one hacker coding in solitude fails to qualify as a free
488      software development effort, you need to ask yourself a second
489      question: <emphasis>Is anybody else interested?</emphasis>
490     </para>
491
492     <para>
493      Sometimes the answer is a simple <quote>no.</quote> If you want
494      to write a set of scripts to sort <emphasis>your</emphasis>
495      <acronym>MP3</acronym> collection on <emphasis>your</emphasis>
496      machine, <emphasis>maybe</emphasis> the free software development
497      model is not the best one to choose. However, if you want to
498      write a set of scripts to sort <emphasis>anyone's</emphasis>
499      <acronym>MP3</acronym>s, a free software project might fill a
500      useful gap.
501     </para>
502
503     <para>
504      Luckily, the Internet is a place so big and so diverse that,
505      chances are, there is someone, somewhere, who shares your
506      interests and who feels the same <quote>itch.</quote> It is the
507      fact that there are so many people with so many similar needs and
508      desires that introduces the third major question: <emphasis>Has
509      somebody already had your idea or a reasonably similar
510      one?</emphasis>
511     </para>
512
513      <sect4 id=evalwhere>
514       <title>Finding Similar Projects</title>
515
516      <para>
517       There are places you can go on the web to try and answer the
518       question above. If you have experience with the free software
519       community, you are probably already familiar with many of these
520       sites. All of the resources listed below offer searching of
521       their databases:
522      </para>
523
524      <para>
525      <variablelist>
526        <varlistentry>
527         <term>freshmeat.net</term>
528         <listitem>
529          <para><ulink url="http://freshmeat.net">freshmeat.net</ulink>
530          describes itself as, <quote>the Web's largest index of Linux
531          and Open Source software</quote> and its reputation along
532          these lines is totally unparalleled and unquestioned. If you
533          can't find it on freshmeat, its doubtful that you (or anyone
534          else) will find it at all.</para>
535         </listitem>
536        </varlistentry>
537
538        <varlistentry>
539         <term>Slashdot</term>
540         <listitem>
541          <para><ulink url="http://slashdot.org">Slashdot</ulink>
542          provides <quote>News for Nerds. Stuff that matters,</quote>
543          which usually includes discussion of free software, open
544          source, technology, and geek culture news and events. It is
545          not unusual for a particularly sexy development effort to be
546          announced here, so it is definitely worth checking.</para>
547         </listitem>
548        </varlistentry>
549
550        <varlistentry>
551         <term>SourceForge</term>
552         <listitem>
553          <para><ulink url="http://sourceforge.net">SourceForge</ulink>
554          houses and facilitates a growing number of open source and
555          free software projects. It is also quickly becoming a nexus
556          and a necessary stop for free software
557          developers. SourceForge's <ulink
558          url="http://sourceforge.net/softwaremap/trove_list.php">software
559          map</ulink> and <ulink url="http://sourceforge.net/new/"> new
560          release</ulink> pages should be necessary stops before
561          embarking on a new free software project. SourceForge also
562          provides a <ulink
563          url="http://sourceforge.net/snippet/">Code Snippet
564          Library</ulink> which contains useful reusable chunks of code
565          in an array of languages which can come in useful in any
566          project.</para>
567         </listitem>
568        </varlistentry>
569
570        <varlistentry>
571         <term>Google and Google's Linux Search</term>
572         <listitem>
573          <para><ulink url="http://www.google.com">Google</ulink> and
574          <ulink url="http://www.google.com/linux"> Google's Linux
575          Search</ulink>, provides powerful web searches that may reveal
576          people working on similar projects. It is not a catalog of
577          software or news like freshmeat or Slashdot, but it is worth
578          checking to make sure you aren't pouring your effort into a
579          redundant project.</para>
580         </listitem>
581        </varlistentry>
582
583       </variablelist>
584      </para>
585     </sect4>
586
587     <sect4 id=evalhow>
588      <title>Deciding to Proceed</title>
589      <para>
590       Once you have successfully charted the terrain and have an idea
591       about what kinds of similar free software projects exist, every
592       developer needs to decide whether to proceed with their own
593       project. It is rare that a new project seeks to accomplish a
594       goal that is not at all similar or related to the goal of
595       another project. Anyone starting a new project needs to ask
596       themselves: <quote>Will the new project be duplicating work done
597       by another project? Will the new project be competing for
598       developers with an existing project? Can the goals of the new
599       project be accomplished by adding functionality to an existing
600       project?</quote>
601      </para>
602
603      <para>
604       If the answer to any of these questions is <quote>yes,</quote>
605       try to contact the developer of the existing project(s) in
606       question and see if he or she might be willing to collaborate
607       with you.
608      </para>
609
610      <para>
611       For many developers this may be the single most difficult aspect
612       of free software project management, but it is an essential one. It is
613       easy to become fired up by an idea and get caught up in the
614       momentum and excitement of a new project. It is often extremely
615       difficult to do, but it is important that any free software
616       developer remembers that the best interests of the free software
617       community and the quickest way to accomplish your own project's
618       goals and the goals of similar projects can often be
619       accomplished by <emphasis>not</emphasis> starting a new
620       development effort.
621      </para>
622
623     </sect4>
624    </sect3>
625   </sect2>
626
627 <!-- Section2: naming-->
628
629   <sect2 id="naming">
630    <title>Naming your project</title>
631
632    <para>
633     While there are plenty of projects that fail with descriptive
634     names and plenty that succeed without them, I think naming your
635     project is worth giving a bit of thought. Leslie Orchard tackles
636     this issue in an <ulink
637     url="http://www.advogato.org/article/67.html">Advogato
638     article</ulink>. His article is short and definitely worth looking
639     over quickly.
640    </para>
641
642    <para>
643     The synopsis is that Orchard recommends you pick a name where,
644     after hearing the name, many users or developers will both:
645    </para>
646
647    <para>
648     <itemizedlist>
649      <listitem>
650       <para>Know what the project does.</para>
651      </listitem>
652      <listitem>
653       <para>Remember it tomorrow.</para>
654      </listitem>
655     </itemizedlist>
656    </para>
657
658    <para>
659     Humorously, Orchard's project, <quote>Iajitsu,</quote> does
660     neither. It is probably unrelated that development has effectively
661     frozen since the article was written.
662    </para>
663
664    <para>
665     He makes a good point though. There are companies whose only job
666     is to make names for pieces of software. They make
667     <emphasis>ridiculous</emphasis> amount of money doing it and are
668     supposedly worth it. While you probably can't afford a company like
669     this, you can afford to learn from their existence and think a
670     little bit about the name you are giving your project because it
671     <emphasis>does</emphasis> matter.
672    </para>
673
674    <para>
675     If there is a name you really want but it doesn't fit Orchard's
676     criteria, you can still go ahead. I thought <quote>gnubile</quote>
677     was one of the best I'd heard for a free software project ever and
678     I still talk about it long after I've stopped using the
679     program. However, if you can be flexible on the subject, listen to
680     Orchard's advice. It might help you.
681    </para>
682   </sect2>
683
684 <!-- Section2: licensing-->
685
686   <sect2 id="licensing">
687    <title>Licensing your Software</title>
688    
689    <para>
690     On one (somewhat simplistic) level, the difference between a piece
691     of free software and a piece of propriety software is the
692     license. A license helps you as the developer by protecting your
693     legal rights to have your software distributed under your terms
694     and helps demonstrate to those who wish to help you or your
695     project that they are encouraged to join.
696    </para>
697    
698    <sect3 id="chooselicense">
699     <title>Choosing a license</title>
700
701     <para>
702      Any discussion of licenses is also sure to generate at least a
703      small flame war as there are strong feelings that some free
704      software licenses are better than others. This discussion also
705      brings up the question of <quote>Open Source Software</quote> and
706      the debate over the terms <quote>Open Source Software</quote> and
707      <quote>Free Software</quote>. However, because I've written the
708      Free Software Project Management HOWTO and not the Open Source
709      Software Project Management HOWTO, my own allegiances in this
710      argument are in the open.
711     </para>
712
713     <para>
714      In attempting to reach a middle ground through diplomacy without
715      sacrificing my own philosophy, I will recommend picking any
716      license that conforms to the <ulink
717      url="http://www.debian.org/social_contract">Debian Free Software
718      Guidelines</ulink>. Originally compiled by the Debian project
719      under Bruce Perens, the <acronym>DFSG</acronym> forms the first
720      version of the <ulink
721      url="http://www.opensource.org/docs/definition_plain.html">Open
722      Source Definition.</ulink> Examples of free licenses given by the
723      <acronym>DFSG</acronym> are the <acronym>GPL</acronym>, the
724      <acronym>BSD</acronym>, and the Artistic License. As ESR mentions
725      in his his HOWTO<xref linkend="esrhowto">, don't write your own
726      license if at all possible. The three licenses I mention all have
727      long interpretive traditions. They are also definitely free
728      software (and can therefore be distributed as part of Debian and
729      in other places that permit the transfer of free software).
730     </para>
731
732     <para>
733      Conforming to the definition of free software offered by Richard
734      Stallman in <ulink
735      url="http://www.gnu.org/philosophy/free-sw.html"><quote>The Free
736      Software Definition</quote></ulink>, any of these licenses will
737      uphold, <quote>users' freedom to run, copy, distribute, study,
738      change and improve the software.</quote> There are plenty of
739      other licenses that also conform to the <acronym>DFSG</acronym>
740      but sticking with a more well-known license will offer the
741      advantage of immediate recognition and understanding.  Many
742      people write three or four sentences in a COPYING file and assume
743      that they have written a free software license--as my long
744      experience with the debian-legal mailing professes, this is very
745      often not the case.
746     </para>
747
748     <para>
749      In attempting a more in-depth analysis, I agree with Karl Fogel's
750      description of licenses as falling into two groups: those that
751      are the <acronym>GPL</acronym> and those that are not the
752      <acronym>GPL</acronym>.
753     </para>
754
755     <para>
756      Personally, I license all my software under the
757      <acronym>GPL</acronym>. Created and protected by the Free
758      Software Foundation and the GNU Project, the
759      <acronym>GPL</acronym> is the license for the Linux kernel,
760      GNOME, Emacs, and the vast majority of GNU/Linux software. It's
761      the obvious choice but I also believe it is a good one. Any BSD
762      fanatic will urge you to remember that there is a viral aspect to
763      the <acronym>GPL</acronym> that prevents the mixture of
764      <acronym>GPL</acronym>'ed code with non-<acronym>GPL</acronym>'ed
765      code. To many people (myself included), this is a benefit, but to
766      some, it is a major drawback.
767     </para>
768
769     <para>
770      Many people write three or four sentences in a COPYING file and
771      assume that they have written a free software license--as my long
772      experience with the debian-legal mailing professes, this is very
773      often not the case. It may not protect you, it may not protect
774      your software, and it may make things very difficult for people
775      that want to use your software but who pay a lot of attention to
776      the subtle legal points of licenses. If you are passionate about
777      a home-brewed license, run it by either people at <ulink
778      url="http://www.opensource.org">OSI</ulink> or the <ulink
779      url="mailto:debian-devel@lists.debian.org">debian-legal mailing
780      list</ulink> first protect yourself from unanticipated
781      side-effects of your license.
782     </para>
783
784     <para>
785      The three major licenses can be found at the following locations:
786     </para>
787
788     <para>
789      <itemizedlist>
790       <listitem>
791        <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
792        General Public License</ulink></para>
793       </listitem>
794       <listitem>
795        <para><ulink url="http://www.debian.org/misc/bsd.license">The
796        BSD License</ulink></para>
797       </listitem>
798       <listitem>
799        <para><ulink
800        url="http://language.perl.com/misc/Artistic.html">The Artistic
801        License</ulink></para>
802       </listitem>
803      </itemizedlist>
804     </para>
805
806     <para>
807      <emphasis>In any case, please read through any license before
808      your release your software under it. As the primary developer,
809      you can't afford any license surprises.</emphasis>
810     </para>
811    </sect3>
812
813    <sect3 id="licensechoose">
814     <title>The mechanics of licensing</title>
815
816     <para>
817      The text of the <acronym>GPL</acronym> offers <ulink
818      url="http://www.gnu.org/copyleft/gpl.html#SEC4">a good
819      description of the mechanics of applying a license</ulink> to a
820      piece of software. My quick checklist for applying a license
821      includes:
822     </para>
823
824     <para>
825      <itemizedlist>
826      
827       <listitem>
828        <para>Make yourself or the FSF the copyright holder for the
829        work. In a few rare cases, you might want to make a sponsoring
830        organization (if it's big and powerful enough) the copyright
831        holder instead. Doing this is as simple as putting the name in
832        the blank when you modify the notice of copyright
833        below. Contrary to popular belief, you don't need to file with
834        any organization. The notice alone is enough to copyright your
835        work.</para>
836       </listitem>
837
838       <listitem>
839        <para>If at all possible, attach and distribute a full copy of
840        the license with the source and binary by including a separate
841        file.</para>
842       </listitem>
843
844       <listitem>
845        <para>At the top of each source file in your program, attach a
846        notice of copyright and include information on where the full
847        license can be found. The <acronym>GPL</acronym> recommends
848        that each file begin with:</para>
849
850        <screen>
851 <emphasis>one line to give the program's name and an idea of what it does.</emphasis>
852 Copyright (C) yyyy  name of author
853
854 This program is free software; you can redistribute it and/or
855 modify it under the terms of the GNU General Public License
856 as published by the Free Software Foundation; either version 2
857 of the License, or (at your option) any later version.
858
859 This program is distributed in the hope that it will be useful,
860 but WITHOUT ANY WARRANTY; without even the implied warranty of
861 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
862 GNU General Public License for more details.
863
864 You should have received a copy of the GNU General Public License
865 along with this program; if not, write to the Free Software
866 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
867        </screen>
868
869        <para>
870         The <acronym>GPL</acronym> goes on to recommend attaching
871         information on methods for contacting you (the author) via
872         email or physical mail.
873       </para>
874       </listitem>
875
876       <listitem>
877        <para>
878         The <acronym>GPL</acronym> continues and suggests that if your
879         program runs in an interactive mode, you should write the
880         program to output a notice each time it enters interactive
881         mode that includes a message like this one that points to full
882         information about the programs license:
883        </para>
884
885        <screen>
886 Gnomovision version 69, Copyright (C) year name of author
887 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
888 type `show w'.  This is free software, and you are welcome
889 to redistribute it under certain conditions; type `show c' 
890 for details.
891        </screen>
892       </listitem>
893
894       <listitem>
895        <para>Finally, it might be helpful to include a
896        <quote>copyright disclaimer</quote> from an employer or a
897        school if you work as a programmer or if it seems like your
898        employer or school might be able to make an argument for
899        ownership of your code later on. These aren't often needed but
900        there are plenty of free software developers who have gotten
901        into trouble and wish they'd asked for one.</para>
902       </listitem>
903
904      </itemizedlist>
905     </para>    
906    </sect3>
907
908    <sect3 id="licensewarning">
909     <title>Final license warning</title>
910
911     <para>
912      Please, please, please, place your software under
913      <emphasis>some</emphasis> license. It may not seem important, and
914      to you it may not be, but licenses <emphasis>are</emphasis>
915      important. For a piece of software to be included in the Debian
916      GNU/Linux distribution, it must have a license that fits the
917      <ulink url="http://www.debian.org/social_contract">Debian Free
918      Software Guidelines</ulink>. If your software has no license, it
919      can not be distributed as a package in Debian until you
920      re-release it under a free license. Please save yourself and
921      others trouble by releasing the first version of your software
922      with a clear license.
923     </para>
924
925    </sect3>
926
927  </sect2>
928
929 <!-- Section2: chooseversioning-->
930
931   <sect2 id="chooseversioning">
932    <title>Choosing a Method of Version Numbering</title>
933
934    <para>
935     <emphasis>The most important thing about a system of version
936     numbering is that there is one.</emphasis> It may seem pedantic to
937     emphasize this point but you'd be surprised at the number of
938     scripts and small programs that pop up without any version number
939     at all.
940    </para>
941
942    <para>
943     <emphasis>The second most important thing about a system of
944     numbering is that the numbers always go up.</emphasis> Automatic
945     version tracking systems and people's sense of order in the
946     universe will fall apart if version numbers don't rise. It doesn't
947     <emphasis>really</emphasis> matter if 2.1 is a big jump and
948     2.0.005 is a small jump but it does matter that 2.1 is more recent
949     than 2.0.005.
950    </para>
951
952    <para>
953     Follow these two simple rules and you will not go (too)
954     wrong. Beyond this, the most common technique seems to be the
955     <quote>major level,</quote> <quote>minor level,</quote>
956     <quote>patch level</quote> version numbering scheme. Whether you
957     are familiar with the name or not, you interact with it all the
958     time. The first number is the major number and it signifies major
959     changes or rewrites. The second number is the minor number and it
960     represents added or tweaked functionality on top of a largely
961     coherent structure. The third number is the patch number and it
962     usually will only refer to releases fixing bugs.
963    </para>
964
965    <para>
966     The widespread use of this scheme is why I know the nature and
967     relative degree in the differences between a 2.4.12 release of the
968     Linux kernel and a 2.4.11, 2.2.12, and 1.2.12 without knowing
969     anything about any of the releases.
970    </para>
971
972    <para>
973     You can bend or break these rules, and people do. But beware, if
974     you choose to, someone will get annoyed, assume you don't know,
975     and try and educate you, probably not nicely. I always follow this
976     method and I implore you to do so as well.
977    </para>
978    
979    <para>
980     There are several version numbering systems that are well known,
981     useful, and that might be worth looking into before you release
982     your first version.
983    </para>
984
985    <variablelist>
986     <varlistentry>
987      <term>Linux kernel version numbering:</term>
988      <listitem>
989       <para>The Linux kernel uses a versioning system where any odd
990       minor version number refers to an development or testing release
991       and any even minor version number refers to a stable
992       version. Think about it for a second. Under this system, 2.1 and
993       2.3 kernels were and always will be development or testing
994       kernels and 2.0, 2.2. and 2.4 kernels are all production code
995       with a higher degree of stability and more testing.
996      </para>
997
998       <para>
999        Whether you plan on having a split development model (as
1000        described in <xref linkend="branches">) or only one version
1001        released at a time, my experience with several free software
1002        projects and with the Debian project has taught me that use of
1003        Linux's version numbering system is worth taking into
1004        consideration. In Debian, <emphasis>all</emphasis> minor
1005        versions are stable distributions (2.0, 2.1, etc). However,
1006        many people assume that 2.1 is an unstable or development
1007        version and continue to use an older version until they get so
1008        frustrated with the lack of development progress that they
1009        complain and figure the system out. If you never release an odd
1010        minor version but only release even ones, nobody is hurt, and
1011        less people are confused. It's an idea worth taking into
1012        consideration.
1013       </para>
1014      </listitem>
1015     </varlistentry>
1016
1017     <varlistentry>
1018      <term>Wine version numbering:</term>
1019      <listitem>
1020       <para>Because of the unusual nature of wine's development where
1021       the not-emulator is constantly improving but not working toward
1022       any immediately achievable goal, wine is released every three
1023       weeks. Wine does this by labeling their releases in <quote>Year
1024       Month Day</quote> format where each release might be labeled
1025       <quote>wine-XXXXXXXX</quote> where the version from January 04,
1026       2000 would be <quote>wine-20000104</quote>. For certain
1027       projects, <quote>Year Month Day</quote> format can make a lot of
1028       sense.
1029       </para>
1030      </listitem>
1031     </varlistentry>
1032
1033     <varlistentry>
1034      <term>Mozilla milestones:</term>
1035      <listitem>
1036       <para>When one considers Netscape 6 and vendor versions, the
1037       mozilla's project development structure is one of the most
1038       complex free software models available. The project's version
1039       numbering has reflected the unique situation in which it is
1040       developed.
1041       </para>
1042
1043       <para>
1044        Mozilla's version numbering structure has historically been
1045        made up of milestones. From the beginning of the mozilla
1046        project, the goals of the project in the order and degree to
1047        which they were to be achieved were charted out on a series of
1048        <ulink url="http://www.mozilla.org/roadmap.html">road
1049        maps</ulink>. Major points and achievements along these
1050        road-maps were marked as milestones. Therefore, although
1051        Mozilla was built and distributed nightly as <quote>nightly
1052        builds,</quote> on a day when the goals of a milestone on the
1053        road-map had been reached, that particular build was marked as
1054        a <quote>milestone release.</quote>
1055       </para>
1056
1057       <para>
1058        While I haven't seen this method employed in any other projects
1059        to date, I like the idea and think that it might have value in
1060        any testing or development branch of a large application under
1061        heavy development.
1062       </para>
1063      </listitem>
1064     </varlistentry>
1065
1066    </variablelist>
1067   </sect2>
1068
1069 <!-- Section2: documentation-->
1070
1071   <sect2 id="documentation">
1072    <title>Documentation</title>
1073
1074    <para>
1075     A huge number of otherwise fantastic free software applications
1076     have withered and died because their author was the only person
1077     who knew how to use them fully. Even if your program is written
1078     primarily for a techno-savvy group of users, documentation is
1079     helpful and even necessary for the survival of your project. You
1080     will learn later in <xref linkend="releasing"> that you should
1081     always release something that is usable. <emphasis>A piece of
1082     software without documentation is not usable.</emphasis>
1083    </para>
1084
1085    <para>
1086     There are lots of different people you should document for and
1087     there are lots of ways to document your project. <emphasis>The
1088     importance of documentation in source code to help facilitate
1089     development by a large community is vital</emphasis> but it falls
1090     outside the scope of this HOWTO. This being the case, this section
1091     deals with useful tactics for user-directed documentation.
1092    </para>
1093
1094    <para>
1095     A combination of tradition and necessity has resulted in a
1096     semi-regular system of documentation in most free software
1097     projects that is worth following. Both users and developers expect
1098     to be able to get documentation in several ways and it's essential
1099     that you provide the information they are seeking in a form they
1100     can read if your project is ever going to get off the
1101     ground. People have come to expect:
1102    </para>
1103
1104    <sect3>
1105     <title>Man pages</title> 
1106
1107     <para>Your users will want to be able to type <quote>man
1108     yourprojectname</quote> end up with a nicely formatted man page
1109     highlighting the basic use of your application. Make sure that
1110     before you release your program, you've planned for this.
1111     </para>
1112
1113     <para>
1114      Man pages are not difficult to write. There is excellent
1115      documentation on the man page writing process available through
1116      the <quote>The Linux Man-Page-HOWTO</quote> which is available
1117      through the Linux Documentation project <acronym>(LDP)</acronym>
1118      and is written by Jens Schweikhardt. It is available <ulink
1119      url="http://www.schweikhardt.net/man_page_howto.html">from
1120      Schweikhardt's site</ulink>.
1121     </para>
1122
1123     <para>
1124      It is also possible to write man pages using DocBook
1125      SGML. Because man pages are so simple and the DocBook method
1126      relatively new, I have not been able to follow this up but would
1127      love help from anyone who can give me more information on how
1128      exactly how this is done.
1129     </para>
1130    </sect3>
1131
1132    <sect3>
1133     <title>Command line accessible documentation</title>
1134
1135     <para>
1136      Most users will expect some basic amount of documentation to be
1137      easily available from the command line. For few programs should
1138      this type of documentation extend for more than one screen (24 or
1139      25 lines) but it should cover the basic usage, a brief (one or
1140      two sentence) description of the program, a list of the commands
1141      with explanations, as well as all the major options (also with
1142      explanations), plus a pointer to more in-depth documentation for
1143      those who need it. The command line documentation for Debian's
1144      apt-get serves as an excellent example and a useful model:
1145     </para>
1146
1147     <screen>
1148 apt 0.3.19 for i386 compiled on May 12 2000  21:17:27
1149 Usage: apt-get [options] command
1150        apt-get [options] install pkg1 [pkg2 ...]
1151
1152 apt-get is a simple command line interface for downloading and
1153 installing packages. The most frequently used commands are update
1154 and install.
1155
1156 Commands:
1157    update - Retrieve new lists of packages
1158    upgrade - Perform an upgrade
1159    install - Install new packages (pkg is libc6 not libc6.deb)
1160    remove - Remove packages
1161    source - Download source archives
1162    dist-upgrade - Distribution upgrade, see apt-get(8)
1163    dselect-upgrade - Follow dselect selections
1164    clean - Erase downloaded archive files
1165    autoclean - Erase old downloaded archive files
1166    check - Verify that there are no broken dependencies
1167
1168 Options:
1169   -h  This help text.
1170   -q  Loggable output - no progress indicator
1171   -qq No output except for errors
1172   -d  Download only - do NOT install or unpack archives
1173   -s  No-act. Perform ordering simulation
1174   -y  Assume Yes to all queries and do not prompt
1175   -f  Attempt to continue if the integrity check fails
1176   -m  Attempt to continue if archives are unlocatable
1177   -u  Show a list of upgraded packages as well
1178   -b  Build the source package after fetching it
1179   -c=? Read this configuration file
1180   -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp
1181 See the apt-get(8), sources.list(5) and apt.conf(5) manual
1182 pages for more information and options.
1183     </screen>
1184
1185     <para>
1186      It has become a GNU convention to make this type of information
1187      accessible with the <quote>-h</quote> and the
1188      <quote>--help</quote> options. Most GNU/Linux users will expect
1189      to be able to retrieve basic documentation these ways so if you
1190      choose to use different methods, be prepared for the flames and
1191      fallout that may result.
1192     </para>
1193    </sect3>
1194
1195    <sect3>
1196     <title>Files users will expect</title>
1197     <para>
1198      In addition to man pages and command-line help, there are certain
1199      files where people will look for documentation, especially in any
1200      package containing source code. In a source distribution, most of
1201      these files can be stored in the root directory of the source
1202      distribution or in a subdirectory of the root called
1203      <quote>doc</quote> or <quote>Documentation.</quote> Common files
1204      in these places include:
1205     </para>
1206
1207     <para>
1208      <variablelist>
1209       <varlistentry>
1210        <term>README or Readme</term>
1211
1212        <listitem>
1213         <para>A document containing all the basic installation,
1214         compilation, and even basic use instructions that make up the
1215         bare minimum information needed to get the program up and
1216         running. A README is not your chance to be verbose but should
1217         be concise and effective. An ideal README is at least 30 lines
1218         long and more no more than 250.</para>
1219        </listitem>
1220
1221       </varlistentry>
1222       <varlistentry>
1223        <term>INSTALL or Install</term>
1224
1225        <listitem>
1226         <para>The INSTALL file should be much shorter than the README
1227         file and should quickly and concisely describe how to build
1228         and install the program. Usually an INSTALL file simply
1229         instructs the user to run <quote>./configure; make; make
1230         install</quote> and touches on any unusual options or actions
1231         that may be necessary. For most relatively standard install
1232         procedures and for most programs, INSTALL files are as short
1233         as possible and are rarely over 100 lines.</para>
1234        </listitem>
1235
1236       </varlistentry>
1237       <varlistentry>
1238        <term>CHANGELOG, Changelog, ChangeLog, or changelog</term>
1239
1240        <listitem>
1241         <para>A CHANGELOG is a simple file that every well-managed
1242         free software project should include. A CHANGELOG is simple
1243         the file that, as its name implies, logs or documents the
1244         changes you make to your program. The most simple way to
1245         maintain a CHANGELOG is to simply keep a file with the source
1246         code for your program and add a section to the top of the
1247         CHANGELOG with each release describing what has been changed,
1248         fixed, or added to the program. It's a good idea to post the
1249         CHANGELOG onto the website as well because it can help people
1250         decide whether they want or need to upgrade to a newer version
1251         or wait for a more significant improvement.</para>
1252        </listitem>
1253
1254       </varlistentry>
1255       <varlistentry>
1256        <term>NEWS</term>
1257
1258        <listitem>
1259         <para>A NEWS file and a ChangeLog are similar. Unlike a
1260         CHANGELOG, a NEWS file is not typically updated with new
1261         versions. Whenever new features are added, the developer
1262         responsible will make a note in the NEWS file. NEWS files
1263         should not have to be changed before a release (they should be
1264         kept up to date all along) but it's usually a good idea to
1265         check first anyway because often developers just forget to
1266         keep them as current as they should.</para>
1267        </listitem>
1268
1269       </varlistentry>
1270       <varlistentry>
1271        <term><acronym>FAQ</acronym></term>
1272
1273        <listitem>
1274         <para>For those of you that don't already know,
1275         <acronym>FAQ</acronym> stands for Frequently Asked Questions
1276         and a FAQ is a collection of exactly that. FAQs are not
1277         difficult to make. Simply make a policy that if you are asked
1278         a question or see a question on a mailing list two or more
1279         times, add the question (and its answer) to your FAQ. FAQs are
1280         more optional than the files listed above but they can save
1281         your time, increase usability, and decrease headaches on all
1282         sides.</para>
1283        </listitem>
1284
1285       </varlistentry>
1286      </variablelist>
1287     </para>
1288    </sect3>
1289
1290    <sect3>
1291     <title>Website</title> 
1292     <para>
1293      It's only indirectly an issue of documentation but a good website
1294      is quickly becoming an essential part of any free software
1295      project. Your website should provide access to your documentation
1296      (in <acronym>HTML</acronym> if possible). It should also include
1297      a section for news and events around your program and a section
1298      that details the process of getting involved with development or
1299      testing and make an open invitation. It should also supply links
1300      to any mailing lists, similar websites, and provide a direct link
1301      to all the available ways of downloading your software.
1302     </para>
1303    </sect3>
1304
1305    <sect3>
1306     <title>Other documentation hints</title>
1307
1308     <itemizedlist>
1309      <listitem>
1310       <para>
1311         All your documentation should be in plaintext, or, in cases
1312         where it is on your website primarily, in HTML. Everyone can
1313         cat a file, everyone has a pager, (almost) everyone can render
1314         HTML. <emphasis>You are welcome to distribute information in
1315         PDF, PostScript, RTF, or any number of other widely used
1316         formats but this information must also be available in
1317         plaintext or HTML or people will be very angry at
1318         you.</emphasis> In my opinion, info falls into this category
1319         as well. There is plenty of great GNU documentation that
1320         people simply don't read because it only in info. And this
1321         <emphasis>does</emphasis> make people angry. It's not a
1322         question of superior formats; it is a question of
1323         accessability and the status quo plays a huge role in this
1324         determination.
1325       </para>
1326      </listitem>
1327
1328      <listitem>
1329       <para>
1330        It doesn't hurt to distribute any documentation for your
1331        program from your website (FAQs etc) with your program. Don't
1332        hesitate to throw any of this in the program's tarball. If
1333        people don't need it, they will delete it. I can repeat it over
1334        and over: <emphasis>Too much documentation is not a
1335        sin.</emphasis>
1336       </para>
1337      </listitem>
1338
1339      <listitem>
1340       <para>Unless your software is particular to a non-English
1341       language (a Japanese language editor for example), please
1342       distribute it with English language documentation. If you don't
1343       speak English or not not confident in your skills, ask a friend
1344       for help. Like it or not, fair or unfair, <emphasis>English is
1345       the language of free software</emphasis>. However, this does not
1346       mean you should limit your documentation to only English. If you
1347       speak another language, distribute translations of documentation
1348       with your software if you have the time and energy to do
1349       so. They will invariably be useful to someone.</para>
1350      </listitem>
1351
1352      <listitem>
1353       <para>
1354        Finally, <emphasis>please spell-check your
1355        documentation.</emphasis> Misspellings in documentation are
1356        bugs. I'm very guilty of committing this error and it's
1357        extremely easy to do. If English is not your first language,
1358        have a native speaker look over or edit your documentation or
1359        web pages. Poor spelling or grammar goes a long way to making
1360        your code look unprofessional. In code comments, this type of
1361        thing is less important but in man pages and web pages these
1362        mistakes are not acceptable.
1363       </para>
1364      </listitem>
1365
1366     </itemizedlist>
1367
1368
1369    </sect3>
1370   </sect2>
1371
1372 <!-- Section2: presentation -->
1373
1374   <sect2 id="presentation">
1375    <title>Other Presentation Issues</title>
1376    <para>
1377     Many of the remaining issues surrounding the creation of a new
1378     free software program fall under what most people describe as
1379     common sense issues. Its often said that software engineering is
1380     90 percent common sense combined with 10 percent specialized
1381     knowledge. Still, they are worth noting briefly in hopes that they
1382     may remind a developer of something they may have forgotten.
1383    </para>
1384
1385    <sect3>
1386     <title>Package File Names</title> 
1387     <para>
1388      I agree with ESR when he says that: <quote> It's helpful to
1389      everybody if your archive files all have GNU-like names --
1390      all-lower-case alphanumeric stem prefix, followed by a dash,
1391      followed by a version number, extension, and other
1392      suffixes.</quote> There is more info (including lots of examples
1393      of what <emphasis>not</emphasis> to do in his <citetitle>Software
1394      Release Practices HOWTO</citetitle> which is included in this
1395      HOWTO's bibliography and can be found through the LDP.
1396     </para>
1397    </sect3>
1398
1399    <sect3>
1400     <title>Package formats</title>
1401     <para>
1402      Package formats may differ depending on the system you are
1403      developing for. For windows based software, Zip archives (.zip)
1404      usually serve as the package format of choice. If you are
1405      developing for GNU/Linux, *BSD, or any UN*X, make sure that your
1406      source code is always available in tar'ed and gzip'ed format
1407      (.tar.gz). UNIX compress (.Z) has gone out of style and
1408      usefulness and faster computers have brought bzip2 (.bz2) into
1409      the spot-light as a more effective compression medium. I now make
1410      all my releases available in both gzip'ed and bzip2'ed tarballs.
1411     </para>
1412
1413     <para>
1414      Binary packages should always be distribution specific. If you
1415      can build binary packages against a current version of a major
1416      distribution, you will only make your users happy. Try to foster
1417      relationships with users or developers of large distributions to
1418      develop a system for the consistent creation of binary
1419      packages. It's often a good idea to provide RedHat
1420      <acronym>RPM</acronym>'s (.rpm), Debian deb's (.deb) and source
1421      <acronym>RPM</acronym>'s <acronym>SRPM</acronym>'s if
1422      possible. Remember: <emphasis>While these binaries packages are
1423      nice, getting the source packaged and released should always be
1424      your priority. Your users or fellow developers can and will do
1425      the the binary packages for you.</emphasis>
1426     </para>
1427    </sect3>
1428
1429    <sect3>
1430     <title>Version control systems</title>
1431
1432     <para>
1433      A version control system can make a lot of these problems of
1434      packaging (and a lot of other problems mentioned in this HOWTO)
1435      less problematic. If you are using *NIX, CVS is your best bet. I
1436      recommend Karl Fogel's book on the subject (and the <ulink
1437      url="http://cvsbook.red-bean.com/">posted HTML version</ulink>)
1438      wholeheartedly.
1439     </para>
1440
1441     <para>
1442      CVS or not, you should probably invest some time into learning
1443      about a version control system because it provides an automated
1444      way of solving many of the problems described by this HOWTO.  I
1445      am not aware of any free version control systems for Windows or
1446      Mac OS but I know that CVS clients exist for both
1447      platforms. Websites like <ulink
1448      url="http://sourceforge.net">SourceForge</ulink> do a great job
1449      as well with a nice, easy-to-use web interface to CVS.
1450     </para>
1451
1452     <para>
1453      I'd love to devote more space in this HOWTO to CVS because I love
1454      it (I even use CVS to keep versions straight on this HOWTO!) but
1455      I think it falls outside the scope of this document and already
1456      has its own HOWTOs. Most notably is the <citetitle>CVS Best
1457      Practices HOWTO</citetitle><xref linkend="cvsbestpractices">
1458      which I've included in the attached bibliography.
1459     </para>
1460
1461    </sect3>
1462
1463    <sect3>
1464     <title>Useful tidbits and presentation hints</title>
1465
1466     <para>
1467      Other useful hints include:
1468     </para>
1469
1470     <para>
1471      <itemizedlist>
1472
1473       <listitem>
1474        <para>
1475         <emphasis>Make sure that your program can always be found in a
1476         single location.</emphasis> Often this means that you have a
1477         single directory accessible via <acronym>FTP</acronym> or the
1478         web where the newest version can be quickly recognized. One
1479         effective technique is a provide a symlink called
1480         <quote>yourprojectname-latest</quote> that is always pointing
1481         to the most recent released or development version of your
1482         free software application. Keep in mind that this location
1483         will receive many requests for downloads around releases so
1484         make sure that the server you choose has adequate bandwidth.
1485        </para>
1486       </listitem>
1487
1488       <listitem>
1489        <para>
1490         <emphasis>Make sure that there is a consistent email address
1491         for bug reports.</emphasis> It's usually a good idea to make
1492         this something that is NOT your primary email address like
1493         yourprojectname@host or yourprojectname-bugs@host. This way,
1494         if you ever decide to hand over maintainership or if your
1495         email address changes, you simply need to change where this
1496         email address forwards. It also will allow for more than one
1497         person to deal with the influx of mail that is created if your
1498         project becomes as huge as you hope it will.
1499        </para>
1500       </listitem>
1501
1502      </itemizedlist>
1503     </para>
1504    </sect3>
1505   </sect2>
1506  </sect1>
1507
1508 <!-- Section1: starting: END -->
1509
1510 <!-- Section1: developers -->
1511
1512  <sect1 id="developers">
1513   <title>Maintaining a Project: Interacting with Developers</title>
1514   <indexterm>
1515    <primary>fswd!developers</primary>
1516   </indexterm>
1517
1518   <para>
1519    Once you have gotten your project started, you have overcome the
1520    most difficult hurdles in the development process of your
1521    program. Laying a firm foundation is essential, but the development
1522    process itself is equally important and provides just as many
1523    opportunities for failure. In the next two sections, I will
1524    describe running a project by discussing how to maintain a
1525    development effort through interactions with developers and with
1526    users.
1527   </para>
1528
1529   <para>
1530    In releasing your program, your program becomes free software. This
1531    transition is more than just a larger user base. By releasing your
1532    program as free software, <emphasis>your</emphasis> software
1533    becomes the <emphasis>free software community's</emphasis>
1534    software. The direction of your software's development will be
1535    reshaped, redirected, and fully determined by your users and, to a
1536    larger extent, by other developers in the community.
1537   </para>
1538
1539   <para>
1540    The major difference between free software development and
1541    propriety software development is the developer base. As the leader
1542    of a free software project, you need to attract and keep developers
1543    in a way that leaders of proprietary software projects simply don't
1544    have to worry about. <emphasis>As the person leading development of
1545    a free software project, you must harness the work of fellow
1546    developers by making responsible decisions and by responsibly
1547    choosing not to make decisions. You have to direct developers
1548    without being overbearing or bossy. You need to strive to earn
1549    respect and never forget to give it out.</emphasis>
1550   </para>
1551
1552 <!-- Section2: delegation  -->
1553
1554   <sect2 id="delegation">
1555    <title>Delegating Work</title>
1556
1557    <para>
1558     By now, you've hypothetically followed me through the early
1559     programming of a piece of software, the creation of a website and
1560     system of documentation, and we've gone ahead and (as will be
1561     discussed in <xref linkend="releasing">) released it to the rest
1562     of the world. Times passes, and if things go well, people become
1563     interested and want to help. The patches begin flowing in.
1564    </para>
1565
1566    <para>
1567     <emphasis>Like the parent of any child who grows up, it's now time
1568     to wince, smile and do most difficult thing in any parents
1569     life: It's time to let go.</emphasis>
1570    </para>
1571
1572    <para>
1573     Delegation is the political way of describing this process of
1574     <quote>letting go.</quote> It is the process of handing some of
1575     the responsibility and power over your project to other
1576     responsible and involved developers. It is difficult for anyone
1577     who has invested a large deal of time and energy into a project
1578     but it essential for the growth of any free software project. One
1579     person can only do so much. A free software project is nothing
1580     without the involvement of <emphasis>a group</emphasis> of
1581     developers. A group of developers can only be maintained through
1582     respectful and responsible leadership and delegation.
1583    </para>
1584
1585    <para>
1586     As your project progresses, you will notice people who are putting
1587     significant amounts of time and effort into your project. These
1588     will be the people submitting the most patches, posting most on
1589     the mailing lists, and engaging in long email discussions. It is
1590     your responsibility to contact these people and to try and shift
1591     some of the power and responsibility of your position as the
1592     project's maintainer onto them (if they want it). There are
1593     several easy ways you can do this:
1594    </para>
1595
1596    <para>
1597     In a bit of a disclaimer, delegation need not mean rule by
1598     committee. In many cases it does and this has been proven to
1599     work. In other cases this has created problems. <ulink
1600     url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
1601     Projects the Open Source Way</ulink> argues that <quote>OSS
1602     projects do best when one person is the clear leader of a team and
1603     makes the big decisions (design changes, release dates, and so
1604     on).</quote> I think this often true but would urge developers to
1605     consider the ideas that the project leader need not be the
1606     project's founder and that these important powers need not all rest
1607     with one person but that a release manager may be different than a
1608     lead developer. These situations are tricky politically so
1609     be careful and make sure it's necessary before you go around
1610     empowering people.
1611    </para>
1612
1613    <sect3>
1614     <title>How to delegate</title>
1615  
1616     <para>
1617      You may find that other developers seem even more experienced or
1618      knowledgeable than you. Your job as a maintainer does not mean
1619      you have to be the best or the brightest. It means you
1620      are responsible for showing good judgment and for
1621      recognizing which solutions are maintainable and which are not. 
1622     </para>
1623     <para>
1624      Like anything, its easier to watch others delegate than to do it
1625      yourself. In a sentence: <emphasis>Keep an eye out for other
1626      qualified developers who show an interest and sustained
1627      involvement with your project and try and shift responsibility
1628      toward them.</emphasis> The following ideas might be good places
1629      to start or good sources of inspiration:
1630     </para>
1631  
1632     <sect4>
1633      <title>Allow a larger group of people to have write access to your CVS
1634      repository and make real efforts toward rule by a
1635      committee</title>
1636
1637      <para>
1638       <ulink url="http://httpd.apache.org/">Apache</ulink> is an
1639       example of a project that is run by small group of developers
1640       who vote on major technical issues and the admission of new
1641       members and all have write access to the main source
1642       repository. Their process is detailed <ulink
1643       url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
1644      </para>
1645
1646      <para>
1647       The <ulink url="http://www.debian.org/"> Debian Project</ulink>
1648       is an extreme example of rule by committee. At current count,
1649       more than 700 developers have full responsibility for
1650       aspects of the project. All these developers can upload into
1651       the main FTP server, and vote on major issues. Direction for
1652       the project is determined by the project's <ulink
1653       url="http://www.debian.org/social_contract">social
1654       contract</ulink> and a <ulink
1655       url="http://www.debian.org/devel/constitution">constitution</ulink>. To
1656       facilitate this system, there are special teams (i.e. the
1657       install team, the Japanese language team) as well as a technical
1658       committee and a project leader. The leader's main responsibility
1659       is to, <quote>appoint delegates or delegate decisions to the
1660       Technical Committee.</quote>
1661      </para>
1662
1663      <para>
1664       While both of these projects operate on a scale that your
1665       project will not (at least initially), their example is
1666       helpful. Debian's idea of a project leader who can do
1667       <emphasis>nothing</emphasis> but delegate serves as a
1668       caricature of how a project can involve and empower a huge
1669       number of developers and grow to a huge size.
1670      </para>
1671
1672     </sect4>
1673
1674     <sect4 id="releasemanager">
1675      <title>Publicly appoint someone as the release manager for a
1676        specific release</title>
1677
1678      <para>
1679       A release manager is usually responsible for coordinating
1680       testing, enforcing a code freeze, being responsible for
1681       stability and quality control, packaging up the software, and
1682       placing it in the appropriate places to be downloaded.
1683      </para>
1684
1685      <para>
1686       This use of the release manager is a good way to give yourself a
1687       break and to shift the responsibility for accepting and
1688       rejecting patches onto someone else. It is a good way of very
1689       clearly defining a chunk of work on the project as belonging to
1690       a certain person and its a great way of giving yourself room to
1691       breath.
1692      </para>
1693     </sect4>
1694
1695     <sect4 id="delegatebranch">
1696      <title>Delegate control of an entire branch</title>
1697      <para>
1698       If your project chooses to have branches (as described in <xref
1699       linkend="branches">), it might be a good idea to appoint someone
1700       else to be the the head of a branch. If you like focusing your
1701       energy on development releases and the implementation of new
1702       features, hand total control over the stable releases to a
1703       well-suited developer.
1704      </para>
1705
1706      <para>
1707       The author of Linux, Linus Torvalds, came out and crowned Alan
1708       Cox as <quote>the man for stable kernels.</quote> All patches
1709       for stable kernels go to Alan and, if Linus were to be taken
1710       away from work on Linux for any reason, Alan Cox would be more
1711       than suited to fill his role as the acknowledged heir to the
1712       Linux maintainership.
1713      </para>
1714     </sect4>
1715    </sect3> 
1716   </sect2>
1717
1718 <!-- Section2: patching -->
1719
1720   <sect2 id="patching">
1721    <title>Accepting and Rejecting Patches</title>
1722    <para>
1723     This HOWTO has already touched on the fact that as the maintainer
1724     of a free software project, one of your primary and most important
1725     responsibilities will be accepting and rejecting patches submitted
1726     to you by other developers.
1727    </para>
1728
1729    <sect3>
1730     <title>Encouraging Good Patching</title>
1731
1732     <para>As the person managing or maintaining the project, you
1733     aren't the person who is going to be making a lot of
1734     patches. However, it's worth knowing about ESR's section on
1735     <citetitle>Good Patching Practice</citetitle> in the
1736     <citetitle>Software Release Practices HOWTO</citetitle><xref
1737     linkend="esrhowto">. I don't agree with ESR's claim that most ugly
1738     or undocumented patches are probably worth throwing out at first
1739     sight--this just hasn't been my experience, especially when
1740     dealing with bug fixes that often don't come in the form of
1741     patches at all. Of course, this doesn't mean that I
1742     <emphasis>like</emphasis> getting poorly done patches. If you get
1743     ugly -e patches, if you get totally undocumented patches, and
1744     especially if they are anything more than trivial bug-fixes, it
1745     might be worth judging the patch by some of the criteria in ESR's
1746     HOWTO and then throwing people the link to the document so they
1747     can do it the <quote>right way.</quote>
1748     </para>
1749
1750    </sect3>
1751
1752    <sect3>
1753     <title>Technical judgment</title>
1754
1755     <para>
1756      In <emphasis>Open Source Development with CVS</emphasis>, Karl
1757      Fogel makes a convincing argument that the most important things
1758      to keep in mind when rejecting or accepting patches are:
1759     </para>
1760
1761     <para>
1762      <itemizedlist>
1763
1764       <listitem>
1765        <para>A firm knowledge of the scope of your program (that's the
1766        <quote>idea</quote> I talked about in <xref linkend="chooseproject">);</para>
1767       </listitem>
1768       
1769       <listitem>
1770        <para>The ability to recognize, facilitate, and direct
1771        <quote>evolution</quote> of your program so that the program
1772        can grow and change and incorporate functionality that was
1773        originally unforeseen;</para>
1774       </listitem>
1775
1776       <listitem>
1777        <para>The necessity to avoid digressions that might expand the
1778        scope of the program too much and result and push the project
1779        toward an early death under its own weight and
1780        unwieldiness.</para>
1781       </listitem>
1782
1783      </itemizedlist>
1784     </para>
1785
1786     <para>
1787      These are the criteria that you as a project maintainer should
1788      take into account each time you receive a patch.
1789     </para>
1790
1791     <para>
1792      Fogel elaborates on this and states the <quote>the
1793      questions to ask yourself when considering whether to implement
1794      (or approve) a change are:</quote>
1795     </para>
1796
1797     <para>
1798      <itemizedlist>
1799
1800       <listitem>
1801        <para>Will it benefit a significant percentage of the program's
1802        user community?</para>
1803       </listitem>
1804
1805       <listitem>
1806        <para>Does it fit within the program's domain or within a
1807        natural, intuitive extension of that domain?</para>
1808       </listitem>
1809
1810      </itemizedlist>
1811     </para>
1812
1813     <para>
1814      The answers to these questions are never straightforward and its
1815      very possible (and even likely) that the person who submitted the
1816      patch may feel differently about the answer to these questions
1817      than you do. However, if you feel that that the answer to either
1818      of those questions is <quote>no,</quote> it is your responsibility
1819      to reject the change. If you fail to do this, the project will
1820      become unwieldy and unmaintainable and many ultimately fail.
1821     </para>
1822    </sect3>
1823
1824    <sect3>
1825     <title>Rejecting patches</title>
1826
1827     <para>
1828      Rejecting patches is probably the most difficult and sensitive
1829      job that the maintainer of any free software project has to
1830      face. But sometimes it has to be done. I mentioned earlier (in
1831      <xref linkend="developers"> and in <xref linkend="delegation">)
1832      that you need to try and balance your responsibility and power to
1833      make what you think are the best technical decisions with the
1834      fact that you will lose support from other developers if you seem
1835      like you are on a power trip or being overly bossy or possessive
1836      of the community's project. I recommend that you keep these three
1837      major concepts in mind when rejecting patches (or other changes):
1838     </para>
1839
1840     <sect4>
1841      <title>Bring it to the community</title>
1842      <para>
1843       One of the best ways of justifying a decision to reject a patch
1844       and working to not seem like you keep an iron grip on your
1845       project is by not making the decision alone at all. It might
1846       make sense to turn over larger proposed changes or more
1847       difficult decisions to a development mailing list where they can
1848       be discussed and debated. There will be some patches (bug fixes,
1849       etc.) which will definitely be accepted and some that you feel
1850       are so off base that they do not even merit further
1851       discussion. It is those that fall into the gray area between
1852       these two groups that might merit a quick forward to a mailing
1853       list.
1854      </para>
1855
1856      <para>
1857       I recommend this process wholeheartedly. As the project
1858       maintainer you are worried about making the best decision for
1859       the project, for the project's users and developers, and for
1860       yourself as a responsible project leader. Turning things over to
1861       an email list will demonstrate your own responsibility and
1862       responsive leadership as it tests and serves the interests of
1863       your software's community.
1864      </para>
1865     </sect4>
1866
1867     <sect4>
1868      <title>Technical issues are not always good justification</title>
1869      <para>
1870       Especially toward the beginning of your project's life, you
1871       will find that many changes are difficult to implement,
1872       introduce new bugs, or have other technical problems. Try to see
1873       past these. Especially with added functionality, good ideas do
1874       not always come from good programmers. Technical merit is a
1875       valid reason to postpone an application of a patch but it is not
1876       always a good reason to reject a change outright. Even small
1877       changes are worth the effort of working with the developer
1878       submitting the patch to iron out bugs and incorporate the change
1879       if you think it seems like a good addition to your project. The
1880       effort on your part will work to make your project a community
1881       project and it will pull a new or less experienced developer
1882       into your project and even teach them something that might help
1883       them in making their next patch.
1884      </para>
1885     </sect4>
1886
1887     <sect4>
1888      <title>Common courtesy</title>
1889      <para>
1890       It should go without saying but, <emphasis>above all and in all
1891       cases, just be nice.</emphasis> If someone has an idea and cares
1892       about it enough to write some code and submit a patch, they
1893       care, they are motivated, and they are already involved. Your
1894       goal as the maintainer is make sure they submit again. They may
1895       have thrown you a dud this time but next time may be the idea or
1896       feature that revolutionizes your project. 
1897      </para>
1898
1899      <para>
1900       It is your responsibility to first justify your choice to not
1901       incorporate their change clearly and concisely. Then thank
1902       them. Let them know that you a appreciate their help and feel
1903       horrible that you can't incorporate their change. Let them know
1904       that you look forward to their staying involved and you hope
1905       that the next patch or idea meshes better with your project
1906       because you appreciate their work and want to see it in your
1907       application. If you have ever had a patch rejected after putting
1908       a large deal of time, thought, and energy into it, you remember
1909       how it feels and it feels bad. Keep this in mind when you have
1910       to let someone down. It's never easy but you need to do
1911       everything you can to make it as not-unpleasant as possible.
1912      </para>
1913     </sect4>
1914    </sect3>
1915   </sect2>
1916
1917 <!-- Section2: branches  -->
1918
1919   <sect2 id="branches">
1920    <title>Stable and Development Branches</title>
1921
1922    <para>
1923     The idea of stable and development branches has already been
1924     described briefly in <xref linkend="chooseversioning"> and in
1925     <xref linkend="delegatebranch">. These allusions attest to some of
1926     the ways that multiple branches can affect your software. Branches
1927     can let you avoid (to some extent) some of the problems around
1928     rejecting patches (as described in <xref linkend="patching">) by
1929     allowing you to temporarily compromise the stability of your
1930     project without affecting those users who need that stability.
1931    </para>
1932
1933    <para>
1934     The most common way of branching your project is to have one
1935     branch that is stable and one that is for development. This is the
1936     model followed by the Linux kernel that is described in <xref
1937     linkend="chooseversioning">. In this model, there is
1938     <emphasis>always</emphasis> one branch that is stable and always
1939     one that is in development. Before any new release, the
1940     development branch goes into a <quote>feature freeze</quote> as
1941     described in <xref linkend="freezing"> where major changes and
1942     added features are rejected or put on hold under the development
1943     kernel is released as the new stable branch and major development
1944     resumes on the development branch. Bug fixes and small changes
1945     that are unlikely to have any large negative repercussions are
1946     incorporated into the stable branch as well as the development
1947     branch.
1948    </para>
1949
1950    <para>
1951     Linux's model provides an extreme example. On many projects, there is no
1952     need to have two versions constantly available. It may make sense to
1953     have two versions only near a release. The Debian project has
1954     historically made both a stable and an unstable distribution
1955     available but has expanded to this to include: stable, unstable,
1956     testing, experimental, and (around release time) a frozen
1957     distribution that only incorporates bug fixes during the
1958     transition from unstable to stable. There are few projects whose
1959     size would necessitate a system like Debian's but this use of
1960     branches helps demonstrate how they can be used to balance
1961     consistent and effective development with the need to make regular
1962     and usable releases.
1963    </para>
1964
1965    <para>
1966     In trying to set up a development tree for yourself, there are
1967     several things that might be useful to keep in mind:
1968    </para>
1969
1970    <para>
1971     <variablelist>
1972
1973      <varlistentry>
1974       <term>Minimize the number of branches</term>
1975       <listitem>
1976        <para>Debian may be able to make good use of four or five
1977        branches but it contains gigabytes of software in over 5000
1978        packages compiled for 5-6 different architectures. For you,
1979        two is probably a good ceiling. Too many branches will confuse
1980        your users (I can't count how many times I had to describe
1981        Debian's system when it only had 2 and sometimes 3 branches!),
1982        potential developers and even yourself. Branches can help but
1983        they come at a cost so use them very sparingly.</para>
1984       </listitem>
1985      </varlistentry>
1986
1987      <varlistentry>
1988       <term>Make sure that all your different branches are explained</term>
1989       <listitem>
1990        <para>As I mentioned in the preceding paragraph, different
1991        branches <emphasis>will</emphasis> confuse your users. Do
1992        everything you can to avoid this by clearly explaining the
1993        different branches in a prominent page on your website and in a
1994        README file in the <acronym>FTP</acronym> or
1995        web directory.</para>
1996
1997        <para>
1998         I might also recommend against a mistake that I think Debian
1999         has made. The terms <quote>unstable,</quote>
2000         <quote>testing,</quote> and <quote>experimental</quote> are
2001         vague and difficult to rank in order of stability (or
2002         instability as the case may be). Try explaining to someone
2003         that <quote>stable</quote> actually means <quote>ultra
2004         stable</quote> and that <quote>unstable</quote> doesn't
2005         actually include any unstable software but is really stable
2006         software that is untested as a distribution.
2007        </para>
2008
2009        <para>
2010         If you are going to use branches, especially early on, keep in
2011         mind that people are conditioned to understand the terms
2012         <quote>stable</quote> and <quote>development</quote> and you
2013         probably can't go wrong with this simple and common division of
2014         branches.
2015        </para>
2016       </listitem>
2017      </varlistentry>
2018
2019      <varlistentry>
2020       <term>Make sure all your branches are always available</term>
2021       <listitem>
2022        <para>Like a lot of this document, this should probably should
2023        go without saying but experience has taught me that it's not
2024        always obvious to people. It's a good idea to physically split
2025        up different branches into different directories or directory
2026        trees on your <acronym>FTP</acronym> or web site. Linux
2027        accomplishes this by having kernels in a v2.2 and a v2.3
2028        subdirectory where it is immediately obvious (after you know
2029        their version numbering scheme) which directory is for the most
2030        recent stable and the current development releases. Debian
2031        accomplishes this by naming all their distribution with names
2032        (i.e. woody, potato, etc.) and then changing symlinks named
2033        <quote>stable,</quote> <quote>unstable</quote> and
2034        <quote>frozen</quote> to point to which ever distribution (by
2035        name) is in whatever stage. Both methods work and there are
2036        others. In any case, it is important that different branches
2037        are always available, are accessible from consistent locations,
2038        and that different branches are clearly distinguished from each
2039        other so your users know exactly what they want and where to
2040        get it.</para>
2041       </listitem>
2042      </varlistentry>
2043
2044     </variablelist>
2045    </para>
2046
2047   </sect2>
2048
2049 <!-- Section2: otherdev -->
2050
2051   <sect2 id="otherdev">
2052    <title>Other Project Management issues</title>
2053    <para>
2054     There are more issues surrounding interaction with developers in a
2055     free software project that I can not touch on in great detail in a
2056     HOWTO of this size and scope. Please don't hesitate to contact me if you see
2057     any major omissions.
2058    </para>
2059
2060    <para>
2061      Other smaller issues that are worth mentioning are:
2062    </para>
2063
2064    <sect3 id="freezing">
2065     <title>Freezing</title>
2066     <para>
2067      For those projects that choose to adopt a split development model
2068      (<xref linkend="branches">), freezing is a concept that is worth
2069      becoming familiar with. 
2070     </para>
2071
2072     <para>
2073      Freezes come in two major forms. A <quote>feature freeze</quote>
2074      is a period when no significant functionality is added to a
2075      program. It is a period where established functionality (even
2076      skeletons of barely working functionality) can be improved and
2077      perfected. It is a period where bugs are fixed. This type of
2078      freeze is usually applied some period (a month or two) before a
2079      release. It is easy to push a release back as you wait for
2080      <quote>one more feature</quote> and a freeze helps to avoid this
2081      situation by drawing the much needed line in the sand. It gives
2082      developers room they need to get a program ready for release.
2083     </para>
2084
2085     <para>
2086      The second type of freeze is a <quote>code freeze</quote> which
2087      is much more like a released piece of software. Once a piece of
2088      software has entered a <quote>code freeze,</quote> all changes to
2089      the code are discouraged and only changes that fix known bugs
2090      are permitted. This type of freeze usually follows a
2091      <quote>feature freeze</quote> and directly precedes a
2092      release. Most released software is in what could be interpreted
2093      as a sort of high level <quote>code freeze.</quote>
2094     </para>
2095
2096     <para>
2097      Even if you never choose to appoint a release manager (<xref
2098      linkend="releasemanager">), you will have an easier time
2099      justifying the rejection or postponement of patches (<xref
2100      linkend="patching">) before a release with a publicly stated
2101      freeze in effect.
2102     </para>
2103    </sect3>
2104   </sect2>
2105
2106    <sect2>
2107     <title>Forks</title>
2108     <para>
2109      I wasn't sure about how I would deal with forking in this
2110      document (or if I would deal with forking at all). A fork is when
2111      a group of developers takes code from a free software project and
2112      actually starts a brand new free software project with it. The
2113      most famous example of a fork was between Emacs and XEmacs. Both
2114      emacsen are based on an identical code-base but for technical,
2115      political, and philosophical reasons, development was split into
2116      two projects which now compete with each other.
2117     </para>
2118
2119     <para>
2120      The short version of the fork section is, <emphasis>don't do
2121      them.</emphasis> Forks force developers to choose one project to
2122      work with, cause nasty political divisions, and redundancy of
2123      work.  Luckily, usually the threat of the fork is enough to scare
2124      the maintainer or maintainers of a project into changing the way
2125      they run their project.
2126     </para>
2127
2128     <para>
2129      In his chapter on <quote>The Open Source Process,</quote> Karl
2130      Fogel describes how to do a fork if you absolutely must. If you
2131      have determined that is absolutely necessary and that the
2132      differences between you and the people threatening to fork are
2133      absolutely unresolvable, I recommend Fogel's book as a good place
2134      to start.
2135     </para>
2136   </sect2>
2137  </sect1>
2138
2139 <!-- Section1: users -->
2140
2141  <sect1 id="users">
2142   <title>Maintaining a Project: Interacting with Users</title>
2143   <indexterm>
2144    <primary>fswd!users</primary>
2145   </indexterm>
2146
2147   <para>
2148    If you've worked your way up to here, congratulations, you are
2149    nearing the end of this document. This final section describes some
2150    of the situations in which you, in your capacity as project
2151    maintainer, will be interacting with users. It gives some
2152    suggestions on how these situations might be handled effectively.
2153   </para>
2154
2155   <para>
2156    Interacting with users is difficult. In our discussion of
2157    interaction with developers, the underlying assumption is that in a
2158    free software project, a project maintainer must constantly strive to
2159    attract and keep developers who can easily leave at any time.
2160   </para>
2161
2162   <para>
2163    Users in the free software community are different than developers
2164    and are also different than users in the world of proprietary
2165    software and they should be treated differently than either
2166    group. Some ways in which the groups differ significantly follow:
2167   </para>
2168
2169   <para>
2170    <itemizedlist>
2171
2172     <listitem>
2173      <para>The lines between users and developers are blurred in ways
2174      that is totally foreign to any proprietary development
2175      model. Your users are often your developers and vice
2176      versa.</para>
2177     </listitem>
2178
2179     <listitem>
2180      <para>In the free software world, you are often your users' only
2181      choice. Because there is such an emphasis on not replicating the
2182      work of others in the free software community and because the
2183      element of competition present in the propriety software model is
2184      absent (or at least in an extremely different form) in the free
2185      software development model, you will probably be the only project
2186      that does what you do (or at least the only one that does what
2187      you do in the way that you do it). This means your responsiveness
2188      to your users is even more important than in the proprietary
2189      software world.</para>
2190     </listitem>
2191
2192     <listitem>
2193      <para>In an almost paradoxical situation, free software projects
2194      have less immediate or dire consequences for ignoring their users
2195      altogether. It is also often easier to do. Because you don't
2196      usually need to compete with another product, chances are good
2197      that you will not be scrambling to gain the features of your
2198      competitor's newest program. This means that your development
2199      process will have to be directed either internally, by a
2200      commitment to your users, or through both.</para>
2201     </listitem>
2202    </itemizedlist>
2203   </para>
2204
2205   <para>
2206    Trying to tackle this unique situation can only be done
2207    indirectly. Developers and maintainers need to listen to users and
2208    to try and be as responsive as possible. A solid knowledge of the
2209    situation recounted above is any free software developer's best tool
2210    for shifting his development or leadership style to fit the unique
2211    process of free software project management. This chapters will try and
2212    introduce some of the more difficult or important points in any
2213    projects interactions with users and give some hints on how to
2214    tackle these.
2215   </para>
2216
2217 <!-- Section2: testing -->
2218
2219   <sect2 id="testing">
2220    <title>Testing and Testers</title>
2221
2222    <para>
2223     In addition to your users being your developers, they are also
2224     (and perhaps more commonly) your testers. Before I get flamed, I
2225     should rephrase my sentence: <emphasis>some of your
2226     users</emphasis> (those who explicitly volunteer) are your
2227     testers.
2228    </para>
2229
2230    <para>
2231     It is important that this distinction be made early on because not
2232     all of your users want to be testers. Many users want to use
2233     stable software and don't care if they don't have the newest,
2234     greatest software with the latest, greatest features. These users
2235     except a stable, tested piece of software without major or obvious
2236     bugs and will be angry if they find themselves testing. This is
2237     yet another way in which a split development model (as mentioned
2238     in <xref linkend="branches">) might come in handy.
2239    </para>
2240
2241    <para>
2242      <quote><ulink
2243      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2244      Projects the Open Source Way</ulink></quote> describes what a
2245      good test should look for:
2246    </para>
2247
2248    <variablelist>
2249     <varlistentry>
2250      <term>Boundary conditions</term>
2251
2252      <listitem>
2253       <para>Maximum buffer lengths, data conversions, upper/lower
2254       boundary limits, and so on.</para>
2255      </listitem>
2256
2257     </varlistentry>
2258     <varlistentry>
2259      <term>Inappropriate behavior</term>
2260
2261      <listitem>
2262       <para>Its a good idea to find out what a program will do if a
2263       user hands it a value it isn't expecting, hits the wrong button,
2264       etc. Ask yourself a bunch of <quote>what if</quote> questions
2265       and think of anything that <emphasis>might</emphasis> fail or
2266       <emphasis>might</emphasis> go wrong and find out what your
2267       program would do in those cases.</para>
2268      </listitem>
2269
2270     </varlistentry>
2271     <varlistentry>
2272      <term>Graceful failure</term>
2273
2274      <listitem>
2275       <para>The answer to a number of the <quote>what if</quote>
2276       questions above is probably <quote>failure</quote> which is
2277       often the only answer. Now make sure that it happens
2278       nicely. Make sure that when it crashes, there is some indication
2279       of why it crashed or failed so that the user or developer
2280       understands whats going on.</para>
2281      </listitem>
2282
2283     </varlistentry>
2284
2285     <varlistentry>
2286      <term>Standards conformance</term>
2287
2288      <listitem>
2289       <para>If possible, make sure your programs conforms to
2290       standards. If it's interactive, don't be too creative with
2291       interfaces. If it is non-interactive, make sure it communicates
2292       over appropriate and established channels with other programs
2293       and with the rest of the system.</para>
2294      </listitem>
2295
2296     </varlistentry>
2297    </variablelist>
2298
2299    <sect3>
2300     <title>Automated testing</title>
2301     <para>
2302      For many programs, many common mistakes can be caught by
2303      automated means. Automated tests tend to be pretty good at
2304      catching errors that you've run into several times before or
2305      the things you just forget. They are not very good at finding
2306      errors, even major ones, that are totally unforeseen.
2307     </para>
2308
2309     <para>
2310      CVS comes with a Bourne shell script called sanity.sh that is
2311      worth looking at. Debian uses a program called lintian that
2312      checks Debian packages for all of the most common errors. While
2313      use of these scripts may not be helpful, there is a host of other
2314      sanity checking software on the net that may be applicable (feel
2315      free to email me any recommendations). None of these will create
2316      a bug-free release but they will avoid at least some major
2317      oversights. Finally, if your programs become a long term
2318      endeavor, you will find that there are certain errors that you
2319      tend to make over and over. Start a collection of scripts that
2320      check for these errors to help keep them out of future releases.
2321     </para>
2322    </sect3>
2323
2324    <sect3>
2325     <title>Testing by testers</title>
2326     <para>
2327      For any program that depends on user interactivity, many bugs
2328      will only be uncovered through testing by users actually clicking
2329      the keys and pressing the mouse buttons. For this you need
2330      testers and as many as possible.
2331     </para>
2332
2333     <para>
2334      The most difficult part of testing is finding testers. It's
2335      usually a good tactic to post a message to a relevant mailing
2336      list or news group announcing a specific proposed release date
2337      and outlining the functionality of your program. If you put some
2338      time into the announcement, you are sure to get a few responses.
2339     </para>
2340
2341     <para>
2342      The second most difficult part of testing is
2343      <emphasis>keeping</emphasis> your testers and keeping them
2344      actively involved in the testing process. Fortunately, there are
2345      some tried and true tactics that can applied toward this end:
2346     </para>
2347
2348     <para>
2349      <variablelist>
2350
2351       <varlistentry>
2352        <term>Make things simple for your testers</term>
2353        <listitem>
2354         <para>Your testers are doing you a favor so make it as easy as
2355         possible for them. This means that you should be careful to
2356         package your software in a way that is easy to find, unpack,
2357         install, and uninstall. This also means you should explain
2358         what you are looking for to each tester and make the means for
2359         reporting bugs simple and well established. The key is to
2360         provide as much structure as possible to make your testers'
2361         jobs easy and to maintain as much flexibility as possible for
2362         those that want to do things a little differently.</para>
2363        </listitem>
2364       </varlistentry>
2365
2366       <varlistentry>
2367        <term>Be responsive to your testers</term>
2368        <listitem>
2369         <para>When your testers submit bugs, respond to them and
2370         respond quickly. Even if you are only responding to tell them
2371         that the bug has already been fixed, quick and consistent
2372         responses make them feel like their work is heard, important,
2373         and appreciated.</para>
2374        </listitem>
2375       </varlistentry>
2376
2377       <varlistentry>
2378        <term>Thank your testers</term>
2379        <listitem>
2380         <para>Thank them personally each time they send you
2381         patch. Thank them publicly in the documentation and the about
2382         section of your program. You appreciate your testers and your
2383         program would not be possible without their help. Make sure
2384         they know it. Publicly, pat them on the back to make sure the rest of
2385         the world knows it too. It will be appreciated more than you
2386         expected.</para>
2387        </listitem>
2388
2389       </varlistentry>
2390      </variablelist>
2391     </para>
2392
2393    </sect3>
2394   </sect2>
2395
2396 <!-- Section2: support  -->
2397
2398   <sect2 id="support">
2399    <title>Setting up Support Infrastructure</title>
2400
2401    <para>
2402     While testing is important, the large part of your interactions
2403     and responsibility to your users falls under the category of
2404     support. The best way to make sure your users are adequately
2405     supported in using your program is to set up a good infrastructure
2406     for this purpose so that your developers and users help each other
2407     and less of the burden falls on you. This way, people will also
2408     get quicker and better responses to their questions. This
2409     infrastructure comes in several major forms:
2410    </para>
2411
2412    <sect3>
2413     <title>Documentation</title>
2414     <para>
2415      It should not come as any surprise that the key element to any
2416      support infrastructure is good documentation. This topic was
2417      largely covered in <xref linkend="documentation"> and will not be
2418      repeated here.
2419     </para>
2420    </sect3>
2421
2422    <sect3 id="mailinglists">
2423     <title>Mailing lists</title>
2424     <para>
2425      Aside from documentation, effective mailing lists will be your
2426      greatest tool in providing user support. Running a mailing list
2427      well is more complicated than installing mailing list software
2428      onto a machine.
2429     </para>
2430
2431     <sect4>
2432      <title>Separate lists</title>
2433      
2434      <para>
2435       A good idea is too separate your user and development mailing
2436       lists (perhaps into project-user@host and project-devel@host)
2437       and enforce the division. If people post a development question
2438       onto -user, politely ask them to repost it onto -devel and vise
2439       versa. Subscribe yourself to both groups and encourage all
2440       primarily developers to do the same.
2441      </para>
2442
2443      <para>
2444       This system provides so that no one person is stuck doing all of
2445       the support work and works so that users learn more about the
2446       program, they can help newer users with their questions.
2447      </para>
2448     </sect4>
2449
2450     <sect4>
2451      <title>Choose mailing list software well</title>
2452      <para>
2453       Please don't make the selection of mailing list software
2454       impulsively. Please consider easy accessibility by users without
2455       a lot of technical experience so you want to be as easy as
2456       possible. Web accessibility to an archive of the list is also
2457       important.
2458      </para>
2459
2460      <para>
2461       The two biggest free software mailing list programs are <ulink
2462       url="http://www.greatcircle.com/majordomo/">majordomo</ulink>
2463       and <ulink url="http://www.list.org/">GNU Mailman</ulink>. A
2464       long time advocate of majordomo, I would now recommend any
2465       project choose GNU Mailman. It fulfills the criteria listed
2466       above and makes it easier. It provides a good mailing
2467       list program for a free software project maintainer as opposed
2468       to a good mailing list application for a mailing list
2469       administrator.
2470      </para>
2471
2472      <para>
2473       There are other things you want to take into consideration in
2474       setting up your list. If it is possible to gate your mailing
2475       lists to Usenet and provide it in digest form as well as
2476       making them accessible on the web, you will please some users
2477       and work to make the support infrastructure slightly more
2478       accessible.
2479      </para>
2480     </sect4>
2481    </sect3>
2482
2483    <sect3>
2484     <title>Other support ideas</title>
2485
2486     <para>
2487      A mailing list and accessible documentation are far from all you
2488      can do to set up good user support infrastructure. Be
2489      creative. If you stumble across something that works well, email me
2490      and I'll include it here.
2491     </para>
2492
2493     <sect4>
2494      <title>Make your self accessible</title>
2495      <para>
2496       You can not list too few methods to reach you. If you hang out
2497       in an <acronym>IRC</acronym> channel, don't hesitate to list it
2498       in your projects documentation. List email and snailmail
2499       addresses, and ways to reach you via <acronym>ICQ</acronym>,
2500       <acronym>AIM</acronym>, or Jabber if they apply.
2501     </para>
2502     </sect4>
2503
2504     <sect4>
2505      <title>Bug management software</title>
2506      <para>
2507       For many large software projects, use of bug management software
2508       is essential to keep track of which bugs have been fixed, which
2509       bugs have not been fixed, and which bugs are being fixed by
2510       which people. Debian uses the <ulink
2511       url="http://bugs.debian.org">Debian Bug Tracking System</ulink>
2512       (<acronym>BTS</acronym>) although it may not be best choice for
2513       every project (it seems to currently be buckling under its own
2514       weight) As well as a damn good web browser, the Mozilla project
2515       has spawned a sub-project resulting in a bug tracking system
2516       called <ulink
2517       url="http://www.mozilla.org/projects/bugzilla/">bugzilla</ulink>
2518       which has become extremely possible and which I like a lot.
2519      </para>
2520
2521      <para>
2522       These systems (and others like them) can be unwieldy so
2523       developers should be careful to not spend more time on the bug
2524       tracking system than on the bugs or the projects themselves. If
2525       a project continues to grow, use of a bug tracking system can
2526       provide an easy standard avenue for users and testers to report
2527       bugs and for developers and maintainers to fix them and track
2528       them in an orderly fashion.
2529      </para>
2530     </sect4>
2531    </sect3>
2532   </sect2>
2533
2534 <!-- Section2: releasing -->
2535
2536   <sect2 id="releasing">
2537    <title>Releasing Your Program</title>
2538
2539    <para>
2540     As mentioned earlier in the HOWTO, the first rule of releasing is,
2541     <emphasis>release something useful.</emphasis> Non-working or
2542     not-useful software will not attract anyone to your
2543     project. People will be turned off of your project and will be likely
2544     to simply gloss over it next time they see a new version
2545     announced. Half-working software, if useful, will intrigue people,
2546     whet their appetites for versions to come, and encourage them to
2547     join the development process.
2548    </para>
2549
2550    <sect3>
2551     <title>When to release</title>
2552
2553     <para>
2554      Making the decision to release your software for the first time
2555      is an incredibly important and incredibly stressful decision. But
2556      it needs to  done. My advice is to try and make something that
2557      is complete enough to be usable and incomplete enough to allow
2558      for flexibility and room for imagination by your future
2559      developers. It's not an easy decision. Ask for help on a local
2560      Linux User Group mailing list or from a group of developer
2561      friends.
2562     </para>
2563
2564     <para>
2565      One tactic is to first do an <quote>alpha</quote> or
2566      <quote>beta</quote> release as described below in <xref
2567      linkend="alphabeta">. However, most of the guidelines described
2568      above still apply.
2569     </para>
2570
2571     <para>
2572      <emphasis>When you feel in your gut that it is time and you feel
2573      you've weighed the situation well several times, cross your
2574      fingers and take the plunge.</emphasis>
2575    </para>
2576
2577     <para>
2578      After you've released for the first time, knowing when to release
2579      becomes less stressful, but just as difficult to gauge. I like
2580      the criteria offered by Robert Krawitz in his article, <ulink
2581      url="http://www.advogato.org/article/196.html"><quote>Free
2582      Software Project Management</quote></ulink> for maintaining a
2583      good release cycle. He recommends that you ask yourself,
2584      <quote>does this release...</quote>
2585     </para>
2586
2587     <para>
2588      <itemizedlist>
2589       <listitem>
2590        <para>Contain sufficient new functionality or bug fixes to be
2591        worth the effort.</para>
2592       </listitem>
2593
2594       <listitem>
2595        <para>Be spaced sufficiently far apart to allow the user time
2596        to work with the latest release.</para>
2597       </listitem>
2598
2599       <listitem>
2600        <para>Be sufficiently functional so that the user can get work
2601        done (quality).</para>
2602       </listitem>
2603      </itemizedlist>
2604     </para>
2605
2606     <para>
2607      If the answer is yes to all of these questions, its probably time
2608      for a release. If in doubt, remember that asking for advice can't
2609      hurt.
2610     </para>
2611    </sect3>
2612
2613    <sect3>
2614     <title>How to release</title>
2615
2616     <para>
2617      If you've followed the guidelines described in this HOWTO up
2618      until this point, the mechanics of doing a release are going to
2619      be the easy part of releasing. If you have set up consistent
2620      distribution locations and the other infrastructure described in
2621      the preceding sections, releasing should be as simple as building
2622      the package, checking it once over, and uploading it into the
2623      appropriate place and then making your website reflect the
2624      change.
2625     </para>
2626    </sect3>
2627
2628    <sect3 id="alphabeta">
2629     <title>Alpha, beta, and development releases</title>
2630
2631     <para>
2632      When contemplating releases, it worth considering the fact that
2633      not every release needs to be a full numbered release. Software
2634      users are accustomed to pre-releases but you must be careful to
2635      label these releases accurately or they will cause more problems then
2636      they are worth.
2637     </para>
2638
2639     <para>
2640      The observation is often made that many free software developers
2641      seem to be confused about the release cycle. <quote><ulink
2642      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2643      Projects the Open Source Way</ulink></quote> suggests that you memorize
2644      the phrase, <quote>Alpha is not Beta. Beta is not Release</quote>
2645      and I'd agree that tis is a probably a good idea.
2646     </para>
2647
2648     <para>
2649      <variablelist>
2650
2651       <varlistentry>
2652        <term>alpha releases</term>
2653        <listitem>
2654         <para>Alpha software is feature-complete but sometimes only
2655         partially functional.</para>
2656
2657         <para>Alpha releases are expected to be unstable, perhaps a
2658         little unsafe, but definitely usable. They
2659         <emphasis>can</emphasis> have known bugs and kinks that have
2660         yet to be worked out. Before releasing an alpha, be sure to
2661         keep in mind that <emphasis>alpha releases are still
2662         releases</emphasis> and people are not going to be expecting a
2663         nightly build from the CVS source. An alpha should work and
2664         have minimal testing and bug fixing already finished.</para>
2665        </listitem>
2666       </varlistentry>
2667
2668       <varlistentry>
2669        <term>beta releases</term>
2670        <listitem>
2671         <para>Beta software is feature-complete and functional, but is
2672         in the testing cycle and still has a few bugs left to be
2673         ironed out.</para>
2674
2675         <para>Beta releases are general expected to be usable and
2676         slightly unstable, although definitely <emphasis>not
2677         unsafe.</emphasis> Beta releases usually preclude a full
2678         release by under a month. They can contain small known bugs
2679         but no major ones. All major functionality should be fully
2680         implemented although the exact mechanics can still be worked
2681         out. Beta releases are great tool to whet the appetites of
2682         potential users by giving them a very realistic view of where
2683         your project is going to be in the very near future and can
2684         help keep interest by giving people
2685         <emphasis>something.</emphasis></para>
2686        </listitem>
2687       </varlistentry>
2688
2689       <varlistentry>
2690        <term>development releases</term>
2691        <listitem>
2692         <para><quote>Development release</quote> is much a more vague
2693         term than <quote>alpha</quote> or <quote>beta</quote>. I
2694         usually choose to reserve the term for discussion of a
2695         development branch although there are other ways to use the
2696         term. So many in fact, that I feel the term has been
2697         cheapened. The popular window manager <ulink
2698         url="http://www.enlightenment.org">Enlightenment</ulink> has
2699         released <emphasis>nothing but</emphasis> development
2700         releases. Most often, the term is used to describe releases
2701         that are not even alpha or beta and if I were to release a
2702         pre-alpha version of a piece of software in order to keep
2703         interest in my project alive, this is probably how I would
2704         have to label it.</para>
2705        </listitem>
2706       </varlistentry>
2707
2708      </variablelist>
2709
2710     </para>
2711    </sect3>
2712   </sect2>
2713
2714 <!-- Section2: announcing  -->
2715
2716   <sect2 id="announcing">
2717    <title>Announcing Your Project</title>
2718
2719    <para>
2720     Well, you've done it. You've (at least for the purposes of this
2721     HOWTO) designed, built, and released your free software
2722     project. All that is left is for you to tell the world so they
2723     know to come and try it out and hopefully jump on board with
2724     development. If everything is in order as described above, this
2725     will be a quick and painless process. A quick announcement is all
2726     that it takes to put yourself on the free software community's
2727     radar screen.
2728    </para>
2729
2730    <sect3>
2731     <title>Mailing lists and Usenet</title>
2732
2733     <para>Announce your software on Usenet's <ulink
2734     url="news:comp.os.linux.announce">comp.os.linux.announce</ulink>. If
2735     you only announce your software in two places, have it be c.o.l.a
2736     and freshmeat.</para>
2737
2738     <para>
2739      However, email is still the way that most people on the Internet
2740      get their information. Its a good idea to send a message
2741      announcing your program to any relevant mailing list you know of
2742      and any other relevant Usenet discussion groups.</para>
2743
2744     <para>Karl Fogel recommends that use you simple subject
2745      describing the fact that the message is an announcement, the name
2746      of the program, the version, and a half-line long description of
2747      its functionality. This way, any interested user or developer
2748      will be immediately attracted to your announcement. Fogel's
2749      example looks like:
2750     </para>
2751
2752     <screen>Subject: ANN: aub 1.0, a program to assemble Usenet binaries</screen>
2753
2754     <para>
2755      The rest of the email should describe the programs functionality
2756      quickly and concisely in no more than two paragraphs and should
2757      provide links to the projects webpage and direct links to
2758      downloads for those that want to try it right away. This form
2759      will work for both Usenet and mailing list posts.
2760     </para>
2761
2762     <para>
2763      You should repeat this announcement process consistently in the
2764      same locations for each subsequent release.
2765     </para>
2766    </sect3>
2767
2768    <sect3>
2769     <title>freshmeat.net</title>
2770     <para>
2771      Mentioned earlier in <xref linkend="evalwhere">, in today's free
2772      software community, announcements of your project on freshmeat
2773      are almost more important than announcements on mailing lists.
2774     </para>
2775
2776     <para>
2777      Visit the <ulink url="http://freshmeat.net">freshmeat.net
2778      website</ulink> or their <ulink
2779      url="http://freshmeat.net/add-project/">submit project
2780      page</ulink> to post your project onto their site and into their
2781      database. In addition to a large website, freshmeat provides a
2782      daily newsletter that highlights all the days releases and
2783      reaches a huge audience (I personally skim it every night for any
2784      interesting new releases).
2785     </para>
2786    </sect3>
2787
2788    <sect3>
2789     <title>Project Mailing List</title>
2790
2791     <para>If you've gone ahead and created mailing lists for your
2792     project, you should always announce new versions on these
2793     lists. I've found that for many projects, users request a very
2794     low-volume announce only mailing list to be notified when new
2795     versions are released. freshmeat.net now allows users to subscribe
2796     to a particular project so they receive emails every time a new
2797     version is announced through their system. It's free and it can
2798     stand in for an announce-only mailing list. In my opinion, it
2799     can't hurt.</para>
2800    </sect3>
2801   </sect2>
2802 </sect1>
2803
2804  <bibliography>
2805
2806   <bibliodiv>
2807    <title>Printed Books</title>
2808
2809    <biblioentry>
2810     <biblioset>
2811      <author>
2812       <surname>Fogel</surname>
2813       <firstname>Karl</firstname>
2814      </author>
2815      
2816      <title>Open Source Development with CVS</title>
2817      
2818      <publisher>
2819       <publishername>Coriolois Open Press</publishername>
2820      </publisher>
2821      <pubdate>1999</pubdate>
2822
2823      <isbn>1-57610-490-7</isbn>
2824
2825      <abstract>
2826       <para>
2827        Fogel's <quote>guide to using CVS in the free software
2828        world</quote> is much more than its subtitle. In the publisher's
2829        own words: <quote><emphasis>Open Source Development with
2830        CVS</emphasis> is one of the first books available that teaches
2831        you development and implementation of Open Source
2832        software.</quote> It also includes the best reference and
2833        tutorial to CVS I have ever seen. It is the book that was
2834        <emphasis>so good</emphasis> that it prompted me to write this
2835        HOWTO because I thought the role it tried to serve was so
2836        important and useful. Please check it or buy it if you can and
2837        are seriously interested in running a free software project.
2838       </para>
2839
2840       <para>In May of 2003, the entire book under the GPL. You can
2841       find the full text of the book <ulink
2842       url="http://cvsbook.red-bean.com/">here</ulink>.</para>
2843      </abstract>
2844     </biblioset>
2845    </biblioentry>
2846
2847    <biblioentry
2848     <biblioset>
2849      <author>
2850       <surname>Lessig</surname>
2851       <firstname>Lawrence</firstname>
2852      </author>
2853
2854      <title>Code and Other Laws of Cyberspace</title>
2855      
2856      <publisher>
2857       <publishername>Basic Books</publishername>
2858      </publisher>
2859      <pubdate>2000</pubdate>
2860      
2861      <isbn>0-465-03913-8</isbn>
2862
2863      <abstract>
2864       <para>
2865        While it only briefly talks about free software (and does it by
2866        tiptoeing around the free software/open source issue with the
2867        spineless use of the term <quote>open code</quote> that only a
2868        lawyer could coin), Lessig's book is brilliant. Written by a
2869        lawyer, it talks about how regulation on the Internet is not
2870        done with law, but with the code itself and how the nature of
2871        the code will determine the nature of future freedoms. In
2872        addition to being a quick and enjoyable read, it gives some
2873        cool history and describes how we <emphasis>need</emphasis>
2874        free software in a way more powerfully than anything I've read
2875        outside of <ulink
2876        url="http://www.gnu.org/philosophy/right-to-read.html">RMS's
2877        <quote>Right to Read.</quote></ulink>
2878       </para>
2879      </abstract>
2880     </biblioset>
2881    </biblioentry>
2882    
2883    <biblioentry>
2884     <biblioset>
2885      <author>
2886       <surname>Raymond</surname>
2887       <firstname>Eric</firstname>
2888      </author>
2889      
2890      <title>The Cathedral and the Bazaar</title>
2891      <subtitle>Musings on Linux and Open Source by an Accidental Revolutionary</subtitle>
2892      
2893      <publisher>
2894       <publishername>O'Reilly</publishername>
2895      </publisher>
2896      <pubdate>1999</pubdate>
2897     
2898      <isbn>1-56592-724-9</isbn>
2899      <abstract>
2900       <para>
2901        Although I have to honestly say that I am not the ESR fan that
2902        I used to be, this book proved invaluable in getting me where I
2903        am today. The essay that gives the book its title does a good
2904        job of sketching the free software process and does an an
2905        amazing job of making an argument for free software/open source
2906        development as a road to better software. The rest of the book
2907        has other of ESR's articles, which for the most part are posted
2908        on his website. Still, it's nice thing to own in hard copy and
2909        something that every free software/open source hacker should
2910        read.
2911       </para>
2912      </abstract>
2913     </biblioset>
2914    </biblioentry>
2915   </bibliodiv>
2916
2917   <bibliodiv>
2918    <title>Web-Accessible Resources</title>
2919
2920    <para>
2921     This is a list of the web resources pertaining to this HOWTO that
2922     I've found most helpful in compiling this information. If you know
2923     of others that would help, please don't hesitate to email me at
2924     <email>mako@atdot.cc</email> and we can look into getting it
2925     added to the list and represented in the HOWTO.
2926    </para>
2927
2928    <para>
2929     I'd recommend that any free software developer (or potential one)
2930     skim through these sites because they have each have a lot to say.
2931    </para>
2932
2933
2934    <biblioentry>
2935     <biblioset>
2936      <author>
2937       <surname>Dafermos</surname>
2938       <firstname>George</firstname>
2939       <othername>N</othername>
2940      </author>
2941
2942      <title><ulink url="http://firstmonday.org/issues/issue6_11/dafermos/">Management and Virtual Decentralized Networks: The Linux Project</ulink></title>
2943
2944      <abstract>
2945       <para>Since the paper includes its own abstract, I thought I
2946       would include it here verbatim:</para>
2947
2948       <para><blockquote><para>This paper examines the latest of
2949         paradigms - the Virtual Network(ed) Organisation - and whether
2950         geographically dispersed knowledge workers can virtually
2951         collaborate for a project under no central
2952         planning. Co-ordination, management and the role of knowledge
2953         arise as the central areas of focus. The Linux Project and its
2954         development model are selected as a case of analysis and the
2955         critical success factors of this organisational design are
2956         identified. The study proceeds to the formulation of a
2957         framework that can be applied to all kinds of virtual
2958         decentralised work and concludes that value creation is
2959         maximized when there is intense interaction and uninhibited
2960         sharing of information between the organisation and the
2961         surrounding community. Therefore, the potential success or
2962         failure of this organisational paradigm depends on the degree
2963         of dedication and involvement by the surrounding
2964         community.</para></blockquote></para>
2965
2966       <para>This paper was referred to me in my capacity as author of
2967       this HOWTO and I was very impressed. It's written by a graduate
2968       student in management and I think it succeeds at evaluating the
2969       Linux project as an example of a new paradigm in management--one
2970       that <emphasis>you</emphasis> will be be placing yourself at the
2971       center of in your capacity as maintainer of a free software
2972       project.</para>
2973
2974       <para>As a developer trying to control an application and guide
2975       it to success in the free software world, I'm not sure how
2976       useful Dafermos's argument is. It does however, provide a
2977       theoretical justification for my HOWTO--free software project
2978       management <emphasis>is</emphasis> a different creature than
2979       proprietary software project management. If you are interested
2980       in the conceptual and theoretical ways that free software
2981       project management differs from other types of management, this
2982       is a great paper to read. If this paper answers questions of
2983       <quote>how?</quote>, Dafermos answers the (more difficult to
2984       defend) questions of <quote>why?</quote> and does a very good
2985       job.</para>
2986
2987
2988      </abstract>
2989     </biblioset>
2990    </biblioentry>
2991
2992    <biblioentry>
2993     <biblioset>
2994      <author>
2995       <surname>Gabriel</surname>
2996       <firstname>Richard</firstname>
2997      </author>
2998      
2999      <title><ulink
3000      url="http://www.jwz.org/doc/worse-is-better.html">The Rise of
3001      <quote>Worse is Better</quote></ulink></title>
3002
3003      <abstract>
3004       <para>
3005        A well written article although I think the title may have
3006        confused as many people as the rest of the essay helped. It
3007        offers a good description of how to design programs that will
3008        succeed and stay maintainable as they grow.
3009       </para>
3010      </abstract>
3011     </biblioset>
3012    </biblioentry>
3013
3014    <biblioentry>
3015     <biblioset>
3016      <author>
3017       <surname>Manley</surname>
3018       <firstname>Montey</firstname>
3019      </author>
3020      
3021      <title><ulink
3022      url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
3023      Projects the Open Source Way</ulink></title>
3024      
3025      <publisher>
3026       <publishername><ulink
3027       url="http://www.linuxprogramming.com">Linux
3028       Programming</ulink></publishername>
3029      </publisher>
3030      <pubdate>Oct 31, 2000</pubdate>
3031
3032      <abstract>
3033       <para>
3034        In one of the better articles on the subject that I've read,
3035        Monty sums up some of the major points I touch on including:
3036        starting a project, testing, documentation, organizing a team and
3037        leadership, and several other topics. While more opinionated that
3038        I try to be, I think its an important article that I found very
3039        helpful in writing this HOWTO. I've tried to cite him in
3040        the places where I borrowed from him most.
3041       </para>
3042
3043       <para>
3044        I have problems much of this piece and I recommend you read
3045        <xref linkend="krawitz"> at the same time you read Monty's
3046        article for a good critique.
3047       </para>
3048      </abstract>
3049     </biblioset>
3050    </biblioentry>
3051
3052    <biblioentry id="esrhowto">
3053     <biblioset>
3054      <author>
3055       <surname>Raymond</surname>
3056       <firstname>Eric</firstname>
3057       <othername>Steven</othername>
3058      </author>
3059
3060      <title><ulink url="http://www.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html">Software Release Practice HOWTO</ulink></title>
3061
3062      <abstract>
3063
3064       <para>At first glance, ESR's release practice HOWTO seems to
3065       share a lot of terrain with this document. Upon closer
3066       examination, the differences become apparent but they are
3067       closely related. His document, read in conjunction with mine,
3068       will give a reader a good picture of how to go about managing a
3069       project. ESR's HOWTO goes into a bit more detail on how to write
3070       and what languages to write in. He tends to give more specific
3071       instructions and checklists (<quote>name this file this, not
3072       this</quote>) while this HOWTO speaks more conceptually. There
3073       are several sections that are extremely similar. It's also
3074       <emphasis>much</emphasis> shorter.</para>
3075
3076       <para>My favorite quote from his HOWTO is: <quote>"Managing a
3077       project well when all the participants are volunteers presents
3078       some unique challenges. This is too large a topic to cover in a
3079       HOWTO.</quote> Oh really? Perhaps I just do a poor job.</para>
3080      </abstract>
3081
3082     </biblioset>
3083    </biblioentry>
3084
3085
3086    <biblioentry id="cvsbestpractices">
3087     <biblioset>
3088      <author>
3089       <surname>Venugopalan</surname>
3090       <firstname>Vivek</firstname>
3091      </author>
3092
3093      <title><ulink url="http://www.magic-cauldron.com/cm/cvs-bestpractices/index.html">CVS Best Practices</ulink></title>
3094
3095      <abstract>
3096
3097       <para>Venugopalan provides one of the best essays on
3098       effective use of CVS that I've come across. It is written for
3099       people who already have a good knowledge of CVS. In the chapter
3100       on branching, he describes when and how to branch but gives no
3101       information on what CVS commands you should use to do this. This
3102       is fine (technical CVS HOWTO have been written) but CVS newbies
3103       will want to spend some time with Fogel's reference before they
3104       will find this one very useful.</para>
3105
3106       <para>Venugopalan creates checklists of things to do before,
3107       after, and around releases. It's definitely worth a read through
3108       as most of his ideas will save tons of developer head aches over
3109       any longer period of time.</para>
3110
3111      </abstract>
3112     </biblioset>
3113    </biblioentry>
3114
3115   </bibliodiv>
3116
3117   <bibliodiv>
3118    <title>Advogato Articles</title>
3119
3120    <para>
3121     I've found that one of the best resources that any free software
3122     developer has at his or her disposal is Advogato.org. If you haven't
3123     yet had a chance to visit <ulink url="http://www.advogato.org">the
3124     website</ulink>, do.
3125    </para>
3126
3127    <para>
3128     I have spent a huge amount of time on Advogato and I've gone
3129     through and provided links to the articles that I think might be
3130     of particular interest to anyone reading this HOWTO. I think that
3131     skimming through these links can be helpful and I promise that if
3132     you do, you'll learn a lot. You will learn that my idea of how a
3133     free software project should be run is not the
3134     <emphasis>only</emphasis> idea. I think that's important.
3135    </para>
3136
3137    <para>
3138     If nothing else, there is <emphasis>way</emphasis> more
3139     information on that website than I could ever fit into, or
3140     reference from this HOWTO. I have listed what I think are the most
3141     relevant articles here with short descriptions that I've written.
3142    </para>
3143
3144
3145    <biblioentry>
3146     <biblioset>
3147      <author>
3148       <surname>Hindle</surname>
3149       <firstname>Stephen</firstname>
3150      </author>
3151      
3152      <title><ulink url="http://www.advogato.org/article/262.html">'Best Practices' for Open Source?</ulink></title>
3153      
3154      <publisher>
3155       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3156      </publisher>
3157      <pubdate>March 21, 2001</pubdate>
3158
3159      <abstract>
3160       <para>
3161        Touching mostly on programming practice (as most articles on
3162        the subject usually do), the article talks a little about
3163        project management (<quote>Use it!</quote>) and a bit about
3164        communication within a free software project.
3165       </para>
3166      </abstract>
3167     </biblioset>
3168    </biblioentry>
3169
3170    <biblioentry>
3171     <biblioset>
3172      <author>
3173       <surname>Cohen</surname>
3174       <firstname>Bram</firstname>
3175      </author>
3176      
3177      <title><ulink
3178      url="http://www.advogato.org/article/258.html"></ulink>How to
3179      Write Maintainable Code</title>
3180      
3181      <publisher>
3182       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3183      </publisher>
3184      <pubdate>March 15, 2001</pubdate>
3185      
3186      <abstract>
3187       <para>
3188        This article touches upon the "writing maintainable code"
3189        discussion that I try hard to avoid in my HOWTO. It's one of
3190        the better (and most diplomatic) articles on the subject that
3191        I've found.
3192       </para>
3193      </abstract>
3194     </biblioset>
3195    </biblioentry>
3196    <biblioentry id="krawitz">
3197     <biblioset>
3198      <author>
3199       <surname>Krawitz</surname>
3200       <firstname>Robert</firstname>
3201      </author>
3202      
3203      <title><ulink url="http://www.advogato.org/article/196.html">Free
3204      Source Project Management</ulink></title>
3205      
3206      <publisher>
3207       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3208      </publisher>
3209      <pubdate>November 4, 2000</pubdate>
3210     
3211      <abstract>
3212       <para>
3213        This article made me happy because it challenged many of the
3214        problems that I had with Monty's article on <ulink
3215        url="http://www.linuxprogramming.com">LinuxProgramming</ulink>. The
3216        author argues that Monty calls simply for the application of
3217        old (proprietary software) project management techniques in
3218        free software projects instead of working to come up with
3219        something new. I found his article to be extremely well thought
3220        out and I think it's an essential read for any free software
3221        project manager.
3222       </para>
3223      </abstract>
3224     </biblioset>
3225    </biblioentry>
3226
3227    <biblioentry>
3228     <biblioset>
3229      <author>
3230       <surname>Martins</surname>
3231       <firstname>Lalo</firstname>
3232      </author>
3233      
3234      <title><ulink url="http://www.advogato.org/article/128.html">Ask
3235      the Advogatos: why do Free Software projects
3236      fail?</ulink></title>
3237      
3238      <publisher>
3239       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3240      </publisher>
3241      <pubdate>July 20, 2000</pubdate>
3242
3243      <abstract>
3244       <para>
3245        While the article is little more than a question, reading the
3246        answers to this question offered by Advogato's readers can
3247        help. In a lot of ways, this HOWTO acts as my answer to the
3248        questions posed in this article but there are others, many of
3249        which might take issue with whats is in this HOWTO. It's worth
3250        checking out.
3251       </para>
3252      </abstract>
3253     </biblioset>
3254    </biblioentry>
3255
3256    <biblioentry>
3257     <biblioset>
3258      <author>
3259       <surname>Burley</surname>
3260       <firstname>David</firstname>
3261      </author>
3262      
3263      <title><ulink
3264      url="http://www.advogato.org/article/107.html">In-Roads to Free
3265      Software Development</ulink></title>
3266      
3267      <publisher>
3268       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3269      </publisher>
3270      <pubdate>June 14, 2000</pubdate>
3271     
3272      <abstract>
3273       <para>
3274        This document was written as a response to <ulink
3275        url="http://www.advogato.org/article/72.html">another Advogato
3276        article</ulink>. Although not about running a project, this
3277        describes some of the ways that you can get started with free
3278        software development without starting a project. I think this
3279        is an important article. If you are interested in becoming
3280        involved with free software, this article showcases some of the
3281        ways that you can do this without actually starting a project
3282        (something that I hope this HOWTO has demonstrated is not to be
3283        taken lightly).
3284       </para>
3285      </abstract>
3286     </biblioset>
3287    </biblioentry>
3288
3289    <biblioentry>
3290     <biblioset>
3291      <author>
3292       <surname>Moorman</surname>
3293       <firstname>Jacob</firstname>
3294      </author>
3295
3296      <title><ulink url="http://www.advogato.org/article/72.html">Importance of
3297      Non-Developer Supporters in Free Software</ulink><title></title>
3298
3299      <publisher>
3300       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3301      </publisher>
3302      <pubdate>April 16, 2000</pubdate>
3303     
3304      <abstract>
3305       <para>
3306        Moorman's is a short article but it brings up some good
3307        points. The comment reminding developers to thank their testers
3308        and end-users is invaluable and oft-forgotten.
3309       </para>
3310      </abstract>
3311     </biblioset>
3312    </biblioentry>
3313
3314    <biblioentry>
3315     <biblioset>
3316      <author>
3317       <surname>Orchard</surname>
3318       <firstname>Leslie</firstname>
3319      </author>
3320      
3321      <title><ulink url="http://www.advogato.org/article/67.html">On
3322      Naming an Open Source Project</ulink></title>
3323      
3324      <publisher>
3325       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3326      </publisher>
3327      <pubdate>April 12, 2000</pubdate>
3328     
3329      <abstract>
3330       <para>
3331        I didn't even have a section on project naming in this HOWTO
3332        (See <xref linkend="naming">) until Leslie Orchard's article
3333        reminded me of it. Thanks to Leslie for writing this article!
3334       </para>
3335      </abstract>
3336     </biblioset>
3337    </biblioentry>
3338
3339    <biblioentry>
3340     <biblioset>
3341      <author>
3342       <surname>Allen</surname>
3343       <firstname>David</firstname>
3344      </author>
3345      
3346      <title><ulink url="http://www.advogato.org/article/40.html">Version Numbering Madness</ulink></title>
3347      
3348      <publisher>
3349       <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3350      </publisher>
3351      <pubdate>February 28, 2000</pubdate>
3352     
3353      <abstract>
3354       <para>
3355        In this article, David Allen challenges the whole
3356        <quote>Major.Minor.Patch</quote> version numbering scheme. Its
3357        good to read this as you read <xref
3358        linkend="chooseversioning">. I liked the article and it
3359        describes some of the projects that I bring up in my discussion
3360        of version numbering.
3361       </para>
3362      </abstract>
3363     </biblioset>
3364    </biblioentry>
3365
3366   </bibliodiv>
3367  </bibliography>
3368
3369   <appendix id="fdl">
3370   <title>GNU Free Documentation License</title>
3371   <para>
3372     Copyright (C) 2000, 2001, 2002 Free Software Foundation,
3373     <abbrev>Inc.</abbrev> 51 Franklin <abbrev>St</abbrev>, Fifth Floor,
3374     Boston, <abbrev>MA</abbrev> 02110-1301 <abbrev
3375     role="initialism">USA</abbrev>.  Everyone is permitted to copy and
3376     distribute verbatim copies of this license document, but changing it is
3377     not allowed.
3378   </para>
3379   <bridgehead id="Preamble" renderas="sect1">
3380     0. PREAMBLE
3381   </bridgehead>
3382   <para>
3383     The purpose of this License is to make a manual, textbook, or other
3384     functional and useful document "free" in the sense of freedom: to assure
3385     everyone the effective freedom to copy and redistribute it, with or
3386     without modifying it, either commercially or noncommercially.
3387     Secondarily, this License preserves for the author and publisher a way to
3388     get credit for their work, while not being considered responsible for
3389     modifications made by others.
3390   </para>
3391   <para>
3392     This License is a kind of "copyleft", which means that derivative works of
3393     the document must themselves be free in the same sense.  It complements
3394     the GNU General Public License, which is a copyleft license designed for
3395     free software.
3396   </para>
3397   <para>
3398     We have designed this License in order to use it for manuals for free
3399     software, because free software needs free documentation: a free program
3400     should come with manuals providing the same freedoms that the software
3401     does.  But this License is not limited to software manuals; it can be used
3402     for any textual work, regardless of subject matter or whether it is
3403     published as a printed book.  We recommend this License principally for
3404     works whose purpose is instruction or reference.</para>
3405   <bridgehead id="Definitions" renderas="sect1">
3406     1. APPLICABILITY AND DEFINITIONS
3407   </bridgehead>
3408   <para>
3409     This License applies to any manual or other work, in any medium, that
3410     contains a notice placed by the copyright holder saying it can be
3411     distributed under the terms of this License.  Such a notice grants a
3412     world-wide, royalty-free license, unlimited in duration, to use that work
3413     under the conditions stated herein.  The "Document", below, refers to any
3414     such manual or work.  Any member of the public is a licensee, and is
3415     addressed as "you".  You accept the license if you copy, modify or
3416     distribute the work in a way requiring permission under copyright
3417     law.
3418   </para>
3419   <para>
3420     A "Modified Version" of the Document means any work containing the
3421     Document or a portion of it, either copied verbatim, or with modifications
3422     and/or translated into another language.
3423   </para>
3424   <para>
3425     A "Secondary Section" is a named appendix or a front-matter section of the
3426     Document that deals exclusively with the relationship of the publishers or
3427     authors of the Document to the Document's overall subject (or to related
3428     matters) and contains nothing that could fall directly within that overall
3429     subject.  (Thus, if the Document is in part a textbook of mathematics, a
3430     Secondary Section may not explain any mathematics.)  The relationship
3431     could be a matter of historical connection with the subject or with
3432     related matters, or of legal, commercial, philosophical, ethical or
3433     political position regarding them.
3434   </para>
3435   <para>
3436     The "Invariant Sections" are certain Secondary Sections whose titles are
3437     designated, as being those of Invariant Sections, in the notice that says
3438     that the Document is released under this License.  If a section does not
3439     fit the above definition of Secondary then it is not allowed to be
3440     designated as Invariant.  The Document may contain zero Invariant
3441     Sections.  If the Document does not identify any Invariant Sections then
3442     there are none.
3443   </para>
3444   <para>
3445     The "Cover Texts" are certain short passages of text that are listed, as
3446     Front-Cover Texts or Back-Cover Texts, in the notice that says that the
3447     Document is released under this License.  A Front-Cover Text may be at
3448     most 5 words, and a Back-Cover Text may be at most 25 words.
3449   </para>
3450   <para>
3451     A "Transparent" copy of the Document means a machine-readable copy,
3452     represented in a format whose specification is available to the general
3453     public, that is suitable for revising the document straightforwardly with
3454     generic text editors or (for images composed of pixels) generic paint
3455     programs or (for drawings) some widely available drawing editor, and that
3456     is suitable for input to text formatters or for automatic translation to a
3457     variety of formats suitable for input to text formatters.  A copy made in
3458     an otherwise Transparent file format whose markup, or absence of markup,
3459     has been arranged to thwart or discourage subsequent modification by
3460     readers is not Transparent.  An image format is not Transparent if used
3461     for any substantial amount of text.  A copy that is not "Transparent" is
3462     called "Opaque".
3463   </para>
3464   <para>
3465     Examples of suitable formats for Transparent copies include plain ASCII
3466     without markup, Texinfo input format, LaTeX input format, SGML or XML
3467     using a publicly available DTD, and standard-conforming simple HTML,
3468     PostScript or PDF designed for human modification.  Examples of
3469     transparent image formats include PNG, XCF and JPG.  Opaque formats
3470     include proprietary formats that can be read and edited only by
3471     proprietary word processors, SGML or XML for which the DTD and/or
3472     processing tools are not generally available, and the machine-generated
3473     HTML, PostScript or PDF produced by some word processors for output
3474     purposes only.
3475   </para>
3476   <para>
3477     The "Title Page" means, for a printed book, the title page itself, plus
3478     such following pages as are needed to hold, legibly, the material this
3479     License requires to appear in the title page.  For works in formats which
3480     do not have any title page as such, "Title Page" means the text near the
3481     most prominent appearance of the work's title, preceding the beginning of
3482     the body of the text.
3483   </para>
3484   <para>
3485     A section "Entitled XYZ" means a named subunit of the Document whose title
3486     either is precisely XYZ or contains XYZ in parentheses following text that
3487     translates XYZ in another language.  (Here XYZ stands for a specific
3488     section name mentioned below, such as "Acknowledgements", "Dedications",
3489     "Endorsements", or "History".)  To "Preserve the Title" of such a section
3490     when you modify the Document means that it remains a section "Entitled
3491     XYZ" according to this definition.
3492   </para>
3493   <para>
3494     The Document may include Warranty Disclaimers next to the notice which
3495     states that this License applies to the Document.  These Warranty
3496     Disclaimers are considered to be included by reference in this License,
3497     but only as regards disclaiming warranties: any other implication that
3498     these Warranty Disclaimers may have is void and has no effect on the
3499     meaning of this License.
3500   </para>
3501   <bridgehead id="VerbatimCopying" renderas="sect1">
3502     2. VERBATIM COPYING
3503   </bridgehead>
3504   <para>
3505     You may copy and distribute the Document in any medium, either
3506     commercially or noncommercially, provided that this License, the copyright
3507     notices, and the license notice saying this License applies to the
3508     Document are reproduced in all copies, and that you add no other
3509     conditions whatsoever to those of this License.  You may not use technical
3510     measures to obstruct or control the reading or further copying of the
3511     copies you make or distribute.  However, you may accept compensation in
3512     exchange for copies.  If you distribute a large enough number of copies
3513     you must also follow the conditions in section 3.
3514   </para>
3515   <para>
3516     You may also lend copies, under the same conditions stated above, and you
3517     may publicly display copies.
3518   </para>
3519   <bridgehead id="QuantityCopying" renderas="sect1">
3520     3. COPYING IN QUANTITY
3521   </bridgehead>
3522   <para>
3523     If you publish printed copies (or copies in media that commonly have
3524     printed covers) of the Document, numbering more than 100, and the
3525     Document's license notice requires Cover Texts, you must enclose the
3526     copies in covers that carry, clearly and legibly, all these Cover Texts:
3527     Front-Cover Texts on the front cover, and Back-Cover Texts on the back
3528     cover.  Both covers must also clearly and legibly identify you as the
3529     publisher of these copies.  The front cover must present the full title
3530     with all words of the title equally prominent and visible.  You may add
3531     other material on the covers in addition.  Copying with changes limited to
3532     the covers, as long as they preserve the title of the Document and satisfy
3533     these conditions, can be treated as verbatim copying in other
3534     respects.
3535   </para>
3536   <para>
3537     If the required texts for either cover are too voluminous to fit legibly,
3538     you should put the first ones listed (as many as fit reasonably) on the
3539     actual cover, and continue the rest onto adjacent pages.
3540   </para>
3541   <para>
3542     If you publish or distribute Opaque copies of the Document numbering more
3543     than 100, you must either include a machine-readable Transparent copy
3544     along with each Opaque copy, or state in or with each Opaque copy a
3545     computer-network location from which the general network-using public has
3546     access to download using public-standard network protocols a complete
3547     Transparent copy of the Document, free of added material.  If you use the
3548     latter option, you must take reasonably prudent steps, when you begin
3549     distribution of Opaque copies in quantity, to ensure that this Transparent
3550     copy will remain thus accessible at the stated location until at least one
3551     year after the last time you distribute an Opaque copy (directly or
3552     through your agents or retailers) of that edition to the public.
3553   </para>
3554   <para>
3555     It is requested, but not required, that you contact the authors of the
3556     Document well before redistributing any large number of copies, to give
3557     them a chance to provide you with an updated version of the
3558     Document.
3559   </para>
3560   <bridgehead id="Modifications" renderas="sect1">
3561     4. MODIFICATIONS
3562   </bridgehead>
3563   <para>
3564     You may copy and distribute a Modified Version of the Document under the
3565     conditions of sections 2 and 3 above, provided that you release the
3566     Modified Version under precisely this License, with the Modified Version
3567     filling the role of the Document, thus licensing distribution and
3568     modification of the Modified Version to whoever possesses a copy of it.
3569     In addition, you must do these things in the Modified Version:
3570   </para>
3571   <orderedlist numeration="upperalpha">
3572     <listitem>
3573       <simpara>
3574         Use in the Title Page (and on the covers, if any) a title distinct
3575         from that of the Document, and from those of previous versions (which
3576         should, if there were any, be listed in the History section of the
3577         Document).  You may use the same title as a previous version if the
3578         original publisher of that version gives permission.
3579         </simpara>
3580     </listitem>
3581     <listitem>
3582       <simpara>
3583         List on the Title Page, as authors, one or more persons or entities
3584         responsible for authorship of the modifications in the Modified
3585         Version, together with at least five of the principal authors of the
3586         Document (all of its principal authors, if it has fewer than five),
3587         unless they release you from this requirement.
3588       </simpara>
3589     </listitem>
3590     <listitem>
3591       <simpara>
3592         State on the Title page the name of the publisher of the Modified
3593         Version, as the publisher.
3594       </simpara>
3595     </listitem>
3596     <listitem>
3597       <simpara>
3598         Preserve all the copyright notices of the Document.
3599       </simpara>
3600     </listitem>
3601     <listitem>
3602       <simpara>
3603         Add an appropriate copyright notice for your modifications adjacent to
3604         the other copyright notices.
3605       </simpara>
3606     </listitem>
3607     <listitem>
3608       <simpara>
3609         Include, immediately after the copyright notices, a license notice
3610         giving the public permission to use the Modified Version under the
3611         terms of this License, in the form shown in the Addendum below.
3612       </simpara>
3613     </listitem>
3614     <listitem>
3615       <simpara>
3616         Preserve in that license notice the full lists of Invariant Sections
3617         and required Cover Texts given in the Document's license notice.
3618       </simpara>
3619     </listitem>
3620     <listitem>
3621       <simpara>
3622         Include an unaltered copy of this License.
3623       </simpara>
3624     </listitem>
3625     <listitem>
3626       <simpara>
3627         Preserve the section Entitled "History", Preserve its Title, and add
3628         to it an item stating at least the title, year, new authors, and
3629         publisher of the Modified Version as given on the Title Page.  If
3630         there is no section Entitled "History" in the Document, create one
3631         stating the title, year, authors, and publisher of the Document as
3632         given on its Title Page, then add an item describing the Modified
3633         Version as stated in the previous sentence.
3634       </simpara>
3635     </listitem>
3636     <listitem>
3637       <simpara>
3638         Preserve the network location, if any, given in the Document for
3639         public access to a Transparent copy of the Document, and likewise the
3640         network locations given in the Document for previous versions it was
3641         based on.  These may be placed in the "History" section.  You may omit
3642         a network location for a work that was published at least four years
3643         before the Document itself, or if the original publisher of the
3644         version it refers to gives permission.
3645       </simpara>
3646     </listitem>
3647     <listitem>
3648       <simpara>
3649         For any section Entitled "Acknowledgements" or "Dedications", Preserve
3650         the Title of the section, and preserve in the section all the
3651         substance and tone of each of the contributor acknowledgements and/or
3652         dedications given therein.
3653       </simpara>
3654     </listitem>
3655     <listitem>
3656       <simpara>
3657         Preserve all the Invariant Sections of the Document, unaltered in
3658         their text and in their titles.  Section numbers or the equivalent are
3659         not considered part of the section titles.
3660       </simpara>
3661     </listitem>
3662     <listitem>
3663       <simpara>
3664         Delete any section Entitled "Endorsements".  Such a section may not be
3665         included in the Modified Version.
3666       </simpara>
3667     </listitem>
3668     <listitem>
3669       <simpara>
3670         Do not retitle any existing section to be Entitled "Endorsements" or
3671         to conflict in title with any Invariant Section.
3672       </simpara>
3673     </listitem>
3674     <listitem>
3675       <simpara>
3676         Preserve any Warranty Disclaimers.
3677       </simpara>
3678     </listitem>
3679   </orderedlist>
3680   <para>
3681     If the Modified Version includes new front-matter sections or appendices
3682     that qualify as Secondary Sections and contain no material copied from the
3683     Document, you may at your option designate some or all of these sections
3684     as invariant.  To do this, add their titles to the list of Invariant
3685     Sections in the Modified Version's license notice.  These titles must be
3686     distinct from any other section titles.
3687   </para>
3688   <para>
3689     You may add a section Entitled "Endorsements", provided it contains
3690     nothing but endorsements of your Modified Version by various parties--for
3691     example, statements of peer review or that the text has been approved by
3692     an organization as the authoritative definition of a standard.
3693   </para>
3694   <para>
3695     You may add a passage of up to five words as a Front-Cover Text, and a
3696     passage of up to 25 words as a Back-Cover Text, to the end of the list of
3697     Cover Texts in the Modified Version.  Only one passage of Front-Cover Text
3698     and one of Back-Cover Text may be added by (or through arrangements made
3699     by) any one entity.  If the Document already includes a cover text for the
3700     same cover, previously added by you or by arrangement made by the same
3701     entity you are acting on behalf of, you may not add another; but you may
3702     replace the old one, on explicit permission from the previous publisher
3703     that added the old one.
3704   </para>
3705   <para>
3706     The author(s) and publisher(s) of the Document do not by this License give
3707     permission to use their names for publicity for or to assert or imply
3708     endorsement of any Modified Version.
3709   </para>
3710   <bridgehead id="Combining" renderas="sect1">
3711     5. COMBINING DOCUMENTS
3712   </bridgehead>
3713   <para>
3714     You may combine the Document with other documents released under this
3715     License, under the terms defined in section 4 above for modified versions,
3716     provided that you include in the combination all of the Invariant Sections
3717     of all of the original documents, unmodified, and list them all as
3718     Invariant Sections of your combined work in its license notice, and that
3719     you preserve all their Warranty Disclaimers.
3720   </para>
3721   <para>
3722     The combined work need only contain one copy of this License, and multiple
3723     identical Invariant Sections may be replaced with a single copy.  If there
3724     are multiple Invariant Sections with the same name but different contents,
3725     make the title of each such section unique by adding at the end of it, in
3726     parentheses, the name of the original author or publisher of that section
3727     if known, or else a unique number.  Make the same adjustment to the
3728     section titles in the list of Invariant Sections in the license notice of
3729     the combined work.
3730   </para>
3731   <para>
3732     In the combination, you must combine any sections Entitled "History" in
3733     the various original documents, forming one section Entitled "History";
3734     likewise combine any sections Entitled "Acknowledgements", and any
3735     sections Entitled "Dedications".  You must delete all sections Entitled
3736     "Endorsements".
3737   </para>
3738   <bridgehead id="Collections" renderas="sect1">
3739     6. COLLECTIONS OF DOCUMENTS
3740   </bridgehead>
3741   <para>
3742     You may make a collection consisting of the Document and other documents
3743     released under this License, and replace the individual copies of this
3744     License in the various documents with a single copy that is included in
3745     the collection, provided that you follow the rules of this License for
3746     verbatim copying of each of the documents in all other respects.
3747   </para>
3748   <para>
3749     You may extract a single document from such a collection, and distribute
3750     it individually under this License, provided you insert a copy of this
3751     License into the extracted document, and follow this License in all other
3752     respects regarding verbatim copying of that document.
3753   </para>
3754   <bridgehead id="Aggregation" renderas="sect1">
3755     7. AGGREGATION WITH INDEPENDENT WORKS
3756   </bridgehead>
3757   <para>
3758     A compilation of the Document or its derivatives with other separate and
3759     independent documents or works, in or on a volume of a storage or
3760     distribution medium, is called an "aggregate" if the copyright resulting
3761     from the compilation is not used to limit the legal rights of the
3762     compilation's users beyond what the individual works permit.  When the
3763     Document is included in an aggregate, this License does not apply to the
3764     other works in the aggregate which are not themselves derivative works of
3765     the Document.
3766   </para>
3767   <para>
3768     If the Cover Text requirement of section 3 is applicable to these copies
3769     of the Document, then if the Document is less than one half of the entire
3770     aggregate, the Document's Cover Texts may be placed on covers that bracket
3771     the Document within the aggregate, or the electronic equivalent of covers
3772     if the Document is in electronic form.  Otherwise they must appear on
3773     printed covers that bracket the whole aggregate.
3774   </para>
3775   <bridgehead id="Translation" renderas="sect1">
3776     8. TRANSLATION
3777   </bridgehead>
3778   <para>
3779     Translation is considered a kind of modification, so you may distribute
3780     translations of the Document under the terms of section 4.  Replacing
3781     Invariant Sections with translations requires special permission from
3782     their copyright holders, but you may include translations of some or all
3783     Invariant Sections in addition to the original versions of these Invariant
3784     Sections.  You may include a translation of this License, and all the
3785     license notices in the Document, and any Warranty Disclaimers, provided
3786     that you also include the original English version of this License and the
3787     original versions of those notices and disclaimers.  In case of a
3788     disagreement between the translation and the original version of this
3789     License or a notice or disclaimer, the original version will prevail.
3790   </para>
3791   <para>
3792     If a section in the Document is Entitled "Acknowledgements",
3793     "Dedications", or "History", the requirement (section 4) to Preserve its
3794     Title (section 1) will typically require changing the actual title.
3795   </para>
3796   <bridgehead id="Termination" renderas="sect1">
3797     9. TERMINATION
3798   </bridgehead>
3799   <para>
3800     You may not copy, modify, sublicense, or distribute the Document except as
3801     expressly provided for under this License.  Any other attempt to copy,
3802     modify, sublicense or distribute the Document is void, and will
3803     automatically terminate your rights under this License.  However, parties
3804     who have received copies, or rights, from you under this License will not
3805     have their licenses terminated so long as such parties remain in full
3806     compliance.
3807   </para>
3808   <bridgehead id="FutureRevisions" renderas="sect1">
3809     10. FUTURE REVISIONS OF THIS LICENSE
3810   </bridgehead>
3811   <para>
3812     The Free Software Foundation may publish new, revised versions of the GNU
3813     Free Documentation License from time to time.  Such new versions will be
3814     similar in spirit to the present version, but may differ in detail to
3815     address new problems or concerns.  See <ulink
3816     url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.
3817   </para>
3818   <para>
3819     Each version of the License is given a distinguishing version number.  If
3820     the Document specifies that a particular numbered version of this License
3821     "or any later version" applies to it, you have the option of following the
3822     terms and conditions either of that specified version or of any later
3823     version that has been published (not as a draft) by the Free Software
3824     Foundation.  If the Document does not specify a version number of this
3825     License, you may choose any version ever published (not as a draft) by the
3826     Free Software Foundation.
3827   </para>
3828   <bridgehead id="HowToUse" renderas="sect1">
3829     ADDENDUM: How to use this License for your documents
3830   </bridgehead>
3831   <para>
3832     To use this License in a document you have written, include a copy of the
3833     License in the document and put the following copyright and license
3834     notices just after the title page:
3835   </para>
3836   <blockquote>
3837     <para>
3838       Copyright (C) YEAR YOUR NAME.
3839     </para>
3840     <para>
3841       Permission is granted to copy, distribute and/or modify this document
3842       under the terms of the GNU Free Documentation License, Version 1.2 or
3843       any later version published by the Free Software Foundation; with no
3844       Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
3845       copy of the license is included in the section entitled "GNU Free
3846       Documentation License".
3847     </para>
3848   </blockquote>
3849   <para>
3850     If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
3851     replace the "with...Texts." line with this:
3852   </para>
3853   <blockquote>
3854     <para>
3855       with the Invariant Sections being LIST THEIR TITLES, with the
3856       Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
3857     </para>
3858   </blockquote>
3859   <para>
3860     If you have Invariant Sections without Cover Texts, or some other
3861     combination of the three, merge those two alternatives to suit the
3862     situation.
3863   </para>
3864   <para>
3865     If your document contains nontrivial examples of program code, we
3866     recommend releasing these examples in parallel under your choice of free
3867     software license, such as the GNU General Public License, to permit their
3868     use in free software.
3869   </para>
3870 </appendix>
3871
3872 </article>
3873
3874 <!-- Keep this comment at the end of the file
3875 Local variables:
3876 mode: sgml
3877 sgml-omittag:t
3878 sgml-shorttag:t
3879 sgml-namecase-general:t
3880 sgml-general-insert-case:lower
3881 sgml-minimize-attributes:nil
3882 sgml-always-quote-attributes:t
3883 sgml-indent-step:1
3884 sgml-indent-data:nil
3885 sgml-parent-document:nil
3886 sgml-exposed-tags:nil
3887 sgml-local-catalogs:nil
3888 sgml-local-ecat-files:nil
3889 End:
3890 -->

Benjamin Mako Hill || Want to submit a patch?