4499e578b318aaa0b0c4ae8cdcbfa384c6c848b9
[fspm_howto] / FreeSoftwareDevelopmentHOWTO.sgml
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
2
3 <article>
4
5 <!-- Header -->
6
7  <artheader>
8   <title>Free Software Development HOWTO</title>
9
10   <author>
11      <firstname>Benjamin</firstname>
12      <othername>Mako</othername>
13      <surname>Hill</surname>
14      <affiliation>
15         <address>
16            <email>mako@debian.org</email>
17
18         </address>
19      </affiliation>
20   </author>
21
22    <revhistory>
23       <revision>
24          <revnumber>v0.01</revnumber>
25          <date>25 March 2001</date>
26          <authorinitials>bch</authorinitials>
27           <revremark>
28           Initial Release
29          </revremark>
30       </revision>
31    </revhistory>
32
33   <abstract>
34     <indexterm>
35       <primary>fswd</primary>
36     </indexterm>
37
38     <para>
39      This HOWTO is designed for people with experience in programming
40      and some skills in managing a software project but who are new to
41      the world of Free Software. This document is meant to act as a
42      guide to the non-technical aspects of programming and was written
43      to act as a crash course in the people skills that aren't taught
44      to commercial coders but that can make or break a free software
45      project.
46     </para>
47   </abstract>
48
49  </artheader>
50
51 <!-- Section1: intro -->
52
53  <sect1 id="intro">
54    <title>Introduction</title>
55
56    <indexterm>
57     <primary>fswd!introduction</primary>
58    </indexterm>
59
60   <para>
61    For various reasons, this realease has been codenamed the
62    <emphasis>homade yogurt</emphasis> release.
63   </para>
64
65   <para>
66    New code names will appear as per industry standard
67    guidelines to emphasize the state-of-the-art-ness of this
68    document.
69   </para>
70
71   <para>
72    Skimming through Freshmeat provides mountains of reasons for this
73    HOWTO's existence--the Internet is littered with excellently
74    written and useful programs that have faded away into the Universe
75    of Free Software Forgottenness. This dismal scene made me ask
76    myself, "Why?"
77   </para>
78
79   <para>
80    This HOWTO tries to do a lot of thing (probably too many), but it
81    can't answer that question and won't attempt it. What this HOWTO
82    will attempt to do is give your Free Software project a fighting
83    chance-an edge. If you write a piece of crap that no one is
84    interested in, you can read this HOWTO until you recite it in your
85    sleep and your project will probably fail. Then again, you can
86    write a beautiful, relevent piece of software and follow every
87    instruction in this HOWTO and your software may still not make
88    it. Sometimes life is like that. However, I'll go out a limb and
89    say that if you write a great, relevant pieces of software and
90    ignore the advise in this HOWTO, you'll probably fail <emphasis>
91    more often</emphasis>.
92   </para>
93
94   <para>
95    A lot of the information in this HOWTO is best called common
96    sense. Of course, as any debate on interfaces will prove, what is
97    common sense to some programmers proves totally unintuitive to
98    others. After explaining bites and pieces of this HOWTO to Free
99    Software developers on several occasions, I realized that that
100    writing this HOWTO might provide a useful resource and a forum for
101    programmers to share ideas about what has and has not worked for
102    them. 
103   </para>
104
105   <para>
106
107   </para>
108
109   <para>
110    As anyone involved in any of what seems like an unending parade of
111    ridiculous intellectual property clashes will attest to, a little
112    bit of legalese proves important.
113   </para>
114
115 <!-- Section2: copyright -->
116
117   <sect2 id="copyright">
118    <title>Copyright Information</title>
119
120    <para>
121     This document is copyrighted (c) 2000 Benjamin (Mako) Hill and is
122     distributed under the terms of the Linux Documentation Project
123     (LDP) license, stated below.
124    </para>
125
126    <para>
127     Unless otherwise stated, Linux HOWTO documents are
128     copyrighted by their respective authors. Linux HOWTO documents may
129     be reproduced and distributed in whole or in part, in any medium
130     physical or electronic, as long as this copyright notice is
131     retained on all copies. Commercial redistribution is allowed and
132     encouraged; however, the author would like to be notified of any
133     such distributions.
134    </para>
135
136    <para>
137     All translations, derivative works, or aggregate works
138     incorporating any Linux HOWTO documents must be covered under this
139     copyright notice. That is, you may not produce a derivative work
140     from a HOWTO and impose additional restrictions on its
141     distribution. Exceptions to these rules may be granted under
142     certain conditions; please contact the Linux HOWTO coordinator at
143     the address given below.
144    </para>
145
146    <para>
147     In short, we wish to promote dissemination of this
148     information through as many channels as possible. However, we do
149     wish to retain copyright on the HOWTO documents, and would like to
150     be notified of any plans to redistribute the HOWTOs.
151    </para>
152
153    <para>
154     If you have any questions, please contact 
155     <email>linux-howto@metalab.unc.edu</email>
156    </para>
157   </sect2>
158
159 <!-- Section2: disclaimer -->
160
161   <sect2 id="disclaimer">
162    <title>Disclaimer</title>
163
164    <para>
165     No liability for the contents of this documents can be accepted.
166     Use the concepts, examples and other content at your own risk.
167     As this is a new edition of this document, there may be errors
168     and inaccuracies, that may of course be damaging to your system.
169     Proceed with caution, and although this is highly unlikely,
170     the author(s) do not take any responsibility for that.
171    </para>
172
173    <para>
174     All copyrights are held by their by their respective owners, unless
175     specifically noted otherwise.  Use of a term in this document
176     should not be regarded as affecting the validity of any trademark
177     or service mark.
178    </para>
179
180    <para>
181     Naming of particular products or brands should not be seen 
182     as endorsements.
183    </para>
184
185    <para>
186     You are strongly recommended to take a backup of your system 
187     before major installation and backups at regular intervals.
188    </para>
189   </sect2>
190
191 <!-- Section2: newversions-->
192
193   <sect2 id="newversions">
194    <title>New Versions</title>
195
196     <indexterm>
197      <primary>(your index root)!news on</primary>
198     </indexterm>
199
200    <para>
201     This is the initial release. It is written to be released to
202     developers for critique and brainstorming and submitted to
203     Hampshire College for academic credit. Please keep in mind that
204     this version of the HOWTO is still in an infant stage and will be
205     revised extensively before it hits the LDP.
206    </para>
207
208    <para>
209     The latest version number of this document should always be listed 
210     at my webpage at<ulink url="http://people.debian.org/~mako/">
211     http://people.debian.org/~mako/</ulink> Debian.
212    </para>
213
214    <para>
215     The newest version of this HOWTO will always be made available at
216     the same website, in a variety of formats:
217    </para>
218
219    <para>
220    <itemizedlist>
221     <listitem>
222      <para>
223       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.html">HTML</ulink>.
224      </para>
225     </listitem>
226
227     <listitem>
228      <para>
229        <ulink URL="http://people.debian.org/~mako/howto/fswd-howto.txt">plain text</ulink>.
230      </para>
231     </listitem>
232
233     <listitem>
234      <para>
235       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.US.ps.gz">compressed 
236        postscript (US letter format)</ulink>.
237      </para>
238     </listitem>
239
240     <listitem>
241      <para>
242       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.UF.ps.gz">compressed 
243        postscript (Universal format / 8.27x11in; 210x279mm)</ulink>.
244      </para>
245     </listitem>
246
247     <listitem>
248      <para>
249       <ulink url="http://people.debian.org/~mako/howto/fswd-howto.sgml">SGML source</ulink>.
250      </para>
251     </listitem>
252    </itemizedlist>
253    </para>
254   </sect2>
255
256 <!-- Section2: credits -->
257
258   <sect2 id="credits">
259    <title>Credits</title>
260
261    <para>
262     In this version I have the pleasure of acknowledging:
263    </para>
264
265    <para>
266     <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
267     Source Development with CVS</emphasis> published by the Coriolis
268     Open Press. Larges parts of the book are available <ulink
269     url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
270     the book are available under the GPL and constitute the best
271     tutorial on CVS I have ever seen. The rest of the book covers,
272     "the challenges and philosophical issues inherent in running an
273     Open Source project using CVS." The book does a good job of
274     covering some of the subjects brought up in this HOWTO and much
275     more. <ulink url="http://cvsbook.red-bean.com">The book's
276     website</ulink> has information on ordering the book and provides
277     several translations of the chapters on CVS. I you are seriously
278     interested in running a Free Software project, you want this book.
279    </para>
280    
281    <para>
282     Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
283     com</email>
284    </para>
285    <para>
286     Also providing support and material, and inspiration for this
287     HOWTO is Eric S. Raymond for his prolific, consitent, and
288     carefully crafted arguments, to Lawrence Lessig for reminding me
289     of the importance of Free Software and to every user and developer
290     involved with the <ulink url="http://www.debian.org">Debian
291     Project</ulink>. The project has provided me with a home, a place
292     to practice Free Software advocacy and to make a difference, a
293     place to learn from those how have been involved with the movement
294     much longer than I, and an proof of a Free Software project that
295     <emphasis>definately, definately works</emphasis>.
296    </para>
297
298    <para>
299     Above all, I want to thank <emphasis>Richard Stallman</emphasis>
300     for his work at the Free Software Foundation and for never giving
301     up. Stallman provided the philosphical basis that attracts me to
302     Free Software and that drives me towards writing a document to
303     make sure it succeeds. RMS can always be emailed at <email>rms
304     (at) gnu (dot) org</email>.
305    </para>
306
307   </sect2>
308
309 <!-- Section2: feedback -->
310
311   <sect2 id="feedback">
312    <title>Feedback</title>
313
314    <para>
315     Feedback is most certainly welcome for this document. Without your
316     submissions and input, this document wouldn't exist. Something
317     missing? Don't hesitate to contact me and to write a chapter. I
318     want this document to be as much a product of the Free Software
319     development process that it heralds and I think its ultimate
320     success will be rooted in this fact. Please send your additions,
321     comments and criticisms to the following email address :
322     <email>mako (at) debian (dot) org</email>.
323    </para>
324    </sect2>
325
326 <!-- Section2: translations -->
327
328   <sect2 id="translations">
329    <title>Translations</title>
330
331    <para>
332     I know that not everyone speaks English. Translations are nice and
333     I'd love for this HOWTO to gain the kind of international reach
334     afforded by a translated version.
335    </para>
336    <para>
337     However, this HOWTO is still young and I have to yet to be
338     contacted about a translation so English is all that is
339     available. If you would like to help with or do a translation, you
340     will gain my utmost respect and admiration and you'll get to be
341     part of a cool process. If you are at all interested, please don't
342     hesitate to contact me at: <email>mako (at) debian (dot)
343     org</email>.
344    </para>
345    </sect2>
346  </sect1>
347
348 <!-- Section1: intro: END -->
349
350 <!-- Section1: starting -->
351
352  <sect1 id="starting">
353   <title>Starting a Project</title>
354
355    <indexterm>
356     <primary>fswd!starting</primary>
357    </indexterm>
358   <para>
359    With very little argument, starting a project is most difficult
360    part of successful free software development. Laying a firm
361    foundation for your project will determine whether your project
362    flourishes or withers away and dies. It is also the subject that is
363    of most immediate interest to anyone reading this document as a
364    tutorial.
365   </para>
366
367   <para>
368    Starting a project also involves a dilemna that you as a developer
369    must try and deal with. No potential user for your program will be
370    interested by a program that doesn't work. Simultaneously, the
371    development process that you want to employ holds involvement of
372    users as essential to the process of the development that will
373    realize this working software.
374   </para>
375
376   <para>
377    It is in these dangerous initial moments that anyone working to
378    start a free software project must strike a balance. One of the
379    most important ways that omeone trying to start a project can work
380    towards this balance is by establishing a framework for the
381    development process through some of the ways mentioned in this
382    section.
383   </para>
384
385
386 <!-- Section2: chooseproject-->
387
388   <sect2 id="chooseproject">
389    <title>Choosing a Project</title>
390
391    <para>
392     If you are reading this document, there's a good chance you
393     already have an idea for a project in mind. Chances are pretty
394     good, it fills a gap by doing something that no other free
395     software process does or or does it in a way that is unique
396     enought to necessitate a seperate project.
397    </para>
398
399    <sect3 id=identifyidea>
400     <title>Indentify and Articulate Your Idea</title>
401     <para>
402      Eric S. Raymond writes about how free software projects start in
403      his paper, "The Cathedral and the Bazaar" which comes as required
404      reading for any free softare development. You can find it <ulink
405      url="http://www.tuxedo.org/!esr/writings/cathedral-bazaar/">online
406      </ulink>.
407     </para>
408
409     <para>
410      In "The Cathedral and Bazaar," Raymond tells us that:
411      <emphasis>Every good work of software starts by scratching a
412      developers itch.</emphasis> Raymond now widely accepted
413      hypothesis is that new free software programs are written, first
414      and foremost, to solve a specific problem facing the developer.
415     </para>
416
417     <para>
418      If you have an idea for a program in mind, chances are good that
419      it it is targetting a specific problem or itch you want to see
420      scratched. <emphasis>This idea is the project. Articulate it
421      clearly. Write it out. Describe the problem you will attack in
422      detail. The success of your project in tackling a particular
423      problem will be tied to your ability to identify that problem
424      early on. Find out exactly what it is that you want your project
425      to do.</emphasis>
426     </para>
427    </sect3>
428
429    <sect3 id=evalulateidea>
430     <title>Evaluate Your Idea</title>
431
432     <para>
433      In evaluating your idea, you need to ask yourself questions.
434      Before you move any further into this HOWTO, you need to
435      determine if the free software development model really is the
436      right one for your project. Obviously, since the program
437      scratches your itch, you are definately interested in seeing it
438      implemented in code. But, because one hacker coding alone fails
439      to qualify as a free software development effort, you need to ask
440      yourself the question: <emphasis>Is anybody else
441      interested?</emphasis>
442     </para>
443
444     <para>
445      Sometimes the answer is <emphasis>no</emphasis>. If you want to
446      write a set of scripts to sort <emphasis>your</emphasis> MP3
447      collection on your machine, maybe the free software development
448      model is not the best one to choose. However, if you want to
449      write a set of scripts to sort <emphasis>anyone's</emphasis>
450      MP3s, a free software project might fill a useful gap.
451     </para>
452
453     <para>
454      Luckily, The Internet is a place so big and diverse that, chances
455      are, there is someone, somewhere, who shares your interests and
456      how feels the same itch. It is the fact that there are so many
457      people with so many similar needs and desires that introduces the
458      second major question: <emphasis>Has somebody already had your
459      idea or a reasonably similar one?</emphasis>
460     </para>
461
462      <sect4 id=evalwhere>
463       <title>Finding Similar Projects</title>
464
465      <para>
466       There are places you can go on the web to try and answer this
467       question. If you have experience with the free software
468       community, you are probably already familiar with all of these
469       sites. All of the resources listed bellow offer searching of
470       their databases:
471      </para>
472
473      <para>
474      <variablelist>
475        <varlistentry>
476         <term>freshmeat.net</term>
477         <listitem>
478          <para><ulink url="http://freshmeat.net">freshmeat</ulink>
479          describes itself as, <quote>the Web's largest index of Linux
480          and Open Source software</quote> and its reputation along
481          these lines remains unquestioned. If you can't find it on
482          freshmeat, its doubtful that you'll find it indexed anywhere
483          else.</para>
484         </listitem>
485        </varlistentry>
486
487        <varlistentry>
488         <term>Slashdot</term>
489         <listitem>
490          <para><ulink url="http://slashdot.org">Slashdot</ulink>
491          provides <quote>News for Nerds: Stuff that Matters,</quote>
492          which usually includes discussion of free software, open
493          source, technology, and geek culture new and events. It is
494          not unusual for an particularly sexy develpment effort to be
495          announced here so it definately worth checking.</para>
496         </listitem>
497        </varlistentry>
498
499        <varlistentry>
500         <term>SourceForge</term>
501         <listitem>
502          <para><ulink url="http://sourceforge.net">SourceForge</ulink>
503          houses and facilitates a growning number of open source and
504          free software projects, SourceForge is quickly becoming a
505          nexus and an necessary stop for free software
506          developers. SourceForge's <ulink
507          url="http://sourceforge.net/softwaremap/trove_list.php">software
508          map</ulink> and <ulink url="http://sourceforge.net/new/"> new
509          releases</ulink> pages. should be necessary stops before
510          embarking on a new free software project. SourceForge also
511          provides a at <ulink
512          url="http://sourceforge.net/snippet/">Code Snippet
513          Library</ulink> which contains useful reusuable chunks of
514          code in an array of langauges which can come in useful in any
515          project.</para>
516         </listitem>
517        </varlistentry>
518
519        <varlistentry>
520         <term>Google and Google's Linux Search</term>
521         <listitem>
522          <para><ulink url="http://www.google.com">Google</ulink> and
523          <ulink url="http://www.google.com/linux"> Google's Linux
524          Search</ulink>, provide powwerful web searches that may
525          reveal people working on similar projects. It is not a
526          catalog of software or news like freshmeat or Slashdot, but
527          it is worth checking before you begin pouring your effort
528          into a redundant project.</para>
529         </listitem>
530        </varlistentry>
531
532       </variablelist>
533      </para>
534     </sect4>
535
536     <sect4 id=evalhow>
537      <title>Deciding to Proceed</title>
538      <para>
539       Once you have successfull charted the terrain and have an idea
540       bout what kinds of similar free software projects exist, every
541       developer needs to decide whether to proceed with their own
542       project. It is rare that a new project seeks to accomplish a
543       goal that is not similar to related to the goal of another
544       project. Anyone starting a new project needs to ask themselves:
545       <emphasis>Will the new project be duplicating work done by
546       another project? Will the new project be competing for
547       developers with an existing project? Can the goals of the new
548       project be accomplished by adding functionality to an existing
549       project?</emphasis>
550      </para>
551
552      <para>
553       If the answer to any of these questions is yes, try to contact
554       the developer of the existing project in question and see if he
555       or she might be willing to collaborate with you.
556      </para>
557
558      <para>
559       This may be the single most difficult aspect of free software
560       development for many developers but it is essential. It is easy
561       to become fired up by and idea and be caught up in the momentum
562       and excitement of a new project. It is often extremely difficult
563       but it is important that any free software developer rememeber
564       that the best interests of the of the free software community
565       and the quickest way to accomplish ones own project's goals and
566       the goals of similar project can often be accomplished by
567       <emphasis>not</emphasis> starting a new project.
568      </para>
569
570     </sect4>
571    </sect3>
572   </sect2>
573
574 <!-- Section2: licensing-->
575
576   <sect2 id="licensing">
577    <title>Licensing your Software</title>
578    
579    <para>
580     On one level, the difference between a piece of free software and
581     a piece of propriety software is the license. A license helps both
582     you as the developer by protecting your legal rights to your
583     software and helps demonstrate to those who wish to help you or
584     your project that they are encouraged to join.
585    </para>
586    
587    <sect3 id="chooselicense">
588     <title>Choosing a License</title>
589
590     <para>
591      Any discussion of licenses is also sure to generate at least a
592      small flamewar as there are strong feelings that some free
593      software licenses are better than other free software
594      licenses. This discussion also brings up the question of
595      <quote>Open Source Software</quote> and the debate around
596      <quote>Open Source Software</quote> and <quote>Free
597      Software</quote>. However, because I've written the Free Software
598      Development HOWTO and not the Open Source Development HOWTO, my
599      own allegiences in this argument are out in the open.
600     </para>
601
602     <para>
603      In attempting to reach a middle ground, I recommend picking any
604      license that conforms to the <ulink
605      url="http://www.debian.org/social_contract">Debian Free Software
606      Guidlines</ulink>. Examples of these licenses are the
607      <acronym>GPL</acronym>, the <acronym>BSD</acronym>, and the
608      Artistic License. Conforming to the definition of Free Software
609      offered by Richard Stallman in <ulink
610      url="http://www.gnu.org/philosophy/free-sw.html">The Free
611      Software Definition</ulink>, any of these licenses will
612      uphold,<quote> users' freedom to run, copy, distribute, study,
613      change and improve the software.</quote> There are other licenses
614      as well but sticking with a more common license will offer the
615      advantage of immediate recognition and undestanding.
616     </para>
617
618     <para>
619      In attempting a more in-depth analysis, I agree with Karl Fogel's
620      description of licenses as falling into two groups: those that
621      are the <acronym>GPL</acronym> and those that are not the
622      <acronym>GPL</acronym>.
623     </para>
624
625     <para>
626      Personally, I license all my software under the
627      <acronym>GPL</acronym>. Created and protected by the Free
628      Software Foundation and the GNU Project, the
629      <acronym>GPL</acronym> is the license for the Linux kernel,
630      GNOME, Emacs, and the majority of Linux software. Its an easy
631      choice but I believe it is a good one. <emphasis>However, there
632      is a viral aspect to the <acronym>GPL</acronym>that prevents the
633      mixture of <acronym>GPL</acronym>'ed code with
634      non-<acronym>GPL</acronym>'ed code. To many people (myself
635      included), this is a benefit, but to some, it is a major
636      drawback.</emphasis>
637     </para>
638
639     <para>
640      The three major license can be found at the following locations:
641     </para>
642
643     <para>
644      <itemizedlist>
645       <listitem>
646        <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
647        General Public License</ulink></para>
648       </listitem>
649       <listitem>
650        <para><ulink url="http://www.debian.org/misc/bsd.license">The
651        BSD License</ulink></para>
652       </listitem>
653       <listitem>
654        <para><ulink
655        url="http://language.perl.com/misc/Artistic.html">The Artistic
656        License</ulink></para>
657       </listitem>
658      </itemizedlist>
659     </para>
660
661     <para>
662      <emphasis>In all cases, please read through any license before
663      your release your software. As the developer, you can't afford
664      any license surprises.</emphasis>
665     </para>
666    </sect3>
667
668    <sect3 id="licensechoose">
669     <title>The Mechanics of Licensing</title>
670
671     <para>
672      The text of the <acronym>GPL</acronym> offers <ulink
673      url="http://www.gnu.org/copyleft/gpl.html#SEC4">a good
674      description</ulink> of mechanics of applying a license to a piece
675      of software. A checklist for applying a license would include:
676     </para>
677
678     <para>
679     <orderedlist>
680       <listitem>
681
682        <para>If at all possible, attach and distribute a full copy of
683        the license with the source and binary in a seperate
684        file.</para>
685
686       </listitem>
687       <listitem>
688
689        <para>At the top of each source file in your program, attach a
690        notice of copyright and information on where the full license
691        can be found. The <acronym>GPL</acronym> recommends that each
692        file begin with:</para>
693
694        <screen>
695 <emphasis>one line to give the program's name and an idea of what it does.</emphasis>
696 Copyright (C) yyyy  name of author
697
698 This program is free software; you can redistribute it and/or
699 modify it under the terms of the GNU General Public License
700 as published by the Free Software Foundation; either version 2
701 of the License, or (at your option) any later version.
702
703 This program is distributed in the hope that it will be useful,
704 but WITHOUT ANY WARRANTY; without even the implied warranty of
705 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
706 GNU General Public License for more details.
707
708 You should have received a copy of the GNU General Public License
709 along with this program; if not, write to the Free Software
710 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
711        </screen>
712
713        <para>
714         The <acronym>GPL</acronym> goes on to recommend attaching
715         information on contacting you (the author) via email or
716         physical mail.
717       </para>
718
719       </listitem>
720       <listitem>
721
722        <para>
723         The <acronym>GPL</acronym> continues and suggests that if your
724         program runs in an interactive mode, you should have the
725         program output a notice each time it enters interactive mode
726         that includes a message like this one that points to more
727         information about the programs licensing:
728        </para>
729
730        <screen>
731 Gnomovision version 69, Copyright (C) year name of author
732 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
733 type `show w'.  This is free software, and you are welcome
734 to redistribute it under certain conditions; type `show c' 
735 for details.
736        </screen>
737
738       </listitem>
739       <listitem>
740        <para>Finally, it might be helpful to include a
741        <quote>copyright disclaimer</quote> with the program from an
742        employer or a school if you work as a programmer or if it seems
743        like your employer or school might be able to make an argument
744        for ownership of your code.</para>
745       </listitem>
746
747      </orderedlist>
748      </para>    
749    </sect3>
750
751    <sect3 id="licensewarning">
752     <title>Final License Warning</title>
753
754     <para>
755      Please, please, please, place your software under some
756      license. It may not seem important, and to you, it may not be,
757      but licenses are important. For a piece of software to be
758      included in the Debian GNU/Linux distrobution, it must have a
759      license that fits the <ulink
760      url="http://www.debian.org/social_contract">Debian Free Software
761      Guidelines</ulink>. If you have no license, your program can be
762      distributed in part of Debian until you rerelease it under a free
763      license. Please save yourself and others trouble by releasing the
764      first version of your software with a clear license.
765     </para>
766
767    </sect3>
768
769  </sect2>
770
771 <!-- Section2: chooseversioning-->
772
773   <sect2 id="chooseversioning">
774    <title>Choosing a Method of Version Numbering</title>
775    <para>
776     <emphasis>The most important thing about a system of numbering is
777     that there is one.</emphasis> It may seem pedantic to emphasize
778     this point but you'd be surprised at the number of scripts and
779     small programs that pop up without any version number. 
780    </para>
781
782    <para>
783     <emphasis>The second most important thing about a system of
784     numbering is that the numbers always go up.</emphasis> Automatic
785     versioning systems and people's sense of order in the universe
786     will fall apart if version numbers don't rise. It doesn't
787     <emphasis>really</emphasis> matter if 2.1 is a big jump and
788     2.0.005 is a small jump but it does matter that 2.1 is more recent
789     than 2.0.005.
790    </para>
791
792    <para>
793     Follow these two rules and you will not go wrong. Still there are
794     several versioning system that are well known, useful, and that
795     might be worth looking into before you release your first version.
796    </para>
797
798    <variablelist>
799     <varlistentry>
800      <term>Linux kernel version numbering:</term>
801      <listitem>
802       <para>The Linux kernel uses a versioning system where the any
803       minor odd minor version number refers to an development or
804       testing release and any even minor version number refers to a
805       stable version. Under this system, 2.1 and 2.3 kernels were and
806       always will be development and testing kernels and 2.0, 2.2. and
807       2.4 kernels are all production code with a higher degree of
808       stability.
809      </para>
810
811       <para>
812        Whether you plan on having a split development model<xref
813        linkend="branches"> or only one version released at a time, my
814        experience with several free software projects and with the
815        Debian project has taught me taht use of Linux's version
816        numbering system is worth taking into consideration. In Debian,
817        all minor versions are stable distributions (2.0, 2.1,
818        etc). However, many people assume that 2.1 is an unstable or
819        development version and continue to use an older version until
820        they get so frusterated with the lack of development and
821        progress that they complain. If you never release an odd minor
822        version but only release even ones, nobody is hurt, and less
823        people are confused.
824       </para>
825
826      </listitem>
827     </varlistentry>
828     <varlistentry>
829      <term>Wine version numbering:</term>
830      <listitem>
831       <para>Because of the unusual nature of wine's development where
832       it constantly improving but not working towards any immediately
833       achievable goal, wine is released every three weeks. Wine does
834       this by versioning their releases in Year Month Day format where
835       each release might be labeled <quote>wine-XXXXXXXX</quote> where
836       the version from Janurary 04, 2000 would be
837       <quote>wine-20000104</quote>. For certain projects, Year Month
838       Day format can make a lot of sense.
839       </para>
840
841      </listitem>
842     </varlistentry>
843     <varlistentry>
844      <term>Mozilla milestones:</term>
845      <listitem>
846       <para>When one considers Netscape 6 and verdor versions, the
847       mozilla's project development structure is one of the most
848       complex free software model available. Their version numbering
849       has reflected the unique situation in which it is
850       developed.
851       </para>
852
853       <para>
854        Mozilla's development structure has historically been made up
855        of milestones. From teh beginning of the mozilla project, the
856        goals of the project in the order and degree to which they were
857        to be achieved were charted out on a series of <ulink
858        url="http://www.mozilla.org/roadmap.html">road
859        maps</ulink>. Major points and achievements along this roadmaps
860        were marked as milestones. Therefore, mozilla was built and
861        distributed nightly as "nightly builds" but on a day when the
862        goals of a milestone on the roadmap had been reached, that
863        particular build was marked as a milstone release.
864       </para>
865
866       <para>
867        While I haven't seen this method employed in any other projects
868        to date, I like the idea and think that it might have value in
869        any testing or development branch of a large free application
870        under heavy development.
871       </para>
872
873      </listitem>
874     </varlistentry>
875    </variablelist>
876   </sect2>
877
878 <!-- Section2: documentation-->
879
880   <sect2 id="documentation">
881    <title>Documentation</title>
882    <para></para>
883   </sect2>
884
885 <!-- Section2: presentation -->
886
887   <sect2 id="presentation">
888    <title>Other Presentation Issues</title>
889    <para></para>
890   </sect2>
891
892  </sect1>
893
894 <!-- Section1: starting: END -->
895
896 <!-- Section1: developers -->
897
898  <sect1 id="developers">
899   <title>Maintaining a Project: Interacting with Developers</title>
900    <indexterm>
901     <primary>fswd!developers</primary>
902    </indexterm>
903
904 <!-- Section2: delegation  -->
905
906   <sect2 id="delegation">
907    <title>Delegating Work</title>
908    <para></para>
909   </sect2>
910
911 <!-- Section2: branches  -->
912
913   <sect2 id="branches">
914    <title>Stable and Development Branches</title>
915    <para></para>
916   </sect2>
917
918 <!-- Section2: freezing -->
919
920   <sect2 id="freezing">
921    <title>Freezing</title>
922    <para></para>
923   </sect2>
924
925 <!-- Section2: codecram -->
926
927   <sect2 id="codecram">
928    <title>Avoiding the Code Cram Effect</title>
929    <para></para>
930   </sect2>
931
932 <!-- Section2: patching -->
933
934   <sect2 id="patching">
935    <title>Accepting and Rejecting Patches</title>
936    <para></para>
937   </sect2>
938  </sect1>
939
940 <!-- Section1: users -->
941
942  <sect1 id="users">
943   <title>Maintaining a Project: Interacting with Users</title>
944
945    <indexterm>
946     <primary>fswd!users</primary>
947    </indexterm>
948
949
950 <!-- Section2: announcing  -->
951
952   <sect2 id="announcing">
953    <title>Announcing Your Project</title>
954    <para></para>
955   </sect2>
956
957 <!-- Section2: testing -->
958
959   <sect2 id="testing">
960    <title>Testing and Testers</title>
961    <para></para>
962   </sect2>
963 </sect1>
964
965 </article>
966
967 <!-- Keep this comment at the end of the file
968 Local variables:
969 mode: sgml
970 sgml-omittag:t
971 sgml-shorttag:t
972 sgml-namecase-general:t
973 sgml-general-insert-case:lower
974 sgml-minimize-attributes:nil
975 sgml-always-quote-attributes:t
976 sgml-indent-step:1
977 sgml-indent-data:nil
978 sgml-parent-document:nil
979 sgml-exposed-tags:nil
980 sgml-local-catalogs:nil
981 sgml-local-ecat-files:nil
982 End:
983 -->

Benjamin Mako Hill || Want to submit a patch?