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

Benjamin Mako Hill || Want to submit a patch?