1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
8 <title>Free Software Development HOWTO</title>
11 <firstname>Benjamin</firstname>
12 <othername>Mako</othername>
13 <surname>Hill</surname>
16 <email>mako@debian.org</email>
24 <revnumber>v0.01</revnumber>
25 <date>27 March 2001</date>
26 <authorinitials>bch</authorinitials>
35 <primary>fswd</primary>
39 This HOWTO is designed for people with experience in programming
40 and some skills in managing a software project but who are new to
41 the world of Free Software. This document is meant to act as a
42 guide to the non-technical aspects of free software development
43 and was written to act as a crash course in the people skills
44 that aren't taught to commercial coders but that can make or
45 break a free software project.
51 <!-- Section1: intro -->
54 <title>Introduction</title>
57 <primary>fswd!introduction</primary>
61 Skimming through freshmeat.net provides mountains of reasons for this
62 HOWTO's existence--the Internet is littered with excellently
63 written and useful programs that have faded away into the Universe
64 of Free Software Forgottenness. This dismal scene made me ask
69 This HOWTO tries to do a lot of thing (probably too many), but it
70 can't answer that question and won't attempt it. What this HOWTO
71 will attempt to do is give your Free Software project a fighting
72 chance--an edge. If you write a piece of crap that no one is
73 interested in, you can read this HOWTO until you can recite it in
74 your sleep and your project will probably fail. Then again, you can
75 write a beautiful, relevant piece of software and follow every
76 instruction in this HOWTO and your software may still not make
77 it. Sometimes life is like that. However, I'll go out a limb and
78 say that if you write a great, relevant pieces of software and
79 ignore the advise in this HOWTO, you'll probably fail <emphasis>
80 more often</emphasis>.
84 A lot of the information in this HOWTO is best called common
85 sense. Of course, as any debate on interfaces will prove, what is
86 common sense to some programmers proves totally unintuitive to
87 others. After explaining bits and pieces of this HOWTO to Free
88 Software developers on several occasions, I realized that writing
89 this HOWTO might provide a useful resource and a forum for
90 programmers to share ideas about what has and has not worked for
95 As anyone involved in any of what seems like an unending parade of
96 ridiculous intellectual property clashes will attest to, a little
97 bit of legalese proves important.
100 <!-- Section2: copyright -->
102 <sect2 id="copyright">
103 <title>Copyright Information</title>
106 This document is copyrighted (c) 2000 Benjamin (Mako) Hill and is
107 distributed under the terms of the Linux Documentation Project
108 (LDP) license, stated below.
112 Unless otherwise stated, Linux HOWTO documents are copyrighted by
113 their respective authors. Linux HOWTO documents may be reproduced
114 and distributed in whole or in part, in any medium physical or
115 electronic, as long as this copyright notice is retained on all
116 copies. Commercial redistribution is allowed and encouraged;
117 however, the author would like to be notified of any such
122 All translations, derivative works, or aggregate works
123 incorporating any Linux HOWTO documents must be covered under this
124 copyright notice. That is, you may not produce a derivative work
125 from a HOWTO and impose additional restrictions on its
126 distribution. Exceptions to these rules may be granted under
127 certain conditions; please contact the Linux HOWTO coordinator at
128 the address given below.
132 In short, we wish to promote dissemination of this information
133 through as many channels as possible. However, we do wish to
134 retain copyright on the HOWTO documents, and would like to be
135 notified of any plans to redistribute the HOWTOs.
139 If you have any questions, please contact
140 <email>linux-howto@metalab.unc.edu</email>
144 <!-- Section2: disclaimer -->
146 <sect2 id="disclaimer">
147 <title>Disclaimer</title>
150 No liability for the contents of this documents can be accepted.
151 Use the concepts, examples and other content at your own risk. As
152 this is a new edition of this document, there may be errors and
153 inaccuracies, that may of course be damaging to your system.
154 Proceed with caution, and although this is highly unlikely, the
155 author(s) do not take any responsibility for that.
159 All copyrights are held by their by their respective owners, unless
160 specifically noted otherwise. Use of a term in this document
161 should not be regarded as affecting the validity of any trademark
166 Naming of particular products or brands should not be seen
171 You are strongly recommended to take a backup of your system
172 before major installation and backups at regular intervals.
176 <!-- Section2: newversions-->
178 <sect2 id="newversions">
179 <title>New Versions</title>
182 <primary>fswd!news on</primary>
186 This is the initial release. It is written to be released to
187 developers for critique and brainstorming and submitted to
188 Hampshire College for academic credit. Please keep in mind that
189 this version of the HOWTO is still in an infant stage and will be
190 revised extensively before it hits the LDP.
194 The latest version number of this document should always be listed
195 on <ulink url="http://people.debian.org/~mako/">my webpage at
200 The newest version of this HOWTO will always be made available at
201 the same website, in a variety of formats:
209 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO/t1.html">HTML</ulink>.
216 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.html">HTML (single page)</ulink>.
222 <ulink URL="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.txt">plain text</ulink>.
228 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.ps.gz">compressed postscript</ulink>.
234 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.sgml.gz">Compressed SGML source</ulink>.
241 <!-- Section2: credits -->
244 <title>Credits</title>
247 In this version I have the pleasure of acknowledging:
251 <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
252 Source Development with CVS</emphasis> published by the Coriolis
253 Open Press. Large parts of his book are available <ulink
254 url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
255 the book are available under the GPL and constitute the best
256 tutorial on CVS I've ever seen. The rest of the book covers, "the
257 challenges and philosophical issues inherent in running an Open
258 Source project using CVS." The book does a good job of covering
259 some of the subjects brought up in this HOWTO and much
260 more. <ulink url="http://cvsbook.red-bean.com">The book's
261 website</ulink> has information on ordering the book and provides
262 several translations of the chapters on CVS. I you are seriously
263 interested in running a Free Software project, you want this
264 book. I tried to mention Fogel in sections of this HOWTO where I
265 knew I was borrowing directly from his ideas. If I missed any, I'm
266 sorry, and I'll try and have those fixed in future versions.
270 Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
275 Also providing support material, and inspiration for this HOWTO is
276 Eric S. Raymond for his prolific, consistent, and carefully
277 crafted arguments, Lawrence Lessig for reminding me of the
278 importance of Free Software. Additionaly, I want to thank every
279 user and developer involved with the <ulink
280 url="http://www.debian.org">Debian Project</ulink>. The project
281 has provided me with a home, a place to practice Free Software
282 advocacy, a place to make a difference, a place to learn from
283 those how have been involved with the movement much longer than I,
284 and proof of a Free Software project that definitely, definitely
289 Above all, I want to thank <emphasis>Richard Stallman</emphasis>
290 for his work at the Free Software Foundation and for never giving
291 up. Stallman provides and articulates the philosophical basis that
292 attracts me to Free Software and that drives me towards writing a
293 document to make sure it succeeds. RMS can always be emailed at
294 <email>rms (at) gnu (dot) org</email>.
299 <!-- Section2: feedback -->
301 <sect2 id="feedback">
302 <title>Feedback</title>
305 Feedback is always and most certainly welcome for this
306 document. Without your submissions and input, this document
307 wouldn't exist. Do you feel that something is missing? Don't
308 hesitate to contact me to have me write a chapter, section, or
309 subsection or to write one yourself. I want this document to be a
310 product of the Free Software development process that it heralds
311 and I believe that its ultimate success will be rooted in this
312 fact. Please send your additions, comments and criticisms to the
313 following email address : <email>mako@debian. org</email>.
317 <!-- Section2: translations -->
319 <sect2 id="translations">
320 <title>Translations</title>
323 I know that not everyone speaks English. Translations are nice and
324 I'd love for this HOWTO to gain the kind of international reach
325 afforded by a translated version.
329 However, this HOWTO is still young and I have to yet to be
330 contacted about a translation so English is all that is currently
331 available. If you would like to help with or do a translation, you
332 will gain my utmost respect and admiration and you'll get to be
333 part of a cool process. If you are at all interested, please don't
334 hesitate to contact me at: <email>mako@debian.org</email>.
339 <!-- Section1: intro: END -->
341 <!-- Section1: starting -->
343 <sect1 id="starting">
344 <title>Starting a Project</title>
347 <primary>fswd!starting</primary>
350 With very little argument, the beginning is most difficult part of
351 successful free software development. Laying a firm foundation will
352 determine whether your project flourishes or withers away and
353 dies. It is also the subject that is of most immediate interest to
354 anyone reading this document as a tutorial.
358 Starting a project involves a dilemma that you as a developer must
359 try and deal with: No potential user for your program is interested
360 in a program that doesn't work. Simultaneously, the development
361 process that you want to employ holds involvement of users as
362 prerequisit to working software.
366 It is in these dangerous initial moments that anyone working to
367 start a free software project must try and strike a balance along
368 these lines. One of the most important ways that someone trying to
369 start a project can work towards this balance is by establishing a
370 solid framework for the development process through some of the
371 suggestions mentioned in this section.
375 <!-- Section2: chooseproject-->
377 <sect2 id="chooseproject">
378 <title>Choosing a Project</title>
381 If you are reading this document, there's a good chance you
382 already have an idea for a project in mind. Chances are pretty
383 good, it fills in a percieved gap by doing something that no other
384 free software process does or by doing something in a way the is
385 unique enough to necessitate a separate project.
388 <sect3 id=identifyidea>
389 <title>Identify and articulate your idea</title>
391 Eric S. Raymond writes about how free software projects start in
392 his paper, <quote>The Cathedral and the Bazaar,</quote> which
393 comes as required reading for any free software development. It
395 url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/">online
400 In <quote>The Cathedral and the Bazaar,</quote> Raymond tells us
401 that: <emphasis>Every good work of software starts by scratching
402 a developers itch.</emphasis> Raymond's now widely accepted
403 hypothesis is that new free software programs are written, first
404 and foremost, to solve a specific problem facing the developer.
408 If you have an idea for a program in mind, chances are good that
409 it targets a specific problem or <quote>itch</quote> you want to
410 see scratched. This idea is the project. Articulate it
411 clearly. Write it out. Describe the problem you will attack in
412 detail. The success of your project in tackling a particular
413 problem will be tied to your ability to identify that problem
414 early on. Find out exactly what it is that you want your project
419 <sect3 id=evalulateidea>
420 <title>Evaluate your idea</title>
423 In evaluating your idea, you need to first ask yourself a few
424 questions. Before you move any further into this HOWTO, you need
425 to determine if the free software development model really is the
426 right one for your project. Obviously, since the program
427 scratches your itch, you are definitely interested in seeing it
428 implemented in code. But, because one hacker coding in solitude
429 fails to qualify as a free software development effort, you need
430 to ask yourself the question: <emphasis>Is anybody else
431 interested?</emphasis>
435 Sometimes the answer is a simple <emphasis>no</emphasis>. If you
436 want to write a set of scripts to sort <emphasis>your</emphasis>
437 <acronym>MP3</acronym> collection on your machine, maybe the free
438 software development model is not the best one to
439 choose. However, if you want to write a set of scripts to sort
440 <emphasis>anyone's</emphasis> <acronym>MP3</acronym>s, a free
441 software project might fill a useful gap.
445 Luckily, The Internet is a place so big and so diverse that,
446 chances are, there is someone, somewhere, who shares your
447 interests and how feels the same <quote>itch.</quote> It is the
448 fact that there are so many people with so many similar needs and
449 desires that introduces the second major question: <emphasis>Has
450 somebody already had your idea or a reasonably similar
455 <title>Finding Similar Projects</title>
458 There are places you can go on the web to try and answer the
459 question above. If you have experience with the free software
460 community, you are probably already familiar with all of these
461 sites. All of the resources listed bellow offer searching of
468 <term>freshmeat.net:</term>
470 <para><ulink url="http://freshmeat.net">freshmeat.net</ulink>
471 describes itself as, <quote>the Web's largest index of Linux
472 and Open Source software</quote> and its reputation along
473 these lines is totally unparalleled and unquestioned. If you
474 can't find it on freshmeat, its doubtful that you (or anyone
475 else) will find it anywhere.</para>
480 <term>Slashdot:</term>
482 <para><ulink url="http://slashdot.org">Slashdot</ulink>
483 provides <quote>News for Nerds: Stuff that Matters,</quote>
484 which usually includes discussion of free software, open
485 source, technology, and geek culture new and events. It is
486 not unusual for an particularly sexy development effort to be
487 announced here so it definitely worth checking.</para>
492 <term>SourceForge:</term>
494 <para><ulink url="http://sourceforge.net">SourceForge</ulink>
495 houses and facilitates a growing number of open source and
496 free software projects. It is also quickly becoming a nexus
497 and an necessary stop for free software
498 developers. SourceForge's <ulink
499 url="http://sourceforge.net/softwaremap/trove_list.php">software
500 map</ulink> and <ulink url="http://sourceforge.net/new/"> new
501 releases</ulink> pages should be necessary stops before
502 embarking on a new free software project. SourceForge also
504 url="http://sourceforge.net/snippet/">Code Snippet
505 Library</ulink> which contains useful reusable chunks of code
506 in an array of languaqges which can come in useful in any
512 <term>Google and Google's Linux Search:</term>
514 <para><ulink url="http://www.google.com">Google</ulink> and
515 <ulink url="http://www.google.com/linux"> Google's Linux
516 Search</ulink>, provide powerful web searches that may
517 reveal people working on similar projects. It is not a
518 catalog of software or news like freshmeat or Slashdot, but
519 it is worth checking before you begin pouring your effort
520 into a redundant project.</para>
529 <title>Deciding to Proceed</title>
531 Once you have successful charted the terrain and have an idea
532 bout what kinds of similar free software projects exist, every
533 developer needs to decide whether to proceed with their own
534 project. It is rare that a new project seeks to accomplish a
535 goal that is not similar to or related to the goal of another
536 project. Anyone starting a new project needs to ask themselves:
537 <quote>Will the new project be duplicating work done by another
538 project? Will the new project be competing for developers with
539 an existing project? Can the goals of the new project be
540 accomplished by adding functionality to an existing
545 If the answer to any of these questions is <quote>yes,</quote>
546 try to contact the developer of the existing project(s) in
547 question and see if he or she might be willing to collaborate
552 This may be the single most difficult aspect of free software
553 development for many developers but it is an essential one. It
554 is easy to become fired up by an idea and be caught up in the
555 momentum and excitement of a new project. It is often extremely
556 difficult to do but, it is important that any free software
557 developer remember that the best interests of the free software
558 community and the quickest way to accomplish ones own project's
559 goals and the goals of similar project can often be accomplished
560 by <emphasis>not</emphasis> starting a new project.
567 <!-- Section2: licensing-->
569 <sect2 id="licensing">
570 <title>Licensing your Software</title>
573 On one (somewhat simplistic) level, the difference between a piece
574 of free software and a piece of propriety software is the
575 license. A license helps you as the developer by protecting your
576 legal rights to have your software distributed under your terms
577 and helps demonstrate to those who wish to help you or your
578 project that they are encouraged to join.
581 <sect3 id="chooselicense">
582 <title>Choosing a license</title>
585 Any discussion of licenses is also sure to generate at least a
586 small flame war as there are strong feelings that some free
587 software licenses are better than others. This discussion also
588 brings up the question of <quote>Open Source Software</quote> and
589 the debate around <quote>Open Source Software</quote> and
590 <quote>Free Software</quote>. However, because I've written the
591 Free Software Development HOWTO and not the Open Source
592 Development HOWTO, my own allegiances in this argument are in the
597 In attempting to reach a middle ground through diplomacy without
598 sacrificing my own philosophy, I recommend picking any license
599 that conforms to the <ulink
600 url="http://www.debian.org/social_contract">Debian Free Software
601 Guidelines</ulink>. Originally compiled by the Debian project
602 under Bruce Perens, the <acronym>DFSG</acronym> form the first
603 version of the Open Source definition. Examples of free licenses
604 given by the <acronym>DFSG</acronym> are the
605 <acronym>GPL</acronym>, the <acronym>BSD</acronym>, and the
610 Conforming to the definition of Free Software offered by Richard
612 url="http://www.gnu.org/philosophy/free-sw.html"><quote>The Free
613 Software Definition</quote></ulink>, any of these licenses will
614 uphold,<quote> users' freedom to run, copy, distribute, study,
615 change and improve the software.</quote> There are plenty of
616 other licenses that also conform to the <acronym>DFSG</acronym>
617 but sticking with a more common license will offer the advantage
618 of immediate recognition and understanding.
622 In attempting a more in-depth analysis, I agree with Karl Fogel's
623 description of licenses as falling into two groups: those that
624 are the <acronym>GPL</acronym> and those that are not the
625 <acronym>GPL</acronym>.
629 Personally, I license all my software under the
630 <acronym>GPL</acronym>. Created and protected by the Free
631 Software Foundation and the GNU Project, the
632 <acronym>GPL</acronym> is the license for the Linux kernel,
633 GNOME, Emacs, and the vast majority of GNU/Linux software. It's
634 the obvious choice but I believe it is a good one. Any BSD
635 fanatic will urge you to remember that there is a viral aspect to
636 the <acronym>GPL</acronym>that prevents the mixture of
637 <acronym>GPL</acronym>'ed code with non-<acronym>GPL</acronym>'ed
638 code. To many people (myself included), this is a benefit, but to
639 some, it is a major drawback.
643 The three major license can be found at the following locations:
649 <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
650 General Public License</ulink></para>
653 <para><ulink url="http://www.debian.org/misc/bsd.license">The
654 BSD License</ulink></para>
658 url="http://language.perl.com/misc/Artistic.html">The Artistic
659 License</ulink></para>
665 <emphasis>In any case, please read through any license before
666 your release your software. As the primary developer, you can't
667 afford any license surprises.</emphasis>
671 <sect3 id="licensechoose">
672 <title>The mechanics of licensing</title>
675 The text of the <acronym>GPL</acronym> offers <ulink
676 url="http://www.gnu.org/copyleft/gpl.html#SEC4">a good
677 description</ulink> of mechanics of applying a license to a piece
678 of software. My quick checklist for applying a license includes:
685 <para>If at all possible, attach and distribute a full copy of
686 the license with the source and binary in a separate
691 <para>At the top of each source file in your program, attach a
692 notice of copyright and information on where the full license
693 can be found. The <acronym>GPL</acronym> recommends that each
694 file begin with:</para>
697 <emphasis>one line to give the program's name and an idea of what it does.</emphasis>
698 Copyright (C) yyyy name of author
700 This program is free software; you can redistribute it and/or
701 modify it under the terms of the GNU General Public License
702 as published by the Free Software Foundation; either version 2
703 of the License, or (at your option) any later version.
705 This program is distributed in the hope that it will be useful,
706 but WITHOUT ANY WARRANTY; without even the implied warranty of
707 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
708 GNU General Public License for more details.
710 You should have received a copy of the GNU General Public License
711 along with this program; if not, write to the Free Software
712 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
716 The <acronym>GPL</acronym> goes on to recommend attaching
717 information on contacting you (the author) via email or
724 The <acronym>GPL</acronym> continues and suggests that if your
725 program runs in an interactive mode, you should write the
726 program to output a notice each time it enters interactive
727 mode that includes a message like this one that points to more
728 information about the programs licensing:
732 Gnomovision version 69, Copyright (C) year name of author
733 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
734 type `show w'. This is free software, and you are welcome
735 to redistribute it under certain conditions; type `show c'
741 <para>Finally, it might be helpful to include a
742 <quote>copyright disclaimer</quote> with the program from an
743 employer or a school if you work as a programmer or if it seems
744 like your employer or school might be able to make an argument
745 for ownership of your code later on. Its often needed but there
746 are plenty of free software developers who have gotten into
747 trouble and wish they had attained one.</para>
754 <sect3 id="licensewarning">
755 <title>Final license warning</title>
758 Please, please, please, place your software under some
759 license. It may not seem important, and to you, it may not be,
760 but licenses <emphasis>are</emphasis> important. For a piece of
761 software to be included in the Debian GNU/Linux distribution, it
762 must have a license that fits the <ulink
763 url="http://www.debian.org/social_contract">Debian Free Software
764 Guidelines</ulink>. If you have no license, your program can not
765 be distributed as a package in Debian until you re-release it
766 under a free license. Please save yourself and others trouble by
767 releasing the first version of your software with a clear
775 <!-- Section2: chooseversioning-->
777 <sect2 id="chooseversioning">
778 <title>Choosing a Method of Version Numbering</title>
781 <emphasis>The most important thing about a system of version
782 numbering is that there is one.</emphasis> It may seem pedantic to
783 emphasize this point but you'd be surprised at the number of
784 scripts and small programs that pop up without any version number
789 <emphasis>The second most important thing about a system of
790 numbering is that the numbers always go up.</emphasis> Automatic
791 version tracking systems and people's sense of order in the
792 universe will fall apart if version numbers don't rise. It doesn't
793 <emphasis>really</emphasis> matter if 2.1 is a big jump and
794 2.0.005 is a small jump but it does matter that 2.1 is more recent
799 Follow these two simple rules and you will not go (too)
800 wrong. Still, there are several version numbering systems that are
801 well known, useful, and that might be worth looking into before
802 you release your first version.
807 <term>Linux kernel version numbering:</term>
809 <para>The Linux kernel uses a versioning system where any odd
810 minor version number refers to an development or testing release
811 and any even minor version number refers to a stable
812 version. Think about it for a second. Under this system, 2.1 and
813 2.3 kernels were and always will be development or testing
814 kernels and 2.0, 2.2. and 2.4 kernels are all production code
815 with a higher degree of stability and more testing.
819 Whether you plan on having a split development model (as
820 described in <xref linkend="branches">) or only one version
821 released at a time, my experience with several free software
822 projects and with the Debian project has taught me that use of
823 Linux's version numbering system is worth taking into
824 consideration. In Debian, all minor versions are stable
825 distributions (2.0, 2.1, etc). However, many people assume that
826 2.1 is an unstable or development version and continue to use
827 an older version until they get so frustrated with the lack of
828 progress development that they complain and figure the system
829 out. If you never release an odd minor version but only release
830 even ones, nobody is hurt, and less people are confused. It's
831 worth taking into consideration.
837 <term>Wine version numbering:</term>
839 <para>Because of the unusual nature of wine's development where
840 the not-emulator is constantly improving but not working towards
841 any immediately achievable goal, wine is released every three
842 weeks. Wine does this by labeling their releases in Year Month
843 Day format where each release might be labeled
844 <quote>wine-XXXXXXXX</quote> where the version from January 04,
845 2000 would be <quote>wine-20000104</quote>. For certain
846 projects, Year Month Day format can make a lot of sense.
852 <term>Mozilla milestones:</term>
854 <para>When one considers Netscape 6 and vendor versions, the
855 mozilla's project development structure is one of the most
856 complex free software model available. Their version numbering
857 has reflected the unique situation in which it is
862 Mozilla's version numbering structure has historically been
863 made up of milestones. From the beginning of the mozilla
864 project, the goals of the project in the order and degree to
865 which they were to be achieved were charted out on a series of
866 <ulink url="http://www.mozilla.org/roadmap.html">road
867 maps</ulink>. Major points and achievements along these
868 road-maps were marked as milestones. Therefore, mozilla was
869 built and distributed nightly as "nightly builds" but on a day
870 when the goals of a milestone on the road-map had been reached,
871 that particular build was marked as a milestone release.
875 While I haven't seen this method employed in any other projects
876 to date, I like the idea and think that it might have value in
877 any testing or development branch of a large free application
878 under heavy development.
886 <!-- Section2: documentation-->
888 <sect2 id="documentation">
889 <title>Documentation</title>
892 A huge number of otherwise fantastic free software applications
893 have withered and died because their author was the only person
894 who knew how to use them fully. Even if your program is written
895 primarily for a techno-savvy group of users, documentation is
896 helpful and even necessary for the survival of your project. You
897 will learn later in <xref linkend="releasing"> that you should
898 always release something that is usable. <emphasis>A piece of
899 software without documentation is not usable.</emphasis>
903 There are lots of different people for whom to document and
904 therefore there are lots of ways to document your project. The
905 idea of documentation in source code to help facilitate
906 development by a large community is vital but it falls outside the scope
907 of this HOWTO. This being the case, this section deals mostly
908 useful tactics for user-directed documentation.
912 A combination of tradition and necessity has resulted in a
913 semi-regular system of documentation in most free software
914 projects that is worth following. Both users and developers expect
915 to be able to get documentation in several ways and it's essential
916 that you provide the information they are seeking in a form they
917 can read if your project is ever going to get off the
918 ground. People have come to expect:
922 <title>Man pages</title>
924 <para>Your users will want to be able to type <quote>man
925 projectname</quote> end up with a nicely formatted man page
926 highlighting the basic use of yourapplication. Make sure that
927 before you release your program, you've planned for this.
931 Man pages are not difficult to write. There is excellent
932 documentation on the man page writing process available through the
933 <quote>The Linux Man-Page-HOWTO</quote> available through the
934 Linux Documentation project <acronym>(LDP)</acronym> written by
935 Jens Schweikhardt. It is available <ulink
936 url="http://www.schweikhardt.net/man_page_howto.html">from
937 Schweikhardt's site</ulink> or <ulink
938 url="http://www.linuxdoc.org/HOWTO/mini/Man-Page.html">from the
939 <acronym>LDP</acronym></ulink>.
943 It is also possible to write man pages using DocBook SGML and
944 convert them into man pages. Because man pages are so simple and
945 the DocBook method relatively new, I have not been able to follow
946 this up but would love help from anyone who can give me more
947 information on how exactly this is done.
952 <title>Command line accessible documentation</title>
955 Most users will expect some basic amount of documentation to be
956 easily available from the command line. For few programs should
957 this type of documentation extend for more than one screen (24 or
958 25 lines) but it should cover the basic usage, a brief (one or
959 two sentence) description of the program, a list of the commands
960 with explanations, all the major options (also with
961 explanations), and a pointer to more in-depth documentation for
962 those who need it. The command line documentation for Debian's
963 apt-get serves as an excellent example and a useful model:
967 apt 0.3.19 for i386 compiled on May 12 2000 21:17:27
968 Usage: apt-get [options] command
969 apt-get [options] install pkg1 [pkg2 ...]
971 apt-get is a simple command line interface for downloading and
972 installing packages. The most frequently used commands are update
976 update - Retrieve new lists of packages
977 upgrade - Perform an upgrade
978 install - Install new packages (pkg is libc6 not libc6.deb)
979 remove - Remove packages
980 source - Download source archives
981 dist-upgrade - Distribution upgrade, see apt-get(8)
982 dselect-upgrade - Follow dselect selections
983 clean - Erase downloaded archive files
984 autoclean - Erase old downloaded archive files
985 check - Verify that there are no broken dependencies
989 -q Loggable output - no progress indicator
990 -qq No output except for errors
991 -d Download only - do NOT install or unpack archives
992 -s No-act. Perform ordering simulation
993 -y Assume Yes to all queries and do not prompt
994 -f Attempt to continue if the integrity check fails
995 -m Attempt to continue if archives are unlocatable
996 -u Show a list of upgraded packages as well
997 -b Build the source package after fetching it
998 -c=? Read this configuration file
999 -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp
1000 See the apt-get(8), sources.list(5) and apt.conf(5) manual
1001 pages for more information and options.
1005 It has become a GNU convention to make this type of information
1006 accessible with the <quote>-h</quote> and the
1007 <quote>--help</quote> options. Most GNU/Linux users will expect
1008 to be able to retrieve basic documentation these ways so if you
1009 choose to use different method, be prepared for the flames and
1010 for the fallout that may result.
1015 <title>Files users will expect</title>
1017 In addition to man pages and command-line help, there are certain
1018 files where people will look for documentation, especially in any
1019 package containing source code. In a source distribution, most of
1020 these files can be stored in a the root directory of the source
1021 distribution or in a subdirectory of the root called
1022 <quote>doc</quote> or <quote>Documentation</quote>. Common files
1023 places in these places include:
1029 <term>README or Readme</term>
1032 <para>A document containing all the basic installation,
1033 compilation, and even basic use instructions that make up the
1034 bare minimum information needed to get the program up and
1035 running. A README is not your chance to be verbose but needs
1036 to be concise and effective. An ideal README is at least 30
1037 lines long and more no more than 250.</para>
1042 <term>INSTALL or Install</term>
1045 <para>The INSTALL file should be much shorter than the README
1046 file and should quickly and concisely describe how to build
1047 and install the program. Usually an INSTALL file simply
1048 instructs the user to run <quote>./configure; make; make
1049 install</quote> and touches on any unusual options or actions
1050 that may be necessary. More advanced users can usually avoid
1051 INSTALL files but it's good practice to at least glance at one
1052 to understand what can be expected. For most relatively
1053 standard install procedures and for most programs, INSTALL
1054 files are as short as possible are rarely over 100
1060 <term>Changelog, ChangeLog, CHANGELOG, or changelog</term>
1063 <para>A changelog is a simple file that every well-managed
1064 free software project should include. A changelog is simple
1065 the file that, as its name implies, logs or documents the
1066 changes to a program. The most simple way to do a changelog is
1067 to simply keep a file with the source code for your program
1068 and add a section to the top of the changelog with each
1069 release describing what has been, changed, fixed, or added to
1070 the program. It's a good idea to post the changelog onto the
1071 website as well because it can help people decide whether they
1072 want or need to upgrade to a newer version or wait for a more
1073 significant upgrade.</para>
1081 <para>A NEWS file and a ChangeLog are similar. A news file is
1082 not typically sorted by version but just whenever new features
1083 are added, the developer responisble will make a note in the
1084 NEWS file. NEWS files should not have to changed before a
1085 release (they should be kept up to date all along) but it's
1086 usually a good idea to check first anyway because often people
1087 just forget to keep them as current as they should.</para>
1092 <term><acronym>FAQ</acronym></term>
1095 <para>For those of you that don't already
1096 know. <acronym>FAQ</acronym> stands for Frequently Asked
1097 Questions and a FAQ is a collection of exactly that. FAQs
1098 are not difficult to make. Simply make a policy that if you
1099 are asked a question or see a question on a mailing list two
1100 or more times, add it the question (and its answer) to your
1101 FAQ. FAQs are more optional than the files listed above but
1102 they can save your time, increase usability, and decrease
1103 headaches on all sides.</para>
1112 <title>Website</title>
1114 It's only idirectly an issue of documentation but a good website
1115 is quickly becoming an essential part of any free software
1116 project's documentation. Your website should provide access to
1117 documentation (in <acronym>HTML</acronym> if possible). It should
1118 also include a section for news and events around your program
1119 and a section that details the process of getting involved with
1120 development or testing and creates an open invitation. It should
1121 also supply links to any mailing lists, similar websites, and
1122 provide a direct link to all the available ways of downloading
1128 <title>Other documentation hints</title>
1131 It doesn't hurt to distribute any documentation for your program
1132 from your website or anywhere else (FAQs etc) with the
1133 program. Make a FAQ by cutting and posting common questions and
1134 answers from a mailing list or your own email. Then, don't
1135 hesitate through this in the programs tarball. If people don't
1136 need it, they will delete it. I can repeat it over and over:
1137 <emphasis>Too much documentation is not a sin.</emphasis>
1141 All your documentation should be in plaintext, or, in cases where
1142 it is on your website primarily, in HTML. Everyone can cat a
1143 file, everyone has a pager, (almost) everyone can render
1144 HTML. <emphasis>You are welcome to distribute information in PDF,
1145 PostScript, RTF, or any number of other widely used formats but
1146 this information must also be available in plaintext or HTML or
1147 people will be very angry at you.</emphasis>
1152 <!-- Section2: presentation -->
1154 <sect2 id="presentation">
1155 <title>Other Presentation Issues</title>
1157 Many of the remaining issues surrounding the creation of a new
1158 free software program fall under what most people describe as
1159 common sense issues. Still, they are worth noting briefly in
1160 hopes that they may remind a developer of something they may have
1165 <title>Package formats</title>
1167 Package formats may differ depending on the system you are
1168 developing for. For windows based software, Zip archives (.zip)
1169 usually serve as the package format of choice. If you are
1170 developing for GNU/Linux, *BSD, or any UN*X, make sure that your
1171 source code is always available in tar'ed and gzip'ed format
1172 (.tar.gz). UNIX compress (.Z) has gone out of style and
1173 usefulness and faster computers have brought bzip2 (.bz2) into
1174 the spot-lit as a more effective compression medium. I now make
1175 all my releases available in both gzip'ed and bzip2'ed formats.
1179 Binary packages are largely distribution specific. You can build
1180 binary packages against a current version of a major
1181 distribution, you will only make your users happy. Try to foster
1182 relationships with users or developers of large distribution to
1183 develop a system for consistent binary packages. It's often a
1184 good idea to provide RedHat <acronym>RPM</acronym>'s (.rpm),
1185 Debian deb's (.deb) and source <acronym>RPM</acronym>'s
1186 <acronym>SRPM</acronym>'s. Binary packages can also be compiled
1187 against a specified system with specified libraries and
1188 distributed in tar.gz format as well. <emphasis>Remember: While
1189 these binaries packages are nice, getting the source packaged and
1190 released should always be your priority. Your users or fellow
1191 developers can and will do the the binary packages for
1197 <title>Useful tidbits and presentation hints</title>
1200 Other useful hints include:
1208 <emphasis>Make sure that your program can always be found in a
1209 single location.</emphasis> Often this means that you have a
1210 single directory accessible via <acronym>FTP</acronym> or
1211 <acronym>HTTP</acronym> where the newest version will be
1212 quickly recognized. One effective technique is a provide a
1213 symlink called <quote>projectname-latest</quote> that is
1214 always pointing to the most recent released or development
1215 version of your free software project. Keep in mind that this
1216 location will recieve many requests for downloads around
1217 releases so make sure that the server you choose for this
1218 purpose has adequate bandwidth.
1224 <emphasis>Make sure that there is a consistent email address
1225 for bug reports.</emphasis> It's usually a good idea to make
1226 this something that is NOT your primary email address like
1227 projectname@host or projectname-bugs@host. This way if you
1228 ever decide to hand over maintainership or if your email
1229 address changes, you simply need to change where this email
1230 address forwards. It also will allow for more than one person
1231 to deal with the influx of mail that is created if your
1232 project becomes as huge as you hope it will.
1243 <!-- Section1: starting: END -->
1245 <!-- Section1: developers -->
1247 <sect1 id="developers">
1248 <title>Maintaining a Project: Interacting with Developers</title>
1250 <primary>fswd!developers</primary>
1254 Once you have gotten your project started, you have overcome the
1255 most difficult hurdles in the development process of your
1256 program. Laying a firm foundation is essential, but the development
1257 process itself is equally important and provides quite a few
1258 opportunities for failure. In the next two sections, I will cover
1259 running a project by discussing how to maintain a project through
1260 interactions with developers and with users.
1264 In releasing your program, your program becomes free software. This
1265 transition is more than just a larger user base. By releasing your
1266 program as free software, <emphasis>your</emphasis> software
1267 becomes the <emphasis>free software community's</emphasis>
1268 software. The direction of your software's development will be
1269 reshaped, redirected, and fully determined by your users and, to a
1270 larger extent, by other developers in the community.
1274 The major difference between free software development and
1275 propriety software development is the developer base. As the leader
1276 of a free software project, you need to attract and keep developers
1277 in a way that leaders of proprietary software projects simply don't
1278 have to worry about. <emphasis>As the person leading development of
1279 a free software project, you must harness the work of fellow
1280 developers by making responsible decisions and by responsibly
1281 choosing not to make decisions. You have to direct developers
1282 without being overbearing or bossy. You need to strive to earn
1283 respect and never forget to give it out.</emphasis>
1286 <!-- Section2: delegation -->
1288 <sect2 id="delegation">
1289 <title>Delegating Work</title>
1292 By now, you've hypothetically followed me through the early
1293 programming of a piece of software, the creation of a website and
1294 system of documentation and and we've gone ahead and (as will be
1295 discussed in <xref linkend="releasing">) released it to the rest
1296 of the world. Times passes, and if things go well, people become
1297 interested and want to help. The patches begin flowing in.
1301 <emphasis>Like the parent of any child who grows up, it's now time
1302 to wince and smile and do most difficult thing in any parents
1303 life: It's time to let go.</emphasis>
1307 Delegation is the political way of describing this process of
1308 <quote>letting go.</quote> It is the process of handing some of
1309 the responsibility and power over your project to other responsible
1310 and involved developers. It is difficult for anyone who has
1311 invested a large deal of time and energy into a project but it
1312 essential for the growth of any free software project. One person
1313 can only do so much. A free software project is nothing
1314 without the involvement of a group of developers. A group of
1315 developers can only be maintained through respectful and
1316 responsible leadership and delegation.
1320 As your project progresses, you will notice people who are putting
1321 significant amounts of time and effort into your project. These
1322 will be the people submitting the most patches, posting most on
1323 the mailing lists, engaging in long email discussions. It is your
1324 responsibility to contact these people and to try and shift some of
1325 the power and responsibility of your position as the project's
1326 maintainer onto them (if they want it). There are several easy
1327 ways you can do this:
1331 <title>How to delegate</title>
1334 You may find that other developers seem even more experienced or
1335 knowledgeable than you. Your job as a maintainer does not mean
1336 you have to have to be the best or the brightest. It means you
1337 need are responsible for showing good judgment and for
1338 recognizing which solutions are maintainable and which are not.
1341 Like anything, its easier to watch others delegate than to do it
1342 yourself. In a sentence: <emphasis>Keep an eye out for other
1343 qualified developers who show an interest and sustained
1344 involvement with your project and try and shift responsibility
1345 towards them.</emphasis> The following ideas might be good places
1346 to start or good sources of inspiration:
1350 <title>Allow a larger group of people write access to your CVS
1351 repository and make real efforts towards rule by a
1355 <ulink url="http://httpd.apache.org/">Apache</ulink> is an
1356 example of a project that is run by small group of developers
1357 who vote on major technical issues and the admission of new
1358 members and all have write access to the main source
1359 repository. Their process is detailed <ulink
1360 url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
1364 The <ulink url="http://www.debian.org/"> Debian Project</ulink>
1365 is an extreme example of rule by committee. At current count,
1366 more than 700 developers have full responsibility for certain
1367 aspects of the projects. All these developers can upload into
1368 the main FTP servers, and vote on major issues. Direction for
1369 the project is determined by the project's <ulink
1370 url="http://www.debian.org/social_contract">social
1371 contract</ulink> and a <ulink
1372 url="http://www.debian.org/devel/constitution">constitution</ulink>. To
1373 facilitate this system, there are special teams (i.e. the
1374 install team, the Japanese language team) as well as a technical
1375 committee and a project leader. The leader's main responsibility
1376 is to, <quote>Appoint Delegates or delegate decisions to the
1377 Technical Committee.</quote>
1381 While both of these projects operate on a scale that your
1382 project will not (at least initially), their example is
1383 helpful. Debian's idea of a project leader who can do
1384 <emphasis>nothing</emphasis> but delegate serves as a
1385 caricature of how a project can involve and empower a huge
1386 number of developers and grow to a huge size.
1391 <sect4 id="releasemanager">
1392 <title>Publicly appoint someone as the release manager for a
1393 specific release.</title>
1396 A release manager is usually responsible for coordinating
1397 testing, enforcing a code freeze, being responsible for
1398 stability and quality control, packaging up the software, and
1399 placing it in the appropriate places to be downloaded.
1403 This use of the release manager is a good way to give yourself a
1404 break and to shift the responsibility for accepting and
1405 rejecting patches to someone else. It is a good way of very
1406 clearly defining a chunk of work on the project as belonging to
1407 a certain person and its a great way of giving yourself room to
1412 <sect4 id="delegatebranch">
1413 <title>Delegate control of an entire branch.</title>
1415 If your project chooses to have branches (as described in <xref
1416 linkend="branches">), it might be a good idea to appoint someone
1417 else to be the the head of a branch. If you like focusing your
1418 energy on development releases and the implementation of new
1419 features, hand total control over the stable releases to a
1420 well-suited developer.
1424 The author of Linux, Linus Torvalds, came out and crowned Alan
1425 Cox as <quote>the man for stable kernels.</quote> All patches
1426 for stable kernels go to Alan and, if Linus were to be taken
1427 away from work on Linux for any reason, Alan Cox would be more
1428 than suited to fill his role as the acknowledged heir to the
1429 Linux maintainership.
1435 <!-- Section2: patching -->
1437 <sect2 id="patching">
1438 <title>Accepting and Rejecting Patches</title>
1440 This HOWTO has already touched on the fact that as the maintainer
1441 of a free software project, one of primary and most important
1442 responsibilities will be accepting and rejecting patches submitted
1443 to you by other developers.
1447 <title>Technical judgment</title>
1450 In <emphasis>Open Source Development with CVS</emphasis>, Karl
1451 Fogel makes a convincing argument that the most important things
1452 to keep in mind when rejecting or accepting patches are:
1459 <para>A firm knowledge of the scope of your program (that's the
1460 <quote>idea</quote> I talked about in <xref linkend="chooseproject">);</para>
1464 <para>The ability to recognize, facilitate, and direct
1465 <quote>evolution</quote> of your program so that the program
1466 can grow and change and incorporate functionality that was
1467 originally unforeseen;</para>
1471 <para>The necessity to avoid digressions that might expand the
1472 scope of the program too much and result and push the project
1473 towards an early death under its own weight and
1474 unwieldiness.</para>
1481 These are the criteria that you as a project maintainer should
1482 take into account each time you receive a patch.
1486 Fogel elaborates on this again and states the <quote>the
1487 questions to ask yourself when considering whether to implement
1488 (or approve) a change are:</quote>
1495 <para>Will it benefit a significant percentage of the program's
1496 user community?</para>
1500 <para>Does it fit within the program's domain or within a
1501 natural, intuitive extension of that domain?</para>
1508 The answers to these questions are never straightforward and its
1509 very possible (and even likely) that the person who submitted the
1510 patch may feel differently about the answer to those questions
1511 than you do. However, if you feel that that the answer to either
1512 of those questions is <quote>no,</quote> it is your responsibility
1513 to reject the change. If you fail to do this, the project will
1514 become unwieldy and unmaintainable and will ultimately fail.
1519 <title>Rejecting patches</title>
1522 Rejecting patches is probably the most difficult and the most
1523 sensitive job that the maintainer of any free software project
1524 has to face. But sometimes it has to be done. I mentioned earlier
1525 (in <xref linkend="developers"> and in <xref
1526 linkend="delegation">) that any developer needs to try and
1527 balance your responsibility and power to make what you think are
1528 the best technical decisions with the fact that you will lose
1529 support from other developers if you seem like you are on a power
1530 trip or being overly bossy or possessive of a community-based
1531 project. I recommend that you keep three major facts in mind when
1532 rejecting patches (or other changes):
1536 <title>Bring it to the community</title>
1538 One of the best ways of justifying a decision to reject a patch
1539 and working to not seem like you keep an iron grip on your
1540 project is by not making the decision alone at all. It might
1541 make sense to turn over larger proposed changes or more
1542 difficult decisions to a development mailing list where they can
1543 be discussed. There will be some patches (bug fixes, etc.) which
1544 will definitely be accepted and some that you feel are so off
1545 base that they do not even merit further discussion. It is those
1546 that fall into the grey area between these two groups that might
1547 merit a quick forward to a mailing list.
1551 I recommend this process wholeheartedly. As the project
1552 maintainer you are worried about making the best decision for
1553 the project, for the project's users and developers, and for
1554 yourself as a responsible project leader. Turning things over to
1555 an email list will demonstrate your own responsibility and
1556 responsive leadership as it tests and serves the interests of
1557 your software's community.
1562 <title>Technical issues are not always good justification</title>
1564 Especially towards the beginning, you will find that many
1565 changes are difficult to implement, introduce new bugs, or have
1566 other technical problems. Try to see past these. Especially with
1567 added functionality, good ideas do not always come from good
1568 coders. Technical merit is a valid reason to postpone an
1569 application of a patch but it is not always a good reason to
1570 reject a change outright. Even small changes are worth the
1571 effort of working with the developer submitting the patch to
1572 iron out bugs and incorporate the change if you thing you think
1573 it seems like a good addition to your project. The effort on
1574 your part will work to make your project a community project and
1575 it will pull a new or less experienced developer onto your
1576 project and even teach them something that might help them in
1577 making their next patch.
1582 <title>Common courtesy</title>
1584 It should go without saying but, <emphasis>above all and in all
1585 cases, just be nice.</emphasis> If someone has an idea and cares
1586 about it enough to write some code and submit a patch, they
1587 care, they are motivated, and they are already involved. Your
1588 goal as the maintainer is make sure they submit again. They may
1589 have thrown you a dud this time but next time may be the idea or
1590 feature that revolutionizes your project.
1594 It is your responsibility to first justify your choice to not
1595 incorporate their change clearly and concisely. Then thank
1596 them. Let them know that you a appreciate their help and feel
1597 horrible that you can't incorporate their change. Let them know
1598 that you look forward to their staying involved and you hope
1599 that the next patch or idea meshes better with your project
1600 because you appreciate their work and want to see it in the
1601 project. If you have ever had a patch rejected after putting a
1602 large deal of time, thought, and energy into it, you remember
1603 how it feels and it feels bad. Keep this in mind when you have
1604 to let someone down. It's never easy but you need to do
1605 everything you can to make it as not-unpleasant as possible.
1611 <!-- Section2: branches -->
1613 <sect2 id="branches">
1614 <title>Stable and Development Branches</title>
1617 The idea of stable and development branches has already been
1618 described briefly in <xref linkend="chooseversioning"> and in
1619 <xref linkend="delegatebranch">. These allusions attest to some of
1620 the ways that multiple branches can affect your software. Branches
1621 can let you avoid (to some extent) some of the problems around
1622 rejecting patches (as described in <xref linkend="patching">) by
1623 allowing you to temporarily compromise the stability of your
1624 project without affecting those users who need that stability.
1628 The most common way of branching your project is to have one
1629 branch that is stable and one that is for development. This is the
1630 model followed by the Linux kernel that is described in <xref
1631 linkend="chooseversioning">. In this model, there is always one
1632 branch that is stable and always one that is in
1633 development. Before any new release, the development branch goes
1634 into a <quote>feature freeze</quote> as described in <xref
1635 linkend="freezing"> where major changes and added features are
1636 rejected or put on hold under the development kernel is released
1637 as the new stable branch and major development resumes on the
1638 development branch. Bug fixes and small changes that are unlikely
1639 to have any large negative repercussions are incorporated into the
1640 stable branch as well as the development branch.
1644 Linux's model is an extreme one. On many projects, there is no
1645 need to have two versions always available. It may make sense to
1646 have two versions only near a release. The Debian project has
1647 historically made both a stable and an unstable distribution
1648 available but has expanded to this to include: stable, unstable,
1649 testing, experimental, and (around release time) a frozen
1650 distribution that only incorporates bug fixes during the
1651 transition from unstable to stable. There are few projects whose
1652 size would necessitate a system like Debian's but this use of
1653 branches helps demonstrate how they can be used to balance
1654 consistent and effective development with the need to make regular
1655 and usable releases.
1659 In trying to set up a development tree for yourself, there are
1660 several things that might be useful to keep in mind:
1667 <term>Minimize the number of branches</term>
1669 <para>Debian may be able to make good use of four or five
1670 branches but it contains gigabytes of software in over 5000
1671 packages compiled for a 5-6 different architectures. For you,
1672 two is probably a good number. Too many branches will confuse
1673 your users (I can't count how many times I had to describe
1674 Debian's system when it only had 2 and sometimes 3 branches!),
1675 potential developers and even yourself. Branches can help but
1676 they come at a cost so use them very sparingly.</para>
1681 <term>Make sure that all your different branches are explained</term>
1683 <para>As I mentioned in the preceding paragraph, different
1684 branches <emphasis>will</emphasis> confuse your users. Do
1685 everything you can to avoid this by clearly explaining the
1686 different branches in a prominent page on your website and in a
1687 Readme file in the <acronym>FTP</acronym> or
1688 <acronym>HTTP</acronym> directory.</para>
1691 I might also recommend against a mistake that I think Debian
1692 has made. The terms <quote>unstable,</quote>
1693 <quote>testing,</quote> and <quote>experimental</quote> are
1694 vague and difficult to rank in order of stability (or
1695 instability as the case may be). Try explaining to someone
1696 that <quote>stable</quote> actually means <quote>ultra
1697 stable</quote> and that <quote>unstable</quote> doesn't
1698 actually include any unstable software but is really stable
1699 software that is untested as a distribution.
1703 If you are going to use branches, especially early on, keep in
1704 mind that people are conditioned to understand the terms
1705 <quote>stable</quote> and <quote>development</quote> and you
1706 probably can't go wrong with this simple and common division of
1713 <term>Make sure all your branches are always available</term>
1715 <para>Like a lot of this document, this should probably should
1716 go without saying but experience has taught me that it's not
1717 always obvious to people. It's a good idea to physically split
1718 up different branches in different directories or directory
1719 trees on your <acronym>FTP</acronym> or <acronym>HTTP</acronym>
1720 site. Linux accomplishes this by having kernels in a v2.2 and a
1721 v2.3 subdirectory where it is immediately obvious (after you
1722 know their version numbering scheme) which directory is for the
1723 most recent stable and the current development releases. Debian
1724 accomplishes this by naming all their distribution with names
1725 (i.e. woody, potato, etc.) and then changing symlinks named
1726 <quote>stable,</quote> <quote>unstable</quote> and
1727 <quote>frozen</quote> to point to which ever distribution (by
1728 name) is in whatever stage. Both methods work and there are
1729 others. In any case, it is important that different branches
1730 are always available, are accessible from consistent locations,
1731 and that different branches are clearly distinguished from each
1732 other so your users know exactly what they want to be
1733 downloading and where to get it.</para>
1742 <!-- Section2: otherdev -->
1744 <sect2 id="otherdev">
1745 <title>Other Development issues</title>
1747 There are more issues surrounding interaction with developers in a
1748 free software project that I can not touch on in great detail in a
1749 HOWTO of this size. Please don't hesitate to contact me if you see
1750 any major omissions.
1754 Other smaller issues that are worth mentioning are:
1757 <sect3 id="freezing">
1758 <title>Freezing</title>
1760 For those projects that choose to adopt a split development model
1761 (<xref linkend="branches">), freezing is a concept that is worth
1762 becoming familiar with.
1766 Freezes come in two major forms. A <quote>feature freeze</quote>
1767 is a period when no significant functionality is added to a
1768 program. It is a period where established functionality (even
1769 skeletons of barely working functionality) can be improved and
1770 perfected. It is a period where bugs are fixed. This type of
1771 freeze is usually applied some period (a month or two) before a
1772 release. It is easy to push a release back as you wait for
1773 <quote>one more feature</quote> and a freeze helps to avoid this
1774 situation by drawing the much needed line in the sand. It gives
1775 developers room they need to get a program ready for release.
1779 The second type of freeze is a <quote>code freeze</quote> which
1780 is much more like a released piece of software. Once a piece of
1781 software has entered a code freeze, all changes to the code are
1782 frowned upon and only changes that fix known bugs are
1783 permitted. This type of freeze usually follows a <quote>feature
1784 freeze</quote> and directly precedes a release. Most released
1785 software is in what could be interpreted as a sort of high
1786 level<quote>code freeze.</quote>
1790 Even if you never choose to appoint a release manager (<xref
1791 linkend="releasemanager">), you will have an easier time
1792 justifying the rejection or postponement of patches (<xref
1793 linkend="patching"> before a release with a publicly stated
1799 <title>Forking</title>
1801 Forks are the most extreme version of a branch. A fork is
1802 when a group of developers takes code from a free software
1803 project and actually starts a brand new free software
1804 project. The most famous example of a fork is Emacs and
1805 XEmacs. Both emacsen are based on an almost identical code-base
1806 but for technical, political, and philosophical reasons,
1807 development was split into two projects which now compete with
1812 The short version of the fork section is, <emphasis>don't do
1813 them.</emphasis> Forks force developers to choose one project to
1814 work with, cause nasty political divisions and redundancy of
1815 work. Luckily, usually the threat of the fork is enough to scare
1816 the maintainer or maintainers of a project into changing the way
1817 they run their project to avoid it.
1821 In his chapter on <quote>The Open Source Process,</quote> Karl
1822 Fogel describes how to do a fork if you absolutely must. If you
1823 have determined that is absolutely necessary and that the
1824 differences between you and the people threatening to fork are
1825 absolutely unresolvable, I recommend Fogel's book as a good place
1832 <!-- Section1: users -->
1835 <title>Maintaining a Project: Interacting with Users</title>
1837 <primary>fswd!users</primary>
1841 If you've worked your way up to here, congratulations, you are
1842 nearing the end of this document. This final section describes some
1843 of the situations in which you, in your capacity as project
1844 maintainer, will be interacting with users. It gives some
1845 suggestions on how these situations might be handled effectively.
1849 Interacting with users is difficult. In our discussion of
1850 interaction with developers, the underlying assumption is that in a
1851 free software project, a project maintainer must constantly strive to
1852 attract and keep developers who can easily leave at any time.
1856 Users in the free software community are different than developers
1857 and are also different than users in the world of proprietary
1858 software and they should be treated differently than either
1859 group. Some ways in which the groups differ significantly follow:
1866 <para>The lines between users and developers are blurred in ways
1867 that is totally foreign to any proprietary development
1868 model. Your users are often your developers and vice
1873 <para>In the free software world, you are often your users only
1874 choice. Because there is such an emphasis on not replicating the
1875 work of others in the free software community and because the
1876 element of competition present in the propriety software model is
1877 absent (or at least in an extremely different form) in the free
1878 software development model, you will probably be the only project
1879 that does what you do (or at least the only one that does what
1880 you do in the way that you do it). This means your responsiveness
1881 to your users is even more important than in the proprietary
1882 software world.</para>
1886 <para>In an almost paradoxical situation, free software projects
1887 have less immediate or dire consequences for ignoring their users
1888 altogether--it is also often easier to do. Because you don't
1889 usually need to compete with another product in the free software
1890 model, chances are good that you will not be scrambling to gain
1891 the features of the competitor's newest program. This means that
1892 your development process will have to be directed either
1893 internally, by a commitment to your users or by both.</para>
1899 Trying to tackle this unique situation can only be done
1900 indirectly. Developers and maintainers need to listen to users and
1901 to try and be as responsive as possible. A solid knowledge of the
1902 situation recounted above is any free software developer's best tool
1903 for shifting his development or leadership style to fit the unique
1904 process of free software development. This chapters will try and
1905 introduce some of the more difficult or important points in any
1906 projects interactions with users and give some hints on how to
1910 <!-- Section2: testing -->
1912 <sect2 id="testing">
1913 <title>Testing and Testers</title>
1916 In addition to your users being your developers, they are also
1917 (and perhaps more commonly) your testers. Before I get flamed, I
1918 should rephrase my sentence: <emphasis>some</emphasis> of your
1919 users are your testers.
1923 It is important that this distinction be made early on because not
1924 all of your users want to be testers. Many users want to use
1925 stable software and don't care if they don't have the newest
1926 greatest software with the latest and greatest features. These
1927 users except a stable, tested piece of software with major or
1928 obvious bugs worked out or openly declared and will be angry if
1929 they find themselves in a testing position. This is yet another
1930 way in which a split development model (as mentioned in <xref
1931 linkend="branches">) might come in handy.
1935 <title>Automated testing</title>
1937 For many programs, many common mistakes can be caught by
1938 automated means. Automated tests tend to be pretty good at
1939 catching errors that you've run into several times before or
1940 something you just forget. They are not very good at finding
1941 errors, even major ones, that were totally unforeseen.
1945 CVS comes with a bourne shell script called sanity.sh that is
1946 worth looking at. Debian uses a program called lintian that
1947 checks Debian packages for all of the most common errors. While
1948 use of these scripts may not be possible, there is a host of
1949 other sanity checking software on the net that may be applicable
1950 (feel free to email any recommendations). None of these will
1951 create a bug-free release but they will avoid at least some major
1952 oversights. Finally, if your programs become a long term
1953 endeavor, you will find that there are certain errors that you
1954 tend to make over and over. Start a collection of scripts that
1955 check for these errors to help prevent them in the future.
1960 <title>Testing by testers</title>
1962 For any program that depends on user interactivity, many bugs
1963 will only be uncovered through testing by users actually clicking
1964 the keys and pressing the mouse buttons. For this you need
1965 testers and as many testers as possible.
1969 The most difficult part of testing is finding testers. It's
1970 usually a good tactic to post a message to a relevant mailing
1971 list or news group announcing a specific proposed release date
1972 and outline the functionality of the program. If you put some
1973 time into the announcement, you are sure to get a few bites.
1977 The second most difficult part of testing is keeping your testers
1978 and keeping them actively involved in the testing
1979 process. Fortunately, there are some tried and true tactics that
1980 can applied towards this end:
1987 <term>Make things simple for your testers</term>
1989 <para>Your testers are doing you a favor so make it as easy as
1990 possible for them. This means that you should be careful to
1991 package your software in a way that is easy to find, unpack,
1992 install, and uninstall. This also means you should explain
1993 what you are looking for to each tester and make the means for
1994 reporting bugs simple and well established. The key is to
1995 provide as much structure as possible to make your testers'
1996 jobs easy and maintain as much flexibility as possible for
1997 those that want to do things a little differently.</para>
2002 <term>Be responsive to your testers</term>
2004 <para>When your testers submit bugs, respond to them and
2005 respond quickly. Even if you are only responding to tell them
2006 that the bug has already been fixed, quick and consistent
2007 responses make them feel like their work is heard, important,
2008 and appreciated.</para>
2013 <term>Thank your testers</term>
2015 <para>Thank them personally each time they send you
2016 patch. Thank them publicly in the documentation and the about
2017 section of your program. You appreciate your testers and your
2018 program would not be possible without their help. Make sure
2019 they know it. Pat them on the back to make sure the rest of
2020 the world knows it too. It will be appreciated more than you
2031 <!-- Section2: support -->
2033 <sect2 id="support">
2034 <title>Setting up Support Infrastructure</title>
2037 While testing is important, the large part of your interactions
2038 and responsibility to your users falls under the category of
2039 support. The best way to make sure your users are adequately
2040 supported in using your program is to set up a good infrastructure
2041 for this purpose so that your developers and users help each other
2042 and less of the burden falls on you. This way, people will also
2043 get quicker and better responses to their questions. This
2044 infrastructure comes in several major forms:
2048 <title>Documentation</title>
2050 It should not come as any surprise that the key element to any
2051 support infrastructure is good documentation. This topic was
2052 large covered in <xref linkend="documentation"> and will not be
2058 <title>Mailing lists</title>
2060 Aside from documentation, effective mailing lists will be your
2061 greatest tool in providing user support. Running a mailing list
2062 well is more complicated than installing mailing list software
2067 <title>Separate lists</title>
2070 A good idea is too separate your user and development mailing
2071 lists (perhaps into project-user@host and project-devel@host)
2072 and enforce the division. If people post a development question
2073 onto -user, politely ask them to repost it onto -devel and vise
2074 versa. Subscribe yourself to both groups and encourage all
2075 primarily developers to do the same.
2079 This system provides that no one person is stuck doing all of
2080 the support work and works so that users learn more about the
2081 program, they can help newer users with their questions.
2086 <title>Choose mailing list software well</title>
2088 Please don't make the selection of mailing list software
2089 impulsively. Please consider easy accessibility by users without
2090 a lot of technical experience so you want to be as easy as
2091 possible. Web accessibility to an archive of the list is also
2096 The two biggest free software mailing list programs are <ulink
2097 url="http://www.greatcircle.com/majordomo/">majordomo</ulink>
2098 and <ulink url="http://www.list.org/">GNU Mailman</ulink>. A
2099 long time advocate of majordomo, I would now recommend any
2100 project choose GNU Mailman. It fulfills the criteria listed
2101 above and makes it easier to do so. It provides a good mailing
2102 list program for a free software project maintainer as opposed
2103 to a good mailing list application for a mailing list
2108 There are other things you want to take in setting up your
2109 list. If it is possible to gate your mailing lists to USENET and
2110 provide them in digest form as well as making them accessible on
2111 the web, you will please some users and work to make the support
2112 infrastructure slightly more accessible.
2118 <title>Other support ideas</title>
2121 A mailing list and accessible documentation are far from all you
2122 can do to set up good user support infrastructure. Be
2123 creative. If you stumble across something works well, email me
2124 and I'll include it here in the HOWTO.
2128 <title>Make your self accessible</title>
2130 You can not put to few methods to access you. If you hang out in
2131 an <acronym>IRC</acronym> channel, don't hesitate to list in
2132 your projects documentation. List email and snail mail
2133 addresses, or ways to reach you via <acronym>ICQ</acronym>,
2134 <acronym>AIM</acronym>, or Jabber.
2139 <title>Bug management software</title>
2141 For many large software projects, use of bug management software
2142 is essential to keep track of which bugs have been fixed, which
2143 bugs have not been fixed, and which bugs are being fixed by
2144 which people. Debian uses the <ulink
2145 url="http://bugs.debian.org">Debian Bug Tracking System</ulink>
2146 (<acronym>BTS</acronym>) although it may not be best choice for
2147 every project (it seems to currently be buckling under its own
2148 weight. As well as a damn good web browser, the mozilla project
2149 has spawned a sub-project resulting in a bug tracking system
2151 url="http://www.mozilla.org/projects/bugzilla/">bugzilla</ulink>
2152 which has become extremely possible and which I like quite a
2157 These systems (and others like them) can be unwieldy so
2158 developers should be careful to not spend more time on the bug
2159 tracking system than on the bugs or the projects themselves. If
2160 a project continues to grow, use of a bug tracking system can
2161 provide an easy standard way for users and testers to report
2162 bugs and for developers and maintainers to fix them and track
2163 them in an orderly fashion.
2169 <!-- Section2: releasing -->
2171 <sect2 id="releasing">
2172 <title>Releasing Your Program</title>
2175 As mentioned earlier in the HOWTO, the first rule of releasing is,
2176 <emphasis>release something useful.</emphasis> Non-working or
2177 not-useful software will not attract anyone to your
2178 project. People will be turned off of your project and be likely
2179 to simply gloss over it next time they see a new version
2180 announced. Half-working software, if useful, will intrigue people,
2181 whet their appetites for versions to come, and encourage them to
2182 join the development process.
2186 <title>When to release</title>
2189 Making the decision to release your software for the first time
2190 is an incredibly important and incredibly stressful decision. But
2191 it needs to be done. My advice is to try and make something that
2192 is complete enough to be usable and incomplete enough to allow
2193 for flexibility and room for imagination by your future
2194 developers. It's not an easy decision. Ask for help on a local
2195 Linux User Group mailing list or from a group of developer
2200 One tactic is to first do an <quote>alpha</quote> or
2201 <quote>beta</quote> release as described below in <xref
2202 linkend="alphabeta">. However, most of the guidelines described
2207 <emphasis>When you feel in your gut it is time and you feel
2208 you've weighed the situation well several times, cross your
2209 fingers and take the plunge.</emphasis>
2214 <title>How to release</title>
2217 If you've followed the guidelines described in this HOWTO up
2218 until this point, the mechanics of doing a release are going to
2219 be the easy part of releasing. If you have set up consistent
2220 distribution locations and the other infrastructure described in
2221 the preceding sections, releasing should be as simple as building
2222 the package, checking it once over, and uploading it into the
2223 appropriate place and then reflecting the release on your
2228 <sect3 id="alphabeta">
2229 <title>Alpha, beta, and development releases</title>
2232 When contemplating releases, it worth considering the fact that
2233 not every release needs to be a full numbered release. Software
2234 users are accustomed to pre-releases but you must be careful to
2235 label these releases accurately or they cause more problems then
2243 <term>alpha releases</term>
2245 <para>Alpha releases are expected to be unstable, perhaps a
2246 little unsafe, but definitely usable. Alpha versions should
2247 have full functionality and limited testing. They can have
2248 known bugs and kinks that have yet to be worked out. Before
2249 releasing an alpha, be sure to keep in mind that
2250 <emphasis>alpha releases are still releases</emphasis> and
2251 people are not going to be expecting a nightly build from the
2252 CVS source. An alpha should work and have minimal testing and
2253 bug fixing already finished.</para>
2258 <term>beta releases</term>
2260 <para>Beta releases are general expected to be usable and
2261 slightly unstable, although definitely <emphasis>not
2262 unsafe.</emphasis> Beta releases usually preclude a full
2263 release by under a month. They can contain small known bugs
2264 but no major ones. All major functionality should be fully
2265 implemented although the exact mechanics can still be worked
2266 out. Beta releases are great tool to whet the appetites of
2267 potential users by giving them a very realistic view of where
2268 your project is going in the very near future and can help
2269 keep interest by giving people
2270 <emphasis>something.</emphasis></para>
2275 <term>development releases</term>
2277 <para><quote>Development release</quote> is much more vague
2278 term than <quote>alpha</quote> or <quote>beta</quote>. I
2279 usually choose to reserve the term for discussion of a
2280 development branch although there are other ways to use the
2281 term. So many in fact, that I feel the term has been
2282 cheapened. The popular window manager <ulink
2283 url="http://www.enlightenment.org">Enlightenment</ulink> has
2284 released <emphasis>nothing but</emphasis> development
2285 releases. Most often, the term is used to describe releases
2286 that are not even to alpha or beta stages though and if I were
2287 to release a pre-alpha version of a piece of software in order
2288 to keep interest in my project live, this is probably how I
2289 would have to label it.</para>
2299 <!-- Section2: announcing -->
2301 <sect2 id="announcing">
2302 <title>Announcing Your Project</title>
2305 Well, you've done it. You've (at least for the purposes of this
2306 HOWTO) designed, built, and released your free software
2307 project. All that is left is for you to tell the world so they
2308 know to come and try it out and hopefully jump on board with
2309 development. If everything is in order as described above, this
2310 will be a quick and painless process. A quick announcement is all
2311 that it takes to put yourself on the free software communities
2316 <title>Mailing lists and USENET</title>
2318 Email is still the way that most people on the Internet get their
2319 information. Its a good idea to send a message announcing your
2320 program to any relevant mailing list you know of and any relevant
2321 USENET discussion group. Karl Fogel recommends that use you
2322 simple subject describing the fact that the message is an
2323 announcement, the name of the program, the version, and a
2324 half-line long description of its functionality. This way, any
2325 interested user or developer will be immediately attracted to
2326 your announcement. Fogel's example looks like:
2329 <screen>Subject: ANN: aub 1.0, a program to assemble USENET binaries</screen>
2332 The rest of the email should describe the programs functionality
2333 quickly and concisely in no more than two paragraphs and should
2334 provide links to the projects webpage and direct links to
2335 downloads for those that want to try it right away.
2339 You should repeat this announcement process consistently in the
2340 same locations for each subsequent release.
2345 <title>freshmeat.net</title>
2347 Mentioned earlier in <xref linkend="evalwhere">, in today's free
2348 software community, announcements of your project on freshmeat
2349 are almost more important than announcements on mailing lists.
2353 Visit the <ulink url="http://freshmeat.net">freshmeat.net
2354 website</ulink> or their <ulink
2355 url="http://freshmeat.net/add-project/">submit project
2356 page</ulink> to post your project onto their site and into their
2357 database. In addition to a large website, freshmeat provides a
2358 daily newsletter that highlights all the days releases and
2359 reaches a huge audience (I skim it every night for any
2360 interesting new releases).
2368 <!-- Keep this comment at the end of the file
2373 sgml-namecase-general:t
2374 sgml-general-insert-case:lower
2375 sgml-minimize-attributes:nil
2376 sgml-always-quote-attributes:t
2378 sgml-indent-data:nil
2379 sgml-parent-document:nil
2380 sgml-exposed-tags:nil
2381 sgml-local-catalogs:nil
2382 sgml-local-ecat-files:nil