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>25 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 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
51 <!-- Section1: intro -->
54 <title>Introduction</title>
57 <primary>fswd!introduction</primary>
61 For various reasons, this release has been code-named the
62 <emphasis>homemade yogurt</emphasis> release.
66 New code names will appear as per industry standard
67 guidelines to emphasize the state-of-the-art-ness of this
72 Skimming through freshmeat.net 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
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, relevant 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>.
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
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.
115 <!-- Section2: copyright -->
117 <sect2 id="copyright">
118 <title>Copyright Information</title>
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.
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
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.
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.
154 If you have any questions, please contact
155 <email>linux-howto@metalab.unc.edu</email>
159 <!-- Section2: disclaimer -->
161 <sect2 id="disclaimer">
162 <title>Disclaimer</title>
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.
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
181 Naming of particular products or brands should not be seen
186 You are strongly recommended to take a backup of your system
187 before major installation and backups at regular intervals.
191 <!-- Section2: newversions-->
193 <sect2 id="newversions">
194 <title>New Versions</title>
197 <primary>(your index root)!news on</primary>
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.
209 The latest version number of this document should always be listed
210 on <ulink url="http://people.debian.org/~mako/">my webpage at
215 The newest version of this HOWTO will always be made available at
216 the same website, in a variety of formats:
223 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.html">HTML</ulink>.
229 <ulink URL="http://people.debian.org/~mako/howto/fswd-howto.txt">plain text</ulink>.
235 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.US.ps.gz">compressed
236 postscript (US letter format)</ulink>.
242 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.UF.ps.gz">compressed
243 postscript (Universal format / 8.27x11in; 210x279mm)</ulink>.
249 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.sgml">SGML source</ulink>.
256 <!-- Section2: credits -->
259 <title>Credits</title>
262 In this version I have the pleasure of acknowledging:
266 <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
267 Source Development with CVS</emphasis> published by the Coriolis
268 Open Press. Large 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.
282 Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
286 Also providing support and material, and inspiration for this
287 HOWTO is Eric S. Raymond for his prolific, consistent, 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>definitely, definitely works</emphasis>.
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 philosophical 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>.
309 <!-- Section2: feedback -->
311 <sect2 id="feedback">
312 <title>Feedback</title>
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@debian. org</email>.
326 <!-- Section2: translations -->
328 <sect2 id="translations">
329 <title>Translations</title>
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.
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@debian.org</email>.
347 <!-- Section1: intro: END -->
349 <!-- Section1: starting -->
351 <sect1 id="starting">
352 <title>Starting a Project</title>
355 <primary>fswd!starting</primary>
358 With very little argument, starting a project is most difficult
359 part of successful free software development. Laying a firm
360 foundation for your project will determine whether your project
361 flourishes or withers away and dies. It is also the subject that is
362 of most immediate interest to anyone reading this document as a
367 Starting a project also involves a dilemma that you as a developer
368 must try and deal with. No potential user for your program will be
369 interested by a program that doesn't work. Simultaneously, the
370 development process that you want to employ holds involvement of
371 users as essential to the process of the development that will
372 realize this working software.
376 It is in these dangerous initial moments that anyone working to
377 start a free software project must strike a balance. One of the
378 most important ways that someone trying to start a project can work
379 towards this balance is by establishing a framework for the
380 development process through some of the ways mentioned in this
385 <!-- Section2: chooseproject-->
387 <sect2 id="chooseproject">
388 <title>Choosing a Project</title>
391 If you are reading this document, there's a good chance you
392 already have an idea for a project in mind. Chances are pretty
393 good, it fills a gap by doing something that no other free
394 software process does or or does it in a way that is unique
395 enough to necessitate a separate project.
398 <sect3 id=identifyidea>
399 <title>Identify and articulate your idea</title>
401 Eric S. Raymond writes about how free software projects start in
402 his paper, "The Cathedral and the Bazaar" which comes as required
403 reading for any free software development. You can find it <ulink
404 url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/">online
409 In "The Cathedral and Bazaar," Raymond tells us that:
410 <emphasis>Every good work of software starts by scratching a
411 developers itch.</emphasis> Raymond now widely accepted
412 hypothesis is that new free software programs are written, first
413 and foremost, to solve a specific problem facing the developer.
417 If you have an idea for a program in mind, chances are good that
418 it it is targeting a specific problem or itch you want to see
419 scratched. <emphasis>This idea is the project. Articulate it
420 clearly. Write it out. Describe the problem you will attack in
421 detail. The success of your project in tackling a particular
422 problem will be tied to your ability to identify that problem
423 early on. Find out exactly what it is that you want your project
428 <sect3 id=evalulateidea>
429 <title>Evaluate your idea</title>
432 In evaluating your idea, you need to ask yourself questions.
433 Before you move any further into this HOWTO, you need to
434 determine if the free software development model really is the
435 right one for your project. Obviously, since the program
436 scratches your itch, you are definitely interested in seeing it
437 implemented in code. But, because one hacker coding alone fails
438 to qualify as a free software development effort, you need to ask
439 yourself the question: <emphasis>Is anybody else
440 interested?</emphasis>
444 Sometimes the answer is <emphasis>no</emphasis>. If you want to
445 write a set of scripts to sort <emphasis>your</emphasis>
446 <acronym>MP3</acronym> collection on your machine, maybe the free
447 software development model is not the best one to
448 choose. However, if you want to write a set of scripts to sort
449 <emphasis>anyone's</emphasis> <acronym>MP3</acronym>s, a free
450 software project might fill a useful gap.
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>
463 <title>Finding Similar Projects</title>
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
476 <term>freshmeat.net:</term>
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
488 <term>Slashdot:</term>
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 development effort to be
495 announced here so it definitely worth checking.</para>
500 <term>SourceForge:</term>
502 <para><ulink url="http://sourceforge.net">SourceForge</ulink>
503 houses and facilitates a growing 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
512 url="http://sourceforge.net/snippet/">Code Snippet
513 Library</ulink> which contains useful reusable chunks of
514 code in an array of languages which can come in useful in any
520 <term>Google and Google's Linux Search:</term>
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 powerful 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>
537 <title>Deciding to Proceed</title>
539 Once you have successful 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
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.
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 remember
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.
574 <!-- Section2: licensing-->
576 <sect2 id="licensing">
577 <title>Licensing your Software</title>
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.
587 <sect3 id="chooselicense">
588 <title>Choosing a license</title>
591 Any discussion of licenses is also sure to generate at least a
592 small flame war 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 allegiances in this argument are out in the open.
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 Guidelines</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 understanding.
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>.
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
640 The three major license can be found at the following locations:
646 <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
647 General Public License</ulink></para>
650 <para><ulink url="http://www.debian.org/misc/bsd.license">The
651 BSD License</ulink></para>
655 url="http://language.perl.com/misc/Artistic.html">The Artistic
656 License</ulink></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>
668 <sect3 id="licensechoose">
669 <title>The mechanics of licensing</title>
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:
682 <para>If at all possible, attach and distribute a full copy of
683 the license with the source and binary in a separate
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>
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
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.
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.
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.
714 The <acronym>GPL</acronym> goes on to recommend attaching
715 information on contacting you (the author) via email or
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:
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'
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>
751 <sect3 id="licensewarning">
752 <title>Final license warning</title>
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 distribution, 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 re-release 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.
771 <!-- Section2: chooseversioning-->
773 <sect2 id="chooseversioning">
774 <title>Choosing a Method of Version Numbering</title>
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.
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
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.
800 <term>Linux kernel version numbering:</term>
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
812 Whether you plan on having a split development model (as
813 described in <xref linkend="branches">) or only one version
814 released at a time, my experience with several free software
815 projects and with the Debian project has taught me that use of
816 Linux's version numbering system is worth taking into
817 consideration. In Debian, all minor versions are stable
818 distributions (2.0, 2.1, etc). However, many people assume that
819 2.1 is an unstable or development version and continue to use
820 an older version until they get so frustrated with the lack of
821 development and progress that they complain. If you never
822 release an odd minor version but only release even ones, nobody
823 is hurt, and less people are confused.
829 <term>Wine version numbering:</term>
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 January 04, 2000 would be
837 <quote>wine-20000104</quote>. For certain projects, Year Month
838 Day format can make a lot of sense.
844 <term>Mozilla milestones:</term>
846 <para>When one considers Netscape 6 and vendor 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
854 Mozilla's development structure has historically been made up
855 of milestones. From the 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 road-maps
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 road-map had been reached, that
863 particular build was marked as a milestone release.
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.
878 <!-- Section2: documentation-->
880 <sect2 id="documentation">
881 <title>Documentation</title>
884 A huge number of otherwise fantastic free software applications
885 have withered because their author was the only person who knew
886 how to use them well. Even if your program is written primarily
887 for a techno-savvy group of users, documentation is helpful and
888 necessary for the survival of your project. You will learn later
889 in <xref linkend="releasing"> that you must always release
890 something that is usable. <emphasis>A piece of software without
891 documentation is not usable.</emphasis>
895 There are lots of ways to document your project and lots of
896 different people to document for. The idea of documentation the
897 code itself to help facilitate development by a large community is
898 vital but is outside the scope of this HOWTO. This being the case,
899 this section deals mostly useful tactics for user-directed
904 A combination of tradition and necessity has resulted in a
905 semi-regular system method of documentation in most free software
906 projects that is worth following. Both users and developers expect
907 to be able to get documentation in several ways and its essential
908 that you provide the information they are seeking in a form they
909 can read if your project is ever going to get off the
910 ground. People have come to expect:
914 <title>Man pages</title>
916 <para>Your users will want to be able to type <quote>man
917 foo</quote> end up with a nicely formatted man page highlighting
918 the basic use of their application. Make sure that before you
919 release your program, you've planned for this.
923 Man pages are not difficult to write. There is excellent
924 documentation on the man page process available through the
925 <quote>The Linux Man-Page-HOWTO</quote> available through the
926 Linux Documentation project <acronym>(LDP)</acronym> written by
927 Jens Schweikhardt. It is available <ulink
928 url="http://www.schweikhardt.net/man_page_howto.html">from
929 Schweikhardt's site</ulink> or <ulink
930 url="http://www.linuxdoc.org/HOWTO/mini/Man-Page.html">from the
931 <acronym>LDP</acronym></ulink>.
935 It is also possible to write man pages using DocBook SGML and
936 convert them into man pages. Because man pages are so simple, I
937 have not been able to follow this up but would love help from
938 anyone who can give me more information on how exactly this is
944 <title>Command line accessible documentation</title>
947 Most users will expect the most basic amount of documentation to
948 be easily available from the command line. For few programs should
949 then documentation extend for more than one screen (24 or 25
950 lines) but it should cover the basic usage, a brief (one or two
951 sentence) description of the program, a list of commands, all the
952 major options, and a pointer to more in-depth documentation for
953 those who need it. The command line documentation for Debian's
954 apt-get serves as an excellent example and a useful model:
958 apt 0.3.19 for i386 compiled on May 12 2000 21:17:27
959 Usage: apt-get [options] command
960 apt-get [options] install pkg1 [pkg2 ...]
962 apt-get is a simple command line interface for downloading and
963 installing packages. The most frequently used commands are update
967 update - Retrieve new lists of packages
968 upgrade - Perform an upgrade
969 install - Install new packages (pkg is libc6 not libc6.deb)
970 remove - Remove packages
971 source - Download source archives
972 dist-upgrade - Distribution upgrade, see apt-get(8)
973 dselect-upgrade - Follow dselect selections
974 clean - Erase downloaded archive files
975 autoclean - Erase old downloaded archive files
976 check - Verify that there are no broken dependencies
980 -q Loggable output - no progress indicator
981 -qq No output except for errors
982 -d Download only - do NOT install or unpack archives
983 -s No-act. Perform ordering simulation
984 -y Assume Yes to all queries and do not prompt
985 -f Attempt to continue if the integrity check fails
986 -m Attempt to continue if archives are unlocatable
987 -u Show a list of upgraded packages as well
988 -b Build the source package after fetching it
989 -c=? Read this configuration file
990 -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp
991 See the apt-get(8), sources.list(5) and apt.conf(5) manual
992 pages for more information and options.
996 It has become a GNU convention to make this information
997 accessible with the <quote>-h</quote> and the
998 <quote>--help</quote> options. Most GNU/Linux users will expect
999 to be able to retrieve basic documentation these ways so if you
1000 choose to use different method, be prepared for the flames and
1001 for the fallout that may result.
1005 <title>Files users will expect</title>
1007 In addition to man pages and online help, there are certain files
1008 where people will look to documentation, especially in any
1009 package containing source code. In a source distribution, most of
1010 these files can be stored in a the root directory of the source
1011 distribution or in a subdirectory of the root called
1012 <quote>doc</quote> or <quote>Documentation</quote>. These files include:
1017 <term>README or Readme</term>
1021 A document containing all the basic installation,
1022 compilation, and even basic use instructions that make up
1023 the bare minimum information needed to get the program up and
1024 running. A README is not your chance to be verbose but needs
1025 to be concise and effective. An ideal README is at least 30
1026 lines long and more no more than 250.
1032 <term>INSTALL or Install</term>
1036 The INSTALL file should be much shorter than the INSTALL file
1037 and should quickly and concisely describe how to build and
1038 install the program. Usually an install simply instructs the
1039 user to run ./configure; make; make install and touches on
1040 any unusual options that may be necessary. More advanced
1041 users can usually avoid them but it's good practice to at
1042 least glance at the file to understand what can be
1043 expected. For most relatively standard install procedures and
1044 for most programs, INSTALL files are as short as possible are
1045 rarely over 100 lines.
1051 <term>Changelog, ChangeLog, CHANGELOG, or changelog</term>
1055 A changelog is a simple file that every well-managed free
1056 software project should include. A changelog is simple the
1057 file that, as its name would imply, logs or documents the
1058 changes to a program. The most simple way to do a changelog
1059 is to simply keep a file with the source code for your
1060 program and add a section to the top of the changelog with
1061 each release describing what has been, changed, fixed, or
1062 added to the program. It's a good idea to post the changelog
1063 onto the website as well because it can help people decide
1064 whether they want or need to upgrade to a newer version or
1065 wait for a more significant upgrade.
1071 <term><acronym>FAQ</acronym></term>
1075 For those of you that don't already
1076 know. <acronym>FAQ</acronym> stands for Frequently Asked
1077 Questions and the file is a collection of exactly that. FAQs
1078 are not difficult to make. Simply make a policy that if you
1079 are asked a question or see a question on a mailing list two
1080 or more times, add it the question (and its answer) to your
1081 FAQs. FAQs are more optional than the files listed above but
1082 they can save your time, increase usability, and decrease
1083 headaches on all sides.
1093 <title>Website</title>
1095 It's only a sort of an issue of documentation but a good website
1096 is quickly becoming an essential part of any free software
1097 project. Your website should provide access to documentation (in
1098 <acronym>HTML</acronym> if possible). It should also include a
1099 section for news and events around your program and a section
1100 that details the process of getting involved with development or
1101 testing and creates an open invitation. It should also supply
1102 links to any mailing lists, similar websites, and directly to all
1103 the available ways of downloading your software.
1108 <title>Other documentation hints</title>
1111 It doesn't hurt to distribute any documentation for your program
1112 from your website or anywhere else (FAQs etc) with the
1113 program. Make a FAQ by cutting and posting common questions and
1114 answers from a mailing list or your own email. Then, don't
1115 hesitate through this in the programs tarball. If people don't
1116 need it, they will delete it. I can repeat it over and over:
1117 <emphasis>Too much documentation is not a sin.</emphasis>
1121 All your documentation should be in plaintext, or, in cases where
1122 it is on your website primarily, in HTML. Everyone can cat a
1123 file, everyone has a pager, (almost) everyone can render
1124 HTML. <emphasis>You are welcome to distribute information in PDF,
1125 PostScript, RTF, or any number of other widely used formats but
1126 this information must also be available in plaintext or HTML or
1127 people will be very angry at you.</emphasis>
1132 <!-- Section2: presentation -->
1134 <sect2 id="presentation">
1135 <title>Other Presentation Issues</title>
1137 Many of the remaining issues surrounding the creation of a new
1138 free software program fall under what most people describe as
1139 common sense actions. Still, they are worth noting briefly in
1140 hopes that they may remind a developer of something they may have
1145 <title>Package formats</title>
1147 Package formats may differ depending on the system you are
1148 developing for. For windows based software, Zip archives (.zip)
1149 usually serve as the package format of choice. If you are
1150 developing for GNU/Linux, *BSD, or any UN*X, make sure that your
1151 source code is always available in tar'ed and gzip'ed format
1152 (.tar.gz). UNIX compress (.Z) has gone out of style and
1153 usefulness and faster computers have brought bzip2 (.bz2) into
1154 the spot-lit as a more effective compression medium. I now make
1155 all my releases available in both gzip'ed and bzip2'ed formats.
1159 Binary packages are largely distribution specific. You can build
1160 binary packages against a current version of a major
1161 distribution, you will only make your users happy. Try to foster
1162 relationships with users or developers of large distribution to
1163 develop a system for consistent binary packages. It's often a
1164 good idea to provide RedHat <acronym>RPM</acronym>'s (.rpm),
1165 Debian deb's (.deb) and source <acronym>RPM</acronym>'s
1166 <acronym>SRPM</acronym>'s. Binary packages can also be compiled
1167 against a specified system with specified libraries and
1168 distributed in tar.gz format as well. <emphasis>Remember: While
1169 these binaries packages are nice, getting the source packaged and
1170 released should always be your priority. Other can and will do
1171 the the binary packages for you.</emphasis>
1176 <title>Useful tidbits and presentation hints</title>
1183 <emphasis>Make sure that your program can always be found in a
1184 single location.</emphasis> Often this means that you have a
1185 single directory accessible via <acronym>FTP</acronym> or
1186 <acronym>HTTP</acronym> where the newest version will be
1187 quickly recognized. One effective technique is a provide a
1188 symlink called <quote>projectname-latest</quote> that is
1189 always pointing to the most recent released or development
1190 version of your free software project.
1196 <emphasis>Make sure that there is a consistent email address
1197 for bug reports.</emphasis> It's usually a good idea to make
1198 this something that is NOT your primary email address like
1199 projectname@host or projectname-bugs@host. This way if you
1200 ever decide to hand over maintainership or if your email
1201 address changes, you simply need to change where this email
1202 address forwards to. It also will allow for more than one
1203 person to deal with the influx of mail that is created if your
1204 project becomes as huge as you hope it will.
1215 <!-- Section1: starting: END -->
1217 <!-- Section1: developers -->
1219 <sect1 id="developers">
1220 <title>Maintaining a Project: Interacting with Developers</title>
1222 <primary>fswd!developers</primary>
1226 Once you have gotten the project started, you have gotten over the
1227 most difficult hurdles in the development process of your
1228 program. Laying a firm foundation is essential, but the development
1229 process itself is equally important and provides an equal number of
1230 opportunities for failure. In the next two sections, I will and
1231 cover running a project by discussing how to maintain a project
1232 rough interactions with developers and with users.
1236 In releasing your program, your program becomes free software. This
1237 transition is more than just a larger user base. By releasing your
1238 program as free software, <emphasis>your</emphasis> software
1239 becomes the <emphasis>free software community's</emphasis>
1240 software. The direction of your software's development will be
1241 reshaped, redirected, and fully determined by your users and, to a
1242 larger extent, by other developers in the community.
1246 The major difference between free software development and propriety
1247 software development is the developer base. As the leader of a free
1248 software project, you need to attract and keep developers in a way
1249 that leaders of proprietary software projects simply don't have to
1250 worry about. <emphasis>As the person leading development of a free
1251 software project, you must harness the work of fellow developers by
1252 making responsible decisions and by and by choosing not to make
1253 decisions responsibly. You have to direct developers without being
1254 overbearing or bossy. You need to strive to earn respect and never
1255 forget to give it.</emphasis>
1258 <!-- Section2: delegation -->
1260 <sect2 id="delegation">
1261 <title>Delegating Work</title>
1264 By now, you've hypothetically followed me through the early
1265 writing of a piece of software, the creation of a website and
1266 system of documentation and and we've gone ahead and (as will be
1267 discussed in <xref linkend="releasing">) released it to the rest
1268 of the world. Times passes, and if things go well, people become
1269 interested and want to help. The patches begin flowing in.
1273 <emphasis>Like the parent of any child who grows up, it's now time
1274 to wince and smile and do most difficult thing in any parents
1275 life: It's time to let go.</emphasis>
1279 Delegation is the political way of describing this process of
1280 <quote>letting go.</quote> It is the process of handing some of
1281 the responsibility and power over your project to other responsible
1282 and involved developers. It is difficult for anyone who has
1283 invested a large deal of time and energy into a project but it
1284 essential for the growth of any free software project. One person
1285 can only do so much. <emphasis>A free software project is nothing
1286 without the involvement of a group of developers. A group of
1287 developers can only be maintained through respectful and
1288 responsible leadership and delegation.</emphasis>
1292 As your project progresses, you will notice people who are putting
1293 significant amounts of time and effort into your project. These
1294 will be the people submitting the most patches, posting most on
1295 the mailing lists, engaging in long email discussions. It is your
1296 responsibility to contact these people and to try and shift some of
1297 the power and responsibility of your position as the project's
1298 maintainer onto them (if they want it). There are several easy
1299 ways you can do this:
1303 <title>How to delegate</title>
1306 Like anything, its easier to see how others delegate than to do
1307 it yourself. You may find that other developers seem even more
1308 experienced or knowledgeable than you. Your job as a maintainer
1309 does not mean you have to have to be the best or the
1310 brightest. It means you need are responsible for showing good
1311 judgment and for recognizing solutions that are maintainable and
1312 are not. In a sentence: <emphasis>Keep an eye out for other
1313 qualified developers who show an interest and sustained
1314 involvement with your project and try and shift responsibility
1315 towards them.</emphasis> The following ideas might be good places
1316 to start or good sources of inspiration:
1320 <title>Allow a larger group of people write access to your CVS
1321 repository and make real efforts towards rule by a
1325 <ulink url="http://httpd.apache.org/">Apache</ulink> is an
1326 example of a project that is run by small group of developers
1327 who vote on major technical issues and the admission of new
1328 members and all have write access to the main source
1329 repository. Their process is detailed <ulink
1330 url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
1334 The <ulink url="http://www.debian.org/"> Debian Project</ulink>
1335 is an extreme example of rule by committee. At current count,
1336 more than 700 developers have full responsibility for certain
1337 aspects of the projects. All these developers can upload into
1338 the main FTP servers, and vote on major issues. Direction for
1339 the project is determined by the project <ulink
1340 url="http://www.debian.org/social_contract">social
1341 contract</ulink> and a <ulink
1342 url="http://www.debian.org/devel/constitution">constitution</ulink>. To
1343 facilitate this system, there are special teams (i.e. the
1344 install team, the Japanese language team) and a technical
1345 committee and a project lead. There is a project leader as well
1346 but the leader's main responsibility is to, <quote>Appoint
1347 Delegates or delegate decisions to the Technical
1352 While both of these projects operate on a scale that your
1353 project will not (at least initially), their example is
1354 helpful. Debian's idea of a project who lead who can do
1355 <emphasis>nothing</emphasis> but delegate can serve as a
1356 caricature of how a project can involve and empower a huge
1357 number of developers and grow to a huge size.
1362 <sect4 id="releasemanager">
1363 <title>Publicly appoint someone as the release manager for a
1364 specific release.</title>
1367 A release manager is usually responsible for coordinating
1368 testing, enforcing a code freeze, being responsible for
1369 stability and quality control, packaging up the software, and
1370 placing it in the appropriate places to be downloaded.
1374 This use of the release manager is a good way to give yourself a
1375 break and to shift the responsibility for accepting and
1376 rejecting patches to someone else. It is a good way of very
1377 clearly defining a chunk of work on the project as belonging to
1378 a certain person and its a great way of giving yourself a break.
1382 <sect4 id="delegatebranch">
1383 <title>Delegate control of an entire branch.</title>
1385 If your project chooses to have branches (as described in <xref
1386 linkend="branches">), it might be a good idea to appoint someone
1387 else to be the the head of a branch. If you like focusing your
1388 energy on development releases and the implementation of new
1389 features, had total control over the stable releases to a
1390 well-suited developer.
1394 The author of Linux, Linus Torvalds, came out and crowned Alan
1395 Cox as <quote>the man for stable kernels.</quote> All patches
1396 for stable kernels go to Alan and, if Linus were to be taken
1397 away from work on Linux for any reason, Alan Cox would be more
1398 than suited to fill his role as the acknowledged heir to the
1399 Linux maintainership.
1405 <!-- Section2: patching -->
1407 <sect2 id="patching">
1408 <title>Accepting and Rejecting Patches</title>
1410 This HOWTO has already touched on the fact that as the maintainer
1411 of a free software project, one of primary and most important
1412 responsibilities will be accepting and rejecting patches submitted
1413 to you by other developers.
1417 <title>Technical judgment</title>
1420 In <emphasis>Open Source Development with CVS</emphasis>, Karl
1421 Fogel makes a convincing argument that the most important things
1422 to keep in mind are a firm knowledge of the scope of your program
1423 (that's the <quote>idea</quote> I talked about in <xref
1424 linkend="chooseproject">) and the ability to recognize,
1425 facilitate, and direct <quote>evolution</quote> of a free
1426 software program so that the program can grow and change and
1427 incorporate functionality that was originally unforeseen but avoid
1428 digressions that might expand the scope of the program too much
1429 and result and push the project towards an early death under its
1430 own weight and unwieldiness. These are the criteria that you as a
1431 project maintainer should take into account each time you receive
1436 Fogel elaborates on this again and states the <quote>the
1437 questions to ask yourself when considering whether to implement
1438 (or approve) a change are:</quote>
1445 <para>Will it benefit a significant percentage of the program's
1446 user community?</para>
1450 <para>Does it fit within the program's domain or within a
1451 natural, intuitive extension of that domain?</para>
1458 The answers to these questions are never straightforward and its
1459 very possible (and even likely) that the person who submitted the
1460 patch may feel differently about the answer to those questions
1461 than you do. However, if you feel that that the answer to either
1462 of those questions is <quote>no,</quote> it is your responsibility
1463 to reject the change. If you fail to do this, the project will
1464 become unwieldy and unmaintainable and will ultimately fail.
1469 <title>Rejecting patches</title>
1472 Rejecting patches is probably the most difficult and the most
1473 sensitive job that the maintainer of any free software project
1474 has to face. But sometimes it has to be done. I mentioned earlier
1475 (in <xref linkend="developers"> and in <xref
1476 linkend="delegation">) that any developer needs to try and
1477 balance your responsibility and power to make what you think are
1478 the best technical decisions with the fact that you will lose
1479 support from other developers if you seem like you are on a
1480 power trip or being overly bossy or possessive of a community-based
1481 project. I recommend that you keep three major facts in mind when
1482 rejecting patches (or other changes):
1486 <title>Bring it to the community</title>
1488 One of the best ways of justifying a decision to reject a patch
1489 and working to not seem like you keep an iron grip on your
1490 project is by not making the decision alone at all. It might
1491 make sense to turn over larger proposed changes or more
1492 difficult decisions to a development mailing list where they can
1493 be discussed. There will be some patches (bug fixes, etc.) which
1494 will definitely be accepted and some that you feel are so off
1495 base that they do not even merit further discussion. It is those
1496 that fall into the grey area between these two groups that might
1497 merit a quick forward to a mailing list.
1501 I recommend this process wholeheartedly. As the project
1502 maintainer you are worried about making the best decision for
1503 the project, for the project's users and developers, and for
1504 yourself as a responsible project leader. Turning things over to
1505 an email list will demonstrate your own responsible and
1506 responsive leadership as it tests and serves the interests of
1507 your software's community.
1512 <title>Technical issues is not always good justification</title>
1514 Especially towards the beginning, you will find that many
1515 changes are difficult to implement, introduce new bugs, or have
1516 other technical problems. Try to see past these. Especially with
1517 added functionality, good ideas do not always come from good
1518 coders. Technical merit is a valid reason to postpone the
1519 application of a patch but it is not always a good reason to
1520 reject a change outright. Even small changes are worth the
1521 effort of working with the developer submitting the patch to iron out bugs and
1522 incorporate the change if you thing you think it seems like a
1523 good addition to your project. The effort on your part will work
1524 to make your project a community project and it will pull a new
1525 or less experienced developer onto your project and even teach
1526 them something that might help them in their next patch.
1531 <title>Common courtesy</title>
1533 It should go without saying but, <emphasis>above all and in all
1534 cases, just be nice.</emphasis> If someone has an idea and cares
1535 about it enough to write some code and submit a patch, they
1536 care, they are motivated, and they are already involved. Your
1537 goal as the maintainer is make sure they submit again. They may
1538 have thrown you a dud this time but next time may be the idea or
1539 feature that revolutionizes your project.
1543 It is your responsibility to first justify your action to not
1544 incorporate their change clearly and concisely. Then thank
1545 them. Let them know that you a appreciate their help and feel
1546 horrible that you can't incorporate their change. Let them know
1547 that you look forward to their staying involved and you hope
1548 that the next patch or idea meshes better with your project
1549 because you appreciate their work and want to see it in the
1550 project. If you have ever had a patch rejected that put a large
1551 deal of time, thought, and energy into, you remember how it
1552 feels and it feels bad. Keep this in mind when you have to let
1553 someone down. It's never easy but you need to do everything you
1554 have to make it as not-unpleasant as possible.
1560 <!-- Section2: branches -->
1562 <sect2 id="branches">
1563 <title>Stable and Development Branches</title>
1566 The idea of stable and development branches has already been
1567 described briefly in <xref linkend="chooseversioning"> and in
1568 <xref linkend="delegatebranch">. These alludes attest to the fact
1569 to some of the ways that multiple branches can affect your
1570 software. Branches can let you avoid (to some extent) some of the
1571 problems around rejecting patches (as described in <xref
1572 linkend="patching">) by allowing you to temporarily compromise the
1573 stability of your project without affected those users who need
1578 The most common way of branching your project is to have one
1579 branch that is stable and one that is development. This is the
1580 model followed by the Linux kernel that is described in <xref
1581 linkend="chooseversioning">. In this model, there is always one
1582 branch that is stable and always one that is in
1583 development. Before any new release, the development branch goes
1584 into a <quote>feature freeze</quote> where major changes and added
1585 features are rejected or put on hold under the development kernel
1586 is released as the new stable branch and major development begins
1587 again on the development branch. Bug fixes and small changes that
1588 are unlikely to have any large negative repercussions are
1589 incorporated into the stable branch also to the development
1594 Linux's model is an extreme one. On many projects, there is no
1595 need to have two versions always available. It may make sense to
1596 have two versions only near a release. The Debian project has
1597 historically made both a stable and an unstable distribution
1598 available but has expanded to this to include: stable, unstable,
1599 testing, experimental, and (around release time) a frozen
1600 distribution that only incorporates bug fixes during the
1601 transition from unstable to stable. There are few projects whose
1602 size would necessitate a system like Debian but their use of
1603 branches helps demonstrate how they can be used to balance
1604 consistent and effective development with the need to make regular
1605 and usable releases.
1609 In trying to set up a development tree for yourself, there are
1610 several things that might be useful to keep in mind:
1617 <term>Minimize the number of branches</term>
1620 Debian may be able to make good use of four or five branches
1621 but it contains gigabytes of software in over 5000 packages
1622 compiled for a 5-6 different architectures. Two is a good
1623 number. Too many branches will confuse your users (I can't
1624 count how many times I had to describe Debian's system when it
1625 only had 2 and sometimes 3 branches!), potential developers
1626 and even yourself. Branches can help but they come at a cost
1627 so use them very sparingly.
1633 <term>Make sure that all your different branches are explained</term>
1636 As I mentioned in the preceding paragraph, different branches
1637 <emphasis>will</emphasis> confuse your users. Do everything
1638 you can to avoid this by clearly explaining the different
1639 branches in a prominent page on your website and in a Readme
1640 file in the <acronym>FTP</acronym> or <acronym>HTTP</acronym>
1645 I might also recommend against a mistake that I think Debian
1646 has made. The terms <quote>unstable,</quote>
1647 <quote>testing,</quote> and <quote>experimental</quote> are
1648 vague and difficult to rank in order of stability (or
1649 instability as the case may be). Try explaining to someone
1650 that <quote>stable</quote> actually means <quote>ultra
1651 stable</quote> and that <quote>unstable</quote> doesn't
1652 actually include any unstable software but is really stable
1653 software that is untested as a distribution.
1657 If you are going to do branches, especially early on, keep in
1658 mind that people are conditioned to understand the terms
1659 <quote>stable</quote> and <quote>development</quote> and you
1660 probably can't go wrong with this simple and common division of
1667 <term>Make sure all your branches are always available</term>
1670 Like a lot of document, this should probably should go without
1671 saying but experience has taught me that it's not always
1672 obvious to people. It's a good idea to physically split up
1673 different branches in different directories or directory trees
1674 on your <acronym>FTP</acronym> or <acronym>HTTP</acronym>
1675 site. Linux accomplishes this by having all the v2.2 and a
1676 v2.3 subdirectory where it is immediately obvious (after you
1677 know their version numbering scheme) which directory is the
1678 most recent stable and the current development
1679 releases. Debian accomplishes this by naming all their
1680 distribution by name and then changing symlinks named
1681 <quote>stable,</quote> <quote>unstable</quote> and
1682 <quote>frozen</quote> to point to which ever distribution (by
1683 name) is in whatever stage. Both methods work and their are
1684 others. In any case, it is important that different branches
1685 are always available, are accessible from consistent
1686 locations, and that different branches are clearly
1687 distinguished from each other so your users know exactly what
1688 they want to be downloading and where to get it.
1698 <!-- Section2: otherdev -->
1700 <sect2 id="otherdev">
1701 <title>Other Development issues</title>
1703 There are more issues around surrounding interaction with
1704 developers in a free software project that I can touch on in great
1705 detail in a HOWTO of this size. Please don't hesitate to contact
1706 me if you see any major omissions. Other smaller issues that are
1707 worth mentioning are:
1711 <title>Freezing</title>
1713 For those projects that choose to adopt a split development model
1714 (<xref linkend="branches">), freezing is a concept that is worth
1715 becoming familiar with.
1719 Freeze come in two major forms. A <quote>feature freeze</quote>
1720 is a period when no significant functionality is added to a
1721 program. It is a period where established functionality (even
1722 skeletons of barely working functionality) can be improved and
1723 perfected. It is a period where bugs are fixed. This type of
1724 freeze is usually applied some period (a month or two) before a
1725 release. It is easy to push a release back as you wait for
1726 <quote>one more feature</quote> and a freeze helps to avoid this
1727 situation by drawing the much needed line in the sand. It gives
1728 developers room they need to get a program ready for release.
1732 The second type of freeze is a <quote>code freeze</quote> which
1733 is much more like a released piece of software. Once a piece of
1734 software has entered a code freeze, all changes to the code are
1735 frowned upon and only changes that fix known bugs are
1736 permitted. This type of freeze usually follows a <quote>feature
1737 freeze</quote> and directly precedes a release. Most released
1738 software is in what could be interpreted as a sort of high
1739 level<quote>code freeze.</quote>
1743 Even you do not choose to appoint a release manager (<xref
1744 linkend="releasemanager">), you will have an easier time
1745 justifying the rejection or postponement of patches (<xref
1746 linkend="patching"> before a release with a publicly stated
1752 <title>Forking</title>
1754 Forks are the most extreme interpretation of a branch. A fork is
1755 when a group of developers takes code from a free software
1756 project and actually starts a brand new free software
1757 project. The most famous example of a fork is Emacs and
1758 XEmacs. Both emacsen are based on an almost identical code-base
1759 but for technical, political, and philosophical reasons,
1760 development was split into two projects which now compete with
1765 The short version of the fork section is, <emphasis>don't do
1766 them.</emphasis> Forks force developers to choose one project to
1767 work with, cause nasty political divisions, redundancy of work.
1768 Luckily, usually the threat of the fork is enough to scare the
1769 maintainer or maintainers of a project into changing the way they
1770 run their project to avoid it.
1774 In his chapter on <quote>The Open Source Process,</quote> Karl
1775 Fogel describes how to do a fork if you absolutely must. If you
1776 have determined that is absolutely necessary and that the
1777 differences between you and the people threatening to fork are
1778 absolutely unresolvable, I recommend Fogel's book as a good place
1785 <!-- Section1: users -->
1788 <title>Maintaining a Project: Interacting with Users</title>
1790 <primary>fswd!users</primary>
1794 If you've worked your way up to here, congratulations, you are
1795 nearing the end of this document. This final section describes some
1796 of the situations in which you, in your capacity as project
1797 maintainer, will be interacting with users and gives some
1798 suggestions on how these situations might be handled effectively.
1802 Interacting with users is difficult. In our discussion of
1803 interaction with developers, the underlying assumption is that in a
1804 free software project, a project maintainer must constantly strive to
1805 attract and keep developers who can easily leave at any time.
1809 Users in the free software community are different than users in
1810 the world of proprietary software and they should be treated
1811 differently. Some ways in which the groups differ significantly
1819 <para>The lines between users and developers are blurred in ways
1820 that is totally foreign to any proprietary development
1821 model. Your users are often your developers and vice
1826 <para>In the free software world, you are often your users only
1827 choice. Because there is such an emphasis on not replicating the
1828 work of others in the free software community and because the
1829 element of competition present in the propriety software model is
1830 absent (or at least in an extremely different form) in the free
1831 software development model your users will probably be the only
1832 project that does what you do (or at least the only one that does
1833 what you do in the way that you do it). This means your
1834 responsiveness to your users is even more important in that in
1835 the proprietary world.</para>
1839 <para>In an almost paradoxical situation, free software projects
1840 have less immediate or dire consequences for ignoring their
1841 users--it is often easier to do. Because you don't usually need
1842 to compete with another product in the free software model,
1843 chances are good that you will not be scrambling to gain the
1844 features of the competitor's newest program. This means that your
1845 development process will have to be directed either internally,
1846 by your users or both.</para>
1852 Trying to tackle this unique situation can only be done
1853 indirectly. Developers and maintainers need to listen to users and
1854 to try and be as responsive as possible. A solid knowledge of the
1855 situation recounted above is any free software developers best tool
1856 for shifting his development or leadership style to fit the unique
1857 process of free software development. This chapters will try and
1858 introduce some of the more difficult or important points in any
1859 projects interactions with users and give some hints on how to
1863 <!-- Section2: testing -->
1865 <sect2 id="testing">
1866 <title>Testing and Testers</title>
1869 In addition to your users being your developers, they are also
1870 (and perhaps more commonly) your testers. Before I get flamed, I
1871 should rephrase my sentence: <emphasis>some</emphasis> users are
1876 It is important that this distinction be made early on because not
1877 all of your users wants to be testers. Many users want to use
1878 stable software and don't care if they don't have the newest
1879 greatest software with the latest and greatest features. These
1880 users except a stable, tested piece of software with major or
1881 obvious bugs worked out or openly declared and will be angry if
1882 they find themselves in a testing position. This is yet another
1883 way in which a split development model (as mentioned in <xref
1884 linkend="branches">) might come in handy.
1888 <title>Automated testing</title>
1890 For many programs, many common and mistakes can be caught by
1891 automated means. Automated tests tend to be pretty good at
1892 catching errors that you've run into several times before or
1893 something you just forget and not very good at finding errors,
1894 even major ones, that were totally unforeseen.
1898 CVS comes with a bourne shell script called sanity.sh that is
1899 worth looking at. Debian uses a program called lintian that
1900 checks Debian packages for all of the most common errors. While
1901 using these scripts may not be possible, there is a host of other
1902 sanity checking software on the net that may be applicable (feel
1903 free to email any recommendations). None of these will create a
1904 bug-free release but they will avoid at least some major
1905 oversights. Finally, if your programs become a long term
1906 endeavor, you will find that there are certain errors that you
1907 tend to make over and over. Start a collection of scripts that
1908 check for these errors to help prevent them in the future.
1913 <title>Testing by testers</title>
1915 For any program that depends on user interactivity, many bugs
1916 will only be uncovered through testing by users actually clicking
1917 the keys and pressing the mouse buttons. For this you need
1918 testers and as many testers as possible.
1922 The most difficult part of testing is finding testers. It's
1923 usually a good tactic to post a message to a relevant mailing
1924 list or news group announcing a specific proposed release date
1925 and outline the functionality of the program. If you put some
1926 time into the announcement, you are sure to get a few bites.
1930 The second most difficult part of testing is keeping your testers
1931 and keeping them actively involved in the testing
1932 process. Fortunately, there are some tried and true tactics that
1933 can applied towards this end:
1940 <para><emphasis>Make things simple for your testers.</emphasis>
1941 Your testers are doing you a favor so make it as easy as
1942 possible. This means that you should be careful to package your
1943 software in a way that is easy to find, unpack, install, and
1944 uninstall. This also means you should explain what you are
1945 looking for to each tester and make the means for reporting
1946 bugs simple and well established. The key is to provide as much
1947 structure as possible to make your tester's job easy and
1948 maintain as much flexibility as possible for those that want to
1949 do things a little differently.</para>
1953 <para><emphasis>Be responsive to your testers.</emphasis> When
1954 your testers submit bugs, respond to them and respond
1955 quickly. Even if you are only responding to tell them that the
1956 bug has already been fixed, quick and consistent response make
1957 them feel like their work is heard, important, and
1962 <para><emphasis>Thank your testers.</emphasis> Thank them
1963 personally each time they send you patch. Thank them publicly
1964 in the documentation and the about section of your program. You
1965 appreciate your testers and your program would not be possible
1966 without their help. Make sure they know and pat them on the
1967 back by making sure the rest of the world knows it too. It will
1968 be appreciated more than you expected.</para>
1976 <!-- Section2: support -->
1978 <sect2 id="support">
1979 <title>Setting up a Support Infrastructure</title>
1982 While testing is important, the large part of your interactions
1983 and responsibility to your users falls under the category of
1984 support. The best way to make sure your users are adequately
1985 supported in using your program is to set up a good infrastructure
1986 for this purpose so that your developers and users help each other
1987 and less of the burden falls on you while people get quicker and
1988 better responses to their questions. This infrastructure comes in
1993 <title>Documentation</title>
1995 It should not come as any surprise that the key element to any
1996 support infrastructure is good documentation. This topic was
1997 large covered in <xref linkend="documentation"> and will not be
2003 <title>Mailing lists</title>
2005 Aside from documentation, effective mailing lists will be your
2006 greatest tool in supporting user support. Running a mailing list
2007 well is more complicated than installing mailing list software
2012 <title>Separate lists</title>
2015 A good idea is too separate your user and development mailing
2016 lists (perhaps into project-user@host and project-devel@host)
2017 and enforce the division. If people post a development question
2018 onto -user, politely ask them to repost it onto -devel and vise
2019 versa. Subscribe yourself to both groups and encourage primarily
2020 developers to do the same.
2024 This system provides so that no one person is stuck doing all of
2025 the support work and works so that users learn more about the
2026 program, they can help new users with their questions.
2031 <title>Choose mailing list software well</title>
2033 Please don't make the selection of mailing list software
2034 lightly. Please consider easy accessibility by users without a
2035 lot of technical experience so you want to be as easy as
2036 possible. Web accessibility to an archive of the list is also
2041 The two biggest free software mailing list programs are <ulink
2042 url="http://www.greatcircle.com/majordomo/">majordomo</ulink>
2043 and <ulink url="http://www.list.org/">GNU Mailman</ulink>. A
2044 long time advocate of majordomo, I would now recommend any
2045 project choose GNU Mailman. It fulfills the criteria listed above
2046 and makes it easier to do. It provides a good mailing list
2047 program for a free software project maintainer as opposed to a
2048 good mailing list application for a mailing list administrator.
2052 There are other things you want to take in setting up your
2053 list. If it is possible to gate your mailing lists to USENET and
2054 provide them in digest form as well as making them accessible on
2055 the web, you will please some users and work to make the support
2056 infrastructure slightly more accessible.
2062 <title>Other support ideas</title>
2065 A mailing list and accessible documentation all you can do to set
2066 up good user support infrastructure. Be creative. If you stumble
2067 across something works well, email me and I'll include it here in
2071 <title>Make your self accessible</title>
2073 You can not put to few methods to access you. If you hang out in
2074 an <acronym>IRC</acronym> channel, don't hesitate to list in
2075 your projects documentation. List email and snail mail
2076 addresses, or ways to reach you via <acronym>ICQ</acronym>,
2077 <acronym>AIM</acronym>, or Jabber.
2082 <title>Bug management software</title>
2084 For many large software projects, use of bug management software
2085 is essential to keep track of which bugs have been fixed, which
2086 bugs have not been fixed, and which bugs are being fixed by
2087 which people. Debian uses the <ulink
2088 url="http://bugs.debian.org">Debian Bug Tracking System</ulink>
2089 (<acronym>BTS</acronym>) although it may not be best choice for
2090 every project (it seems to currently be buckling under its own
2091 weight. As well as a damn good web browser, the mozilla project
2092 has spawned a sub-project resulting in a bug tracking system
2094 url="http://www.mozilla.org/projects/bugzilla/">bugzilla</ulink>.
2098 These systems (and others like them) can be unwieldy so
2099 developers should be careful to not spend more time on the bug
2100 tracking system than on the bugs or the projects themselves. If
2101 a project continues to grow, use of a bug tracking system can
2102 provide an easy standard way for users and testers to report
2103 bugs and for developers and maintainers to fix them in an
2110 <!-- Section2: releasing -->
2112 <sect2 id="releasing">
2113 <title>Releasing Your Program</title>
2116 As mentioned earlier in the HOWTO, the first rule or releasing is,
2117 <emphasis>release something useful.</emphasis> Non-working or
2118 not-useful software will not attract anyone to your
2119 project. People will be turned off of your project and be likely
2120 to simply gloss over it next time they see a new version
2121 announced. Half-working software, if useful, will intrigue people,
2122 whet their appetites for the version to come, and encourage them
2123 to join the development process.
2127 <title>When to release</title>
2130 Making the decision to release your software for the first time
2131 is an incredibly important and incredibly stressful decision. But
2132 it needs to be done. My advice is to try and make something that
2133 is complete enough to be usable and incomplete enough to allow
2134 for flexibility and imagination by your future developers. It's
2135 not an easy decision. Ask for help on a local Linux User Group
2136 mailing list or from a group of developer friends.
2140 One tactic is to first do an <quote>alpha</quote> or
2141 <quote>beta</quote> release as described below in <xref
2142 linkend="alphabeta">. However, most of the guidelines described
2147 <emphasis>When you feel in your gut it is time and you feel
2148 you've weighed the situation well several times, cross your
2149 fingers and take the plunge.</emphasis>
2154 <title>How to release</title>
2157 If you've followed the guidelines described in this HOWTO up
2158 until this point, the mechanics of doing a release are going to
2159 be the easy part of releasing. If you have set up a consistent
2160 distribution locations and the other infrastructure described in
2161 the preceding sections, releasing should be as simple as
2162 building the package, checking it once over, and uploading it
2163 into the appropriate place and then reflecting the release on
2168 <sect3 id="alphabeta">
2169 <title>Alpha, beta, and development releases</title>
2172 When contemplating releases, it worth considering the fact that
2173 not every release needs to be a full numbered release. Software
2174 users are accustomed to pre-releases but you must be careful to
2175 label these releases accurately or they cause more problems then
2183 <term>alpha releases</term>
2186 Alpha releases are expected to be unstable, perhaps a little
2187 unsafe, but definitely usable. Alpha versions should have
2188 full functionality and limited testing. They can have known
2189 bugs and kinks that have yet to be worked out. Before sure to
2190 keep in mind that <emphasis>alpha releases are still
2191 releases</emphasis> and people are not going to be expecting
2192 a nightly build from the CVS source. An alpha should work and
2193 have minimal testing and bug fixing already finished.
2199 <term>beta releases</term>
2202 Beta releases are general expected to be usable and
2203 slightly unstable, although definitely
2204 <emphasis>not</emphasis> unsafe. Beta releases usually
2205 preclude a full release by under a month. They can contain
2206 small known bugs but no major ones. All major functionality
2207 should be fully implemented although the exact mechanics can
2208 still be worked out. Beta releases are great tool to whet the
2209 appetites of potential users by giving them a very
2210 realistic view of where your project is going in the very
2211 near future and can help keep interest by giving people
2212 <emphasis>something.</emphasis>
2218 <term>development releases</term>
2221 Development release is much more vague term than
2222 <quote>alpha</quote> or <quote>beta</quote>. I usually choose
2223 to reserve the term for discussion of a development
2224 branch. There are other ways to use the term. So many in
2225 fact, that I feel the term has been cheapened. The popular
2226 window manager <ulink
2227 url="http://www.enlightenment.org">Enlightenment</ulink> has
2228 released <emphasis>nothing but</emphasis> development
2229 releases. Most often, the term is used to describe releases
2230 that are not even to alpha or beta stages though and if I
2231 were to release a pre-alpha release in order to keep interest
2232 in my project live, this is probably how I would have to label
2244 <!-- Section2: announcing -->
2246 <sect2 id="announcing">
2247 <title>Announcing Your Project</title>
2250 Well, you've done it. You've (at least for the purposes of this
2251 HOWTO) designed, built, and released your free software
2252 project. All that is left is for you to tell the world so they
2253 know to come and try it out and hopefully jump on board with
2254 development. If everything is in order as described above, this
2255 will be a quick and painless process. A quick announcement is all
2256 that it takes to put yourself on the free software communities
2261 <title>Mailing lists and USENET</title>
2263 Email is still the way that most people on the Internet get their
2264 information. Its a good idea to send a message announcing your
2265 program to any relevant mailing list you know of and any relevant
2266 USENET discussion group. Karl Fogel recommends that use you
2267 simple subject describing the fact that the message is an
2268 announcement, the name of the program, the version, and a
2269 half-line long description of its functionality. This way, any
2270 interested user or developer will be immediately attracted to
2271 your announcement. Fogel's example looks like:
2274 <screen>Subject: ANN: aub 1.0, a program to assemble USENET binaries</screen>
2277 The rest of the email should describe the programs functionality
2278 quickly and concisely in no more than two paragraphs and should
2279 provide links to the projects webpage and direct links to
2280 downloads for those that want it right away.
2284 You should repeat this announcement process consistently in the
2285 same locations for each subsequent release.
2290 <title>freshmeat.net</title>
2292 Mentioned earlier in <xref linkend="evalwhere">, in today's free
2293 software community, announcements of your project on freshmeat
2294 are almost more important than announcements on mailing list
2299 Visit the <ulink url="http://freshmeat.net">freshmeat
2300 website</ulink> or their <ulink
2301 url="http://freshmeat.net/add-project/">submit project
2302 page</ulink> to post your project on their site and in their
2303 database. In addition to a large website, freshmeat provides a
2304 daily newsletter that highlights all the days releases and
2305 reaches a huge audience (I skim it every night for any
2306 interesting new releases).
2310 Once you've finished this...
2314 Congratulations. You've now the maintainer of an active free
2315 software project. Good luck and feel free to stay in touch with
2316 me about your experiences. I'd love to incorporate them into this
2325 <!-- Keep this comment at the end of the file
2330 sgml-namecase-general:t
2331 sgml-general-insert-case:lower
2332 sgml-minimize-attributes:nil
2333 sgml-always-quote-attributes:t
2335 sgml-indent-data:nil
2336 sgml-parent-document:nil
2337 sgml-exposed-tags:nil
2338 sgml-local-catalogs:nil
2339 sgml-local-ecat-files:nil