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>
22 <revnumber>v0.2.1</revnumber>
23 <date>10 April 2001</date>
24 <authorinitials>bch</authorinitials>
30 <revnumber>v0.2</revnumber>
31 <date>8 April 2001</date>
32 <authorinitials>bch</authorinitials>
36 <revnumber>v0.01</revnumber>
37 <date>27 March 2001</date>
38 <authorinitials>bch</authorinitials>
39 <revremark>Initial Release</revremark>
45 <primary>fswd</primary>
49 This HOWTO is designed for people with experience in programming
50 and some skills in managing a software project but who are new to
51 the world of free software. This document is meant to act as a
52 guide to the non-technical aspects of free software development
53 and was written to be a crash course in the people skills that
54 aren't taught to commercial coders but that can make or break a
55 free software project.
61 <!-- Section1: intro -->
64 <title>Introduction</title>
67 <primary>fswd!introduction</primary>
71 Skimming through freshmeat.net provides mountains of reasons for this
72 HOWTO's existence--the Internet is littered with excellently
73 written and useful programs that have faded away into the universe
74 of free software forgottenness. This dismal scene made me ask
79 This HOWTO tries to do a lot of thing (probably too many), but it
80 can't answer that question and won't attempt it. What this HOWTO
81 will attempt to do is give your Free Software project a fighting
82 chance--an edge. If you write a piece of crap that no one is
83 interested in, you can read this HOWTO until you can recite it in
84 your sleep and your project will probably fail. Then again, you can
85 write a beautiful, relevant piece of software and follow every
86 instruction in this HOWTO and your software may still not make
87 it. Sometimes life is like that. However, I'll go out a limb and
88 say that if you write a great, relevant pieces of software and
89 ignore the advise in this HOWTO, you'll probably fail <emphasis>
90 more often</emphasis>.
94 A lot of the information in this HOWTO is best called common
95 sense. Of course, as any debate on interfaces will prove, what is
96 common sense to some programmers proves totally unintuitive to
97 others. After explaining bits and pieces of this HOWTO to Free
98 Software developers on several occasions, I realized that writing
99 this HOWTO might provide a useful resource and a forum for
100 programmers to share ideas about what has and has not worked for
105 As anyone involved in any of what seems like an unending parade of
106 ridiculous intellectual property clashes will attest to, a little
107 bit of legalese proves important.
110 <!-- Section2: copyright -->
112 <sect2 id="copyright">
113 <title>Copyright Information</title>
116 This document is copyrighted (c) 2000 Benjamin (Mako) Hill and is
117 distributed under the terms of the Linux Documentation Project
118 (LDP) license, stated below.
122 Unless otherwise stated, Linux HOWTO documents are copyrighted by
123 their respective authors. Linux HOWTO documents may be reproduced
124 and distributed in whole or in part, in any medium physical or
125 electronic, as long as this copyright notice is retained on all
126 copies. Commercial redistribution is allowed and encouraged;
127 however, the author would like to be notified of any such
132 All translations, derivative works, or aggregate works
133 incorporating any Linux HOWTO documents must be covered under this
134 copyright notice. That is, you may not produce a derivative work
135 from a HOWTO and impose additional restrictions on its
136 distribution. Exceptions to these rules may be granted under
137 certain conditions; please contact the Linux HOWTO coordinator at
138 the address given below.
142 In short, we wish to promote dissemination of this information
143 through as many channels as possible. However, we do wish to
144 retain copyright on the HOWTO documents, and would like to be
145 notified of any plans to redistribute the HOWTOs.
149 If you have any questions, please contact
150 <email>linux-howto@metalab.unc.edu</email>
154 <!-- Section2: disclaimer -->
156 <sect2 id="disclaimer">
157 <title>Disclaimer</title>
160 No liability for the contents of this documents can be accepted.
161 Use the concepts, examples and other content at your own risk. As
162 this is a new edition of this document, there may be errors and
163 inaccuracies, that may of course be damaging to your system.
164 Proceed with caution, and although this is highly unlikely, the
165 author(s) do not take any responsibility for that.
169 All copyrights are held by their by their respective owners, unless
170 specifically noted otherwise. Use of a term in this document
171 should not be regarded as affecting the validity of any trademark
176 Naming of particular products or brands should not be seen
181 You are strongly recommended to take a backup of your system
182 before major installation and backups at regular intervals.
186 <!-- Section2: newversions-->
188 <sect2 id="newversions">
189 <title>New Versions</title>
192 <primary>fswd!news on</primary>
196 This is the second pre-release of this HOWTO. It is written to be
197 released to developers for critique and brainstorming and
198 submitted to Hampshire College for academic credit. Please keep in
199 mind that this version of the HOWTO is still in an infant stage
200 and will be revised extensively before it gets publicized widely.
204 The latest version number of this document should always be listed
205 on <ulink url="http://people.debian.org/~mako/projects/howto">the projects
206 homepage </ulink> hosted by Debian.
210 The newest version of this HOWTO will always be made available at
211 the same website, in a variety of formats:
219 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO/t1.html">HTML</ulink>.
226 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.html">HTML (single page)</ulink>.
232 <ulink URL="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.txt">plain text</ulink>.
238 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.ps.gz">Compressed postscript</ulink>.
244 <ulink url="http://people.debian.org/~mako/projects/howto/FreeSoftwareDevelopment-HOWTO.sgml.gz">Compressed SGML source</ulink>.
251 <!-- Section2: credits -->
254 <title>Credits</title>
257 In this version I have the pleasure of acknowledging:
261 Josh Crawford, Andy King, and Jaime Davila who all read through
262 this beast and gave me feedback that has helped me make changes
263 and improvements to this document. I can't thank you guys enough
268 <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
269 Source Development with CVS</emphasis> published by the Coriolis
270 Open Press. Large parts of his book are available <ulink
271 url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
272 the book are available under the GPL and constitute the best
273 tutorial on CVS I've ever seen. The rest of the book covers, "the
274 challenges and philosophical issues inherent in running an Open
275 Source project using CVS." The book does a good job of covering
276 some of the subjects brought up in this HOWTO and much
277 more. <ulink url="http://cvsbook.red-bean.com">The book's
278 website</ulink> has information on ordering the book and provides
279 several translations of the chapters on CVS. If you are seriously
280 interested in running a Free Software project, you want this
281 book. I tried to mention Fogel in sections of this HOWTO where I
282 knew I was borrowing directly from his ideas. If I missed any, I'm
283 sorry. I'll try and have those fixed in future versions.
287 Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
292 Also providing support material, and inspiration for this HOWTO is
293 Eric S. Raymond for his prolific, consistent, and carefully
294 crafted arguments and Lawrence Lessig for reminding me of the
295 importance of Free Software. Additionaly, I want to thank every
296 user and developer involved with the <ulink
297 url="http://www.debian.org">Debian Project</ulink>. The project
298 has provided me with a home, a place to practice free software
299 advocacy, a place to make a difference, a place to learn from
300 those how have been involved with the movement much longer than I,
301 and proof of a free software project that definitely, definitely
306 Above all, I want to thank <emphasis>Richard Stallman</emphasis>
307 for his work at the Free Software Foundation and for never giving
308 up. Stallman provides and articulates the philosophical basis that
309 attracts me to free software and that drives me towards writing a
310 document to make sure it succeeds. RMS can always be emailed at
311 <email>rms (at) gnu (dot) org</email>.
316 <!-- Section2: feedback -->
318 <sect2 id="feedback">
319 <title>Feedback</title>
322 Feedback is always and most certainly welcome for this
323 document. Without your submissions and input, this document
324 wouldn't exist. Do you feel that something is missing? Don't
325 hesitate to contact me to have me write a chapter, section, or
326 subsection or to write one yourself. I want this document to be a
327 product of the Free Software development process that it heralds
328 and I believe that its ultimate success will be rooted in its
329 ability to do this. Please send your additions, comments, and
330 criticisms to the following email address:
331 <email>mako@debian.org</email>.
335 <!-- Section2: translations -->
337 <sect2 id="translations">
338 <title>Translations</title>
341 I know that not everyone speaks English. Translations are nice and
342 I'd love for this HOWTO to gain the kind of international reach
343 afforded by translated versions.
347 However, this HOWTO is still young and I have to yet to be
348 contacted about a translation so English is all that is currently
349 available. If you would like to help with or do a translation, you
350 will gain my utmost respect and admiration and you'll get to be
351 part of a cool process. If you are at all interested, please don't
352 hesitate to contact me at: <email>mako@debian.org</email>.
357 <!-- Section1: intro: END -->
359 <!-- Section1: starting -->
361 <sect1 id="starting">
362 <title>Starting a Project</title>
365 <primary>fswd!starting</primary>
368 With very little argument, the beginning is the most difficult part
369 of successful free software development. Laying a firm foundation
370 will determine whether your project flourishes or withers away and
371 dies. It is also the subject that is of most immediate interest to
372 anyone reading this document as a tutorial.
376 Starting a project involves a dilemma that you as a developer must
377 try and deal with: no potential user for your program is interested
378 in a program that doesn't work while the development process that
379 you want to employ holds involvement of users as imperative.
383 It is in these dangerous initial moments that anyone working to
384 start a free software project must try and strike a balance along
385 these lines. One of the most important ways that someone trying to
386 start a project can work towards this balance is by establishing a
387 solid framework for the development process through some of the
388 suggestions mentioned in this section.
392 <!-- Section2: chooseproject-->
394 <sect2 id="chooseproject">
395 <title>Choosing a Project</title>
398 If you are reading this document, there's a good chance you
399 already have an idea for a project in mind. Chances are also
400 pretty good that it fills a percieved gap by doing something that
401 no other free software project does or by doing something in a way
402 that is unique enough to necessitate a brand new piece of
406 <sect3 id=identifyidea>
407 <title>Identify and articulate your idea</title>
409 Eric S. Raymond writes about how free software projects start in
411 url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/"><quote>The
412 Cathedral and the Bazaar,</quote></ulink> which comes as required
413 reading for any free software developer. It is available online .
417 In <quote>The Cathedral and the Bazaar,</quote> Raymond tells us
418 that: <quote>every good work of software starts by scratching
419 a developers itch.</quote> Raymond's now widely accepted
420 hypothesis is that new free software programs are written, first
421 and foremost, to solve a specific problem facing the developer.
425 If you have an idea for a program in mind, chances are good that
426 it targets a specific problem or <quote>itch</quote> you want to
427 see scratched. <emphasis>This idea is the project.</emphasis>
428 Articulate it clearly. Write it out. Describe the problem you
429 will attack in detail. The success of your project in tackling a
430 particular problem will be tied to your ability to identify that
431 problem clearly early on. Find out exactly what it is that you
432 want your project to do.
436 Monty Manley articulates the importance of this initial step in
437 an essay, <quote><ulink
438 url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
439 Projects the Open Source Way.</ulink></quote> As the next section
440 will show, there is <emphasis>a lot</emphasis> of work that needs
441 to be done before software is even ready to be coded. Manley
442 says, <quote>Beginning an OSS project properly means that a
443 developer must, first and foremost, avoid writing code too
448 <sect3 id=evalulateidea>
449 <title>Evaluate your idea</title>
452 In evaluating your idea, you need to first ask yourself a few
453 questions. This should happen before you move any further
454 through this HOWTO. Ask yourself: <emphasis>Is the free software
455 development model really is the right one for your
460 Obviously, since the program scratches your itch, you are
461 definitely interested in seeing it implemented in code. But,
462 because one hacker coding in solitude fails to qualify as a free
463 software development effort, you need to ask yourself a second
464 question: <emphasis>Is anybody else interested?</emphasis>
468 Sometimes the answer is a simple <quote>no.</quote> If you want
469 to write a set of scripts to sort <emphasis>your</emphasis>
470 <acronym>MP3</acronym> collection on <emphasis>your</emphasis>
471 machine, <emphasis>maybe</emphasis> the free software development
472 model is not the best one to choose. However, if you want to
473 write a set of scripts to sort <emphasis>anyone's</emphasis>
474 <acronym>MP3</acronym>s, a free software project might fill a
479 Luckily, The Internet is a place so big and so diverse that,
480 chances are, there is someone, somewhere, who shares your
481 interests and how feels the same <quote>itch.</quote> It is the
482 fact that there are so many people with so many similar needs and
483 desires that introduces the third major question: <emphasis>Has
484 somebody already had your idea or a reasonably similar
489 <title>Finding Similar Projects</title>
492 There are places you can go on the web to try and answer the
493 question above. If you have experience with the free software
494 community, you are probably already familiar with many of these
495 sites. All of the resources listed bellow offer searching of
502 <term>freshmeat.net</term>
504 <para><ulink url="http://freshmeat.net">freshmeat.net</ulink>
505 describes itself as, <quote>the Web's largest index of Linux
506 and Open Source software</quote> and its reputation along
507 these lines is totally unparalleled and unquestioned. If you
508 can't find it on freshmeat, its doubtful that you (or anyone
509 else) will find it at all.</para>
514 <term>Slashdot</term>
516 <para><ulink url="http://slashdot.org">Slashdot</ulink>
517 provides <quote>News for Nerds: Stuff that Matters,</quote>
518 which usually includes discussion of free software, open
519 source, technology, and geek culture new and events. It is
520 not unusual for an particularly sexy development effort to be
521 announced here so it definitely worth checking.</para>
526 <term>SourceForge</term>
528 <para><ulink url="http://sourceforge.net">SourceForge</ulink>
529 houses and facilitates a growing number of open source and
530 free software projects. It is also quickly becoming a nexus
531 and an necessary stop for free software
532 developers. SourceForge's <ulink
533 url="http://sourceforge.net/softwaremap/trove_list.php">software
534 map</ulink> and <ulink url="http://sourceforge.net/new/"> new
535 release</ulink> pages should be necessary stops before
536 embarking on a new free software project. SourceForge also
538 url="http://sourceforge.net/snippet/">Code Snippet
539 Library</ulink> which contains useful reusable chunks of code
540 in an array of languages which can come in useful in any
546 <term>Google and Google's Linux Search</term>
548 <para><ulink url="http://www.google.com">Google</ulink> and
549 <ulink url="http://www.google.com/linux"> Google's Linux
550 Search</ulink>, provide powerful web searches that may reveal
551 people working on similar projects. It is not a catalog of
552 software or news like freshmeat or Slashdot, but it is worth
553 checking to make sure you aren't pouring your effort into a
554 redundant project.</para>
563 <title>Deciding to Proceed</title>
565 Once you have successfully charted the terrain and have an idea
566 about what kinds of similar free software projects exist, every
567 developer needs to decide whether to proceed with their own
568 project. It is rare that a new project seeks to accomplish a
569 goal that is not at all similar or related to the goal of
570 another project. Anyone starting a new project needs to ask
571 themselves: <quote>Will the new project be duplicating work done
572 by another project? Will the new project be competing for
573 developers with an existing project? Can the goals of the new
574 project be accomplished by adding functionality to an existing
579 If the answer to any of these questions is <quote>yes,</quote>
580 try to contact the developer of the existing project(s) in
581 question and see if he or she might be willing to collaborate
586 For many developers this may be the single most difficult aspect
587 of free software development but it is an essential one. It is
588 easy to become fired up by an idea and be caught up in the
589 momentum and excitement of a new project. It is often extremely
590 difficult to do but, it is important that any free software
591 developer remember that the best interests of the free software
592 community and the quickest way to accomplish your own project's
593 goals and the goals of similar projects can often be
594 accomplished by <emphasis>not</emphasis> starting a new
602 <!-- Section2: naming-->
605 <title>Naming your project</title>
608 While there are plenty of projects that fail with descriptive
609 names and plenty that succeed without them, I think naming your
610 project is worth giving a bit of thought. Leslie Orchard tackles
611 this issue in an <ulink
612 url="http://www.advogato.org/article/67.html">Advogato
613 article</ulink>. His article is short and definately worth looking
618 The synopsis is that Orchard recommends you pick a name where,
619 after hearing the name, many users or developers will both:
625 <para>Know what the project does.</para>
628 <para>Remember it tomorrow.</para>
634 Humorously, Orchard's project, <quote>Iajitsu,</quote> does
635 neither. It is probably unrelated that development has effectively
636 frozen since the article was written.
640 He makes a good point though. There are companies whose only job
641 is to make names for pieces of software. They make
642 <emphasis>ridiculous</emphasis> amount of money doing it and are
643 supposedly worth it. While you probably can't aford a company like
644 this, you can afford to learn from their existance and think a
645 little bit about the name you are giving your project because it
646 <emphasis>does</emphasis> matter.
650 If there is a name you really want but it doesn't fit Orchard's
651 criteria, you can still go ahead. I thought <quote>gnubile</quote>
652 was one of the best I'd heard for a free software project ever and
653 I still talk about it long after I've stopped using the
654 program. However, if you can flexible on the subject, listen to
655 Orchard's advice. It might help you.
659 <!-- Section2: licensing-->
661 <sect2 id="licensing">
662 <title>Licensing your Software</title>
665 On one (somewhat simplistic) level, the difference between a piece
666 of free software and a piece of propriety software is the
667 license. A license helps you as the developer by protecting your
668 legal rights to have your software distributed under your terms
669 and helps demonstrate to those who wish to help you or your
670 project that they are encouraged to join.
673 <sect3 id="chooselicense">
674 <title>Choosing a license</title>
677 Any discussion of licenses is also sure to generate at least a
678 small flame war as there are strong feelings that some free
679 software licenses are better than others. This discussion also
680 brings up the question of <quote>Open Source Software</quote> and
681 the debate over the terms <quote>Open Source Software</quote> and
682 <quote>Free Software</quote>. However, because I've written the
683 Free Software Development HOWTO and not the Open Source
684 Development HOWTO, my own allegiances in this argument are in the
689 In attempting to reach a middle ground through diplomacy without
690 sacrificing my own philosophy, I will recommend picking any
691 license that conforms to the <ulink
692 url="http://www.debian.org/social_contract">Debian Free Software
693 Guidelines</ulink>. Originally compiled by the Debian project
694 under Bruce Perens, the <acronym>DFSG</acronym> forms the first
695 version of the <ulink
696 url="http://www.opensource.org/docs/definition_plain.html">Open
697 Source Definition.</ulink> Examples of free licenses given by the
698 <acronym>DFSG</acronym> are the <acronym>GPL</acronym>, the
699 <acronym>BSD</acronym>, and the Artistic License.
703 Conforming to the definition of free software offered by Richard
705 url="http://www.gnu.org/philosophy/free-sw.html"><quote>The Free
706 Software Definition</quote></ulink>, any of these licenses will
707 uphold, <quote>users' freedom to run, copy, distribute, study,
708 change and improve the software.</quote> There are plenty of
709 other licenses that also conform to the <acronym>DFSG</acronym>
710 but sticking with a more well-known license will offer the advantage
711 of immediate recognition and understanding.
715 In attempting a more in-depth analysis, I agree with Karl Fogel's
716 description of licenses as falling into two groups: those that
717 are the <acronym>GPL</acronym> and those that are not the
718 <acronym>GPL</acronym>.
722 Personally, I license all my software under the
723 <acronym>GPL</acronym>. Created and protected by the Free
724 Software Foundation and the GNU Project, the
725 <acronym>GPL</acronym> is the license for the Linux kernel,
726 GNOME, Emacs, and the vast majority of GNU/Linux software. It's
727 the obvious choice but I believe it is a good one. Any BSD
728 fanatic will urge you to remember that there is a viral aspect to
729 the <acronym>GPL</acronym> that prevents the mixture of
730 <acronym>GPL</acronym>'ed code with non-<acronym>GPL</acronym>'ed
731 code. To many people (myself included), this is a benefit, but to
732 some, it is a major drawback.
736 The three major licenses can be found at the following locations:
742 <para><ulink url="http://www.gnu.org/copyleft/gpl.html">The GNU
743 General Public License</ulink></para>
746 <para><ulink url="http://www.debian.org/misc/bsd.license">The
747 BSD License</ulink></para>
751 url="http://language.perl.com/misc/Artistic.html">The Artistic
752 License</ulink></para>
758 <emphasis>In any case, please read through any license before
759 your release your software under it. As the primary developer,
760 you can't afford any license surprises.</emphasis>
764 <sect3 id="licensechoose">
765 <title>The mechanics of licensing</title>
768 The text of the <acronym>GPL</acronym> offers <ulink
769 url="http://www.gnu.org/copyleft/gpl.html#SEC4">a good
770 description of the mechanics of applying a license</ulink> to a
771 piece of software. My quick checklist for applying a license
779 <para>If at all possible, attach and distribute a full copy of
780 the license with the source and binary by including a separate
785 <para>At the top of each source file in your program, attach a
786 notice of copyright and include information on where the full
787 license can be found. The <acronym>GPL</acronym> recommends
788 that each file begin with:</para>
791 <emphasis>one line to give the program's name and an idea of what it does.</emphasis>
792 Copyright (C) yyyy name of author
794 This program is free software; you can redistribute it and/or
795 modify it under the terms of the GNU General Public License
796 as published by the Free Software Foundation; either version 2
797 of the License, or (at your option) any later version.
799 This program is distributed in the hope that it will be useful,
800 but WITHOUT ANY WARRANTY; without even the implied warranty of
801 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
802 GNU General Public License for more details.
804 You should have received a copy of the GNU General Public License
805 along with this program; if not, write to the Free Software
806 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
810 The <acronym>GPL</acronym> goes on to recommend attaching
811 information on methods for contacting you (the author) via
812 email or physical mail.
818 The <acronym>GPL</acronym> continues and suggests that if your
819 program runs in an interactive mode, you should write the
820 program to output a notice each time it enters interactive
821 mode that includes a message like this one that points to full
822 information about the programs license:
826 Gnomovision version 69, Copyright (C) year name of author
827 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
828 type `show w'. This is free software, and you are welcome
829 to redistribute it under certain conditions; type `show c'
835 <para>Finally, it might be helpful to include a
836 <quote>copyright disclaimer</quote> from an employer or a
837 school if you work as a programmer or if it seems like your
838 employer or school might be able to make an argument for
839 ownership of your code later on. These aren't often needed but
840 there are plenty of free software developers who have gotten
841 into trouble and wish they'd asked for one.</para>
848 <sect3 id="licensewarning">
849 <title>Final license warning</title>
852 Please, please, please, place your software under
853 <emphasis>some</emphasis> license. It may not seem important, and
854 to you it may not be, but licenses <emphasis>are</emphasis>
855 important. For a piece of software to be included in the Debian
856 GNU/Linux distribution, it must have a license that fits the
857 <ulink url="http://www.debian.org/social_contract">Debian Free
858 Software Guidelines</ulink>. If your software has no license, it
859 can not be distributed as a package in Debian until you
860 re-release it under a free license. Please save yourself and
861 others trouble by releasing the first version of your software
862 with a clear license.
869 <!-- Section2: chooseversioning-->
871 <sect2 id="chooseversioning">
872 <title>Choosing a Method of Version Numbering</title>
875 <emphasis>The most important thing about a system of version
876 numbering is that there is one.</emphasis> It may seem pedantic to
877 emphasize this point but you'd be surprised at the number of
878 scripts and small programs that pop up without any version number
883 <emphasis>The second most important thing about a system of
884 numbering is that the numbers always go up.</emphasis> Automatic
885 version tracking systems and people's sense of order in the
886 universe will fall apart if version numbers don't rise. It doesn't
887 <emphasis>really</emphasis> matter if 2.1 is a big jump and
888 2.0.005 is a small jump but it does matter that 2.1 is more recent
893 Follow these two simple rules and you will not go (too)
894 wrong. Beyond this, the most common technique seems to be the
895 <quote>major level,</quote> <quote>minor level,</quote>
896 <quote>patch level</quote> version numbering scheme. Whether you
897 are familiar with the name or not, you interact with it all the
898 time. The first number is the major number and it signifies major
899 changes or rewrites. The second number is the minor number and it
900 represents added or tweaked functionality on top of a largely
901 coherant structure. The third number is the patch number and it
902 usually will only refer to releases fixing bugs.
906 The widespread use of this scheme is why I know the nature and
907 relative degree in the differences between a 2.4.12 release of the
908 Linux kernel and a 2.4.11, 2.2.12, and 1.2.12 without knowning
909 anything about any of the releases.
913 You can bend or break these rules, and people do. But beware, if
914 you choose to, someone will get annoyed, assume you don't know,
915 and try and educate you, probably not nicely. I always follow this
916 method and I implore you to do so as well.
920 There are several version numbering systems that are well known,
921 useful, and that might be worth looking into before you release
927 <term>Linux kernel version numbering:</term>
929 <para>The Linux kernel uses a versioning system where any odd
930 minor version number refers to an development or testing release
931 and any even minor version number refers to a stable
932 version. Think about it for a second. Under this system, 2.1 and
933 2.3 kernels were and always will be development or testing
934 kernels and 2.0, 2.2. and 2.4 kernels are all production code
935 with a higher degree of stability and more testing.
939 Whether you plan on having a split development model (as
940 described in <xref linkend="branches">) or only one version
941 released at a time, my experience with several free software
942 projects and with the Debian project has taught me that use of
943 Linux's version numbering system is worth taking into
944 consideration. In Debian, <emphasis>all</emphasis> minor
945 versions are stable distributions (2.0, 2.1, etc). However,
946 many people assume that 2.1 is an unstable or development
947 version and continue to use an older version until they get so
948 frustrated with the lack of development progress that they
949 complain and figure the system out. If you never release an odd
950 minor version but only release even ones, nobody is hurt, and
951 less people are confused. It's an idea worth taking into
958 <term>Wine version numbering:</term>
960 <para>Because of the unusual nature of wine's development where
961 the not-emulator is constantly improving but not working towards
962 any immediately achievable goal, wine is released every three
963 weeks. Wine does this by labeling their releases in <quote>Year
964 Month Day</quote> format where each release might be labeled
965 <quote>wine-XXXXXXXX</quote> where the version from January 04,
966 2000 would be <quote>wine-20000104</quote>. For certain
967 projects, <quote>Year Month Day</quote> format can make a lot of
974 <term>Mozilla milestones:</term>
976 <para>When one considers Netscape 6 and vendor versions, the
977 mozilla's project development structure is one of the most
978 complex free software models available. The project's version
979 numbering has reflected the unique situation in which it is
984 Mozilla's version numbering structure has historically been
985 made up of milestones. From the beginning of the mozilla
986 project, the goals of the project in the order and degree to
987 which they were to be achieved were charted out on a series of
988 <ulink url="http://www.mozilla.org/roadmap.html">road
989 maps</ulink>. Major points and achievements along these
990 road-maps were marked as milestones. Therefore, although
991 mozilla was built and distributed nightly as <quote>nightly
992 builds,</quote> on a day when the goals of a milestone on the
993 road-map had been reached, that particular build was marked as
994 a <quote>milestone release.</quote>
998 While I haven't seen this method employed in any other projects
999 to date, I like the idea and think that it might have value in
1000 any testing or development branch of a large application under
1009 <!-- Section2: documentation-->
1011 <sect2 id="documentation">
1012 <title>Documentation</title>
1015 A huge number of otherwise fantastic free software applications
1016 have withered and died because their author was the only person
1017 who knew how to use them fully. Even if your program is written
1018 primarily for a techno-savvy group of users, documentation is
1019 helpful and even necessary for the survival of your project. You
1020 will learn later in <xref linkend="releasing"> that you should
1021 always release something that is usable. <emphasis>A piece of
1022 software without documentation is not usable.</emphasis>
1026 There are lots of different people you should document for and
1027 there are lots of ways to document your project. <emphasis>The
1028 importance of documentation in source code to help facilitate
1029 development by a large community is vital</emphasis> but it falls
1030 outside the scope of this HOWTO. This being the case, this section
1031 deals with useful tactics for user-directed documentation.
1035 A combination of tradition and necessity has resulted in a
1036 semi-regular system of documentation in most free software
1037 projects that is worth following. Both users and developers expect
1038 to be able to get documentation in several ways and it's essential
1039 that you provide the information they are seeking in a form they
1040 can read if your project is ever going to get off the
1041 ground. People have come to expect:
1045 <title>Man pages</title>
1047 <para>Your users will want to be able to type <quote>man
1048 yourprojectname</quote> end up with a nicely formatted man page
1049 highlighting the basic use of your application. Make sure that
1050 before you release your program, you've planned for this.
1054 Man pages are not difficult to write. There is excellent
1055 documentation on the man page writing process available through
1056 the <quote>The Linux Man-Page-HOWTO</quote> which is available
1057 through the Linux Documentation project <acronym>(LDP)</acronym>
1058 and is written by Jens Schweikhardt. It is available <ulink
1059 url="http://www.schweikhardt.net/man_page_howto.html">from
1060 Schweikhardt's site</ulink> or <ulink
1061 url="http://www.linuxdoc.org/HOWTO/mini/Man-Page.html">from the
1062 <acronym>LDP</acronym></ulink>.
1066 It is also possible to write man pages using DocBook
1067 SGML. Because man pages are so simple and the DocBook method
1068 relatively new, I have not been able to follow this up but would
1069 love help from anyone who can give me more information on how
1070 exactly how this is done.
1075 <title>Command line accessible documentation</title>
1078 Most users will expect some basic amount of documentation to be
1079 easily available from the command line. For few programs should
1080 this type of documentation extend for more than one screen (24 or
1081 25 lines) but it should cover the basic usage, a brief (one or
1082 two sentence) description of the program, a list of the commands
1083 with explanations, as well as all the major options (also with
1084 explanations), plus a pointer to more in-depth documentation for
1085 those who need it. The command line documentation for Debian's
1086 apt-get serves as an excellent example and a useful model:
1090 apt 0.3.19 for i386 compiled on May 12 2000 21:17:27
1091 Usage: apt-get [options] command
1092 apt-get [options] install pkg1 [pkg2 ...]
1094 apt-get is a simple command line interface for downloading and
1095 installing packages. The most frequently used commands are update
1099 update - Retrieve new lists of packages
1100 upgrade - Perform an upgrade
1101 install - Install new packages (pkg is libc6 not libc6.deb)
1102 remove - Remove packages
1103 source - Download source archives
1104 dist-upgrade - Distribution upgrade, see apt-get(8)
1105 dselect-upgrade - Follow dselect selections
1106 clean - Erase downloaded archive files
1107 autoclean - Erase old downloaded archive files
1108 check - Verify that there are no broken dependencies
1112 -q Loggable output - no progress indicator
1113 -qq No output except for errors
1114 -d Download only - do NOT install or unpack archives
1115 -s No-act. Perform ordering simulation
1116 -y Assume Yes to all queries and do not prompt
1117 -f Attempt to continue if the integrity check fails
1118 -m Attempt to continue if archives are unlocatable
1119 -u Show a list of upgraded packages as well
1120 -b Build the source package after fetching it
1121 -c=? Read this configuration file
1122 -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp
1123 See the apt-get(8), sources.list(5) and apt.conf(5) manual
1124 pages for more information and options.
1128 It has become a GNU convention to make this type of information
1129 accessible with the <quote>-h</quote> and the
1130 <quote>--help</quote> options. Most GNU/Linux users will expect
1131 to be able to retrieve basic documentation these ways so if you
1132 choose to use different methods, be prepared for the flames and
1133 fallout that may result.
1138 <title>Files users will expect</title>
1140 In addition to man pages and command-line help, there are certain
1141 files where people will look for documentation, especially in any
1142 package containing source code. In a source distribution, most of
1143 these files can be stored in a the root directory of the source
1144 distribution or in a subdirectory of the root called
1145 <quote>doc</quote> or <quote>Documentation.</quote> Common files
1146 in these places include:
1152 <term>README or Readme</term>
1155 <para>A document containing all the basic installation,
1156 compilation, and even basic use instructions that make up the
1157 bare minimum information needed to get the program up and
1158 running. A README is not your chance to be verbose but should
1159 be concise and effective. An ideal README is at least 30 lines
1160 long and more no more than 250.</para>
1165 <term>INSTALL or Install</term>
1168 <para>The INSTALL file should be much shorter than the README
1169 file and should quickly and concisely describe how to build
1170 and install the program. Usually an INSTALL file simply
1171 instructs the user to run <quote>./configure; make; make
1172 install</quote> and touches on any unusual options or actions
1173 that may be necessary. For most relatively standard install
1174 procedures and for most programs, INSTALL files are as short
1175 as possible are rarely over 100 lines.</para>
1180 <term>CHANGELOG, Changelog, ChangeLog, or changelog</term>
1183 <para>A CHANGELOG is a simple file that every well-managed
1184 free software project should include. A CHANGELOG is simple
1185 the file that, as its name implies, logs or documents the
1186 changes you make to your program. The most simple way to
1187 maintain a CHANGELOG is to simply keep a file with the source
1188 code for your program and add a section to the top of the
1189 CHANGELOG with each release describing what has been, changed,
1190 fixed, or added to the program. It's a good idea to post the
1191 CHANGELOG onto the website as well because it can help people
1192 decide whether they want or need to upgrade to a newer version
1193 or wait for a more significant improvement.</para>
1201 <para>A NEWS file and a ChangeLog are similar. Unlike a
1202 CHANGELOG, a NEWS file is not typically updated with new
1203 versions. Whenever new features are added, the developer
1204 responisble will make a note in the NEWS file. NEWS files
1205 should not have to be changed before a release (they should be
1206 kept up to date all along) but it's usually a good idea to
1207 check first anyway because often developers just forget to
1208 keep them as current as they should.</para>
1213 <term><acronym>FAQ</acronym></term>
1216 <para>For those of you that don't already know,
1217 <acronym>FAQ</acronym> stands for Frequently Asked Questions
1218 and a FAQ is a collection of exactly that. FAQs are not
1219 difficult to make. Simply make a policy that if you are asked
1220 a question or see a question on a mailing list two or more
1221 times, add the question (and its answer) to your FAQ. FAQs are
1222 more optional than the files listed above but they can save
1223 your time, increase usability, and decrease headaches on all
1233 <title>Website</title>
1235 It's only indirectly an issue of documentation but a good website
1236 is quickly becoming an essential part of any free software
1237 project. Your website should provide access to your documentation
1238 (in <acronym>HTML</acronym> if possible). It should also include
1239 a section for news and events around your program and a section
1240 that details the process of getting involved with development or
1241 testing and make an open invitation. It should also supply links
1242 to any mailing lists, similar websites, and provide a direct link
1243 to all the available ways of downloading your software.
1248 <title>Other documentation hints</title>
1251 All your documentation should be in plaintext, or, in cases where
1252 it is on your website primarily, in HTML. Everyone can cat a
1253 file, everyone has a pager, (almost) everyone can render
1254 HTML. <emphasis>You are welcome to distribute information in PDF,
1255 PostScript, RTF, or any number of other widely used formats but
1256 this information must also be available in plaintext or HTML or
1257 people will be very angry at you.</emphasis>
1261 It doesn't hurt to distribute any documentation for your program
1262 from your website (FAQs etc) with your program. Don't hesitate
1263 throw any of this in the program's tarball. If people don't need
1264 it, they will delete it. I can repeat it over and over:
1265 <emphasis>Too much documentation is not a sin.</emphasis>
1270 <!-- Section2: presentation -->
1272 <sect2 id="presentation">
1273 <title>Other Presentation Issues</title>
1275 Many of the remaining issues surrounding the creation of a new
1276 free software program fall under what most people describe as
1277 common sense issues. Its often said that software engineering is
1278 90 percent common sense combined with 10 percent specialized
1279 knowledge. Still, they are worth noting briefly in hopes that they
1280 may remind a developer of something they may have forgotten.
1284 <title>Package formats</title>
1286 Package formats may differ depending on the system you are
1287 developing for. For windows based software, Zip archives (.zip)
1288 usually serve as the package format of choice. If you are
1289 developing for GNU/Linux, *BSD, or any UN*X, make sure that your
1290 source code is always available in tar'ed and gzip'ed format
1291 (.tar.gz). UNIX compress (.Z) has gone out of style and
1292 usefulness and faster computers have brought bzip2 (.bz2) into
1293 the spot-light as a more effective compression medium. I now make
1294 all my releases available in both gzip'ed and bzip2'ed tarballs.
1298 Binary packages should always be distribution specific. If you
1299 can build binary packages against a current version of a major
1300 distribution, you will only make your users happy. Try to foster
1301 relationships with users or developers of large distributiosn to
1302 develop a system for the consistent creation of binary
1303 packages. It's often a good idea to provide RedHat
1304 <acronym>RPM</acronym>'s (.rpm), Debian deb's (.deb) and source
1305 <acronym>RPM</acronym>'s <acronym>SRPM</acronym>'s if
1306 possible. Remember: <emphasis>While these binaries packages are
1307 nice, getting the source packaged and released should always be
1308 your priority. Your users or fellow developers can and will do
1309 the the binary packages for you.</emphasis>
1314 <title>Version control systems</title>
1317 A version control system can make a lot of these problems of
1318 packaging (and a lot of other problems mentioned in this HOWTO)
1319 less problematic. If you are using *NIX, CVS is your best bet. I
1320 recommend Karl Fogel's book on the subject (and the <ulink
1321 url="http://cvsbook.red-bean.com/">posted HTML version</ulink>)
1326 CVS or not, you should probably invest some time into learning
1327 about a version control system because it provides an automated
1328 way of solving many of the problems described by this HOWTO. I
1329 am not aware of any free version control systems for Windows or
1330 MacOS but I know that CVS clients exist for both
1331 platforms. Websites like <ulink
1332 url="http://sourceforge.net">SourceForge</ulink> do a great job
1333 as well with a nice, easy-to-use web interface to CVS.
1337 I'd love to devote more space in this HOWTO to CVS because I love
1338 it (I even use CVS to keep versions straight on this HOWTO!) but
1339 I think it falls outside the scope of this document and should
1340 (already has) its own HOWTO.
1346 <title>Useful tidbits and presentation hints</title>
1349 Other useful hints include:
1357 <emphasis>Make sure that your program can always be found in a
1358 single location.</emphasis> Often this means that you have a
1359 single directory accessible via <acronym>FTP</acronym> or the
1360 web where the newest version can be quickly recognized. One
1361 effective technique is a provide a symlink called
1362 <quote>yourprojectname-latest</quote> that is always pointing
1363 to the most recent released or development version of your
1364 free software application. Keep in mind that this location
1365 will recieve many requests for downloads around releases so
1366 make sure that the server you choose has adequate bandwidth.
1372 <emphasis>Make sure that there is a consistent email address
1373 for bug reports.</emphasis> It's usually a good idea to make
1374 this something that is NOT your primary email address like
1375 yourprojectname@host or yourprojectname-bugs@host. This way,
1376 if you ever decide to hand over maintainership or if your
1377 email address changes, you simply need to change where this
1378 email address forwards. It also will allow for more than one
1379 person to deal with the influx of mail that is created if your
1380 project becomes as huge as you hope it will.
1390 <!-- Section1: starting: END -->
1392 <!-- Section1: developers -->
1394 <sect1 id="developers">
1395 <title>Maintaining a Project: Interacting with Developers</title>
1397 <primary>fswd!developers</primary>
1401 Once you have gotten your project started, you have overcome the
1402 most difficult hurdles in the development process of your
1403 program. Laying a firm foundation is essential, but the development
1404 process itself is equally important and provides just as many
1405 opportunities for failure. In the next two sections, I will
1406 describe running a project by discussing how to maintain a
1407 development effort through interactions with developers and with
1412 In releasing your program, your program becomes free software. This
1413 transition is more than just a larger user base. By releasing your
1414 program as free software, <emphasis>your</emphasis> software
1415 becomes the <emphasis>free software community's</emphasis>
1416 software. The direction of your software's development will be
1417 reshaped, redirected, and fully determined by your users and, to a
1418 larger extent, by other developers in the community.
1422 The major difference between free software development and
1423 propriety software development is the developer base. As the leader
1424 of a free software project, you need to attract and keep developers
1425 in a way that leaders of proprietary software projects simply don't
1426 have to worry about. <emphasis>As the person leading development of
1427 a free software project, you must harness the work of fellow
1428 developers by making responsible decisions and by responsibly
1429 choosing not to make decisions. You have to direct developers
1430 without being overbearing or bossy. You need to strive to earn
1431 respect and never forget to give it out.</emphasis>
1434 <!-- Section2: delegation -->
1436 <sect2 id="delegation">
1437 <title>Delegating Work</title>
1440 By now, you've hypothetically followed me through the early
1441 programming of a piece of software, the creation of a website and
1442 system of documentation, and we've gone ahead and (as will be
1443 discussed in <xref linkend="releasing">) released it to the rest
1444 of the world. Times passes, and if things go well, people become
1445 interested and want to help. The patches begin flowing in.
1449 <emphasis>Like the parent of any child who grows up, it's now time
1450 to wince, smile and do most difficult thing in any parents
1451 life: It's time to let go.</emphasis>
1455 Delegation is the political way of describing this process of
1456 <quote>letting go.</quote> It is the process of handing some of
1457 the responsibility and power over your project to other
1458 responsible and involved developers. It is difficult for anyone
1459 who has invested a large deal of time and energy into a project
1460 but it essential for the growth of any free software project. One
1461 person can only do so much. A free software project is nothing
1462 without the involvement of <emphasis>a group</emphasis> of
1463 developers. A group of developers can only be maintained through
1464 respectful and responsible leadership and delegation.
1468 As your project progresses, you will notice people who are putting
1469 significant amounts of time and effort into your project. These
1470 will be the people submitting the most patches, posting most on
1471 the mailing lists, and engaging in long email discussions. It is
1472 your responsibility to contact these people and to try and shift
1473 some of the power and responsibility of your position as the
1474 project's maintainer onto them (if they want it). There are
1475 several easy ways you can do this:
1479 In a bit of a disclaimer, delegation need not mean rule by
1480 comittee. In many cases it does and this has been proven to
1481 work. In other cases this has created problems. <ulink
1482 url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
1483 Projects the Open Source Way</ulink> argues that <quote>OSS
1484 projects do best when one person is the clear leader of a team and
1485 makes the big decisions (design changes, release dates, and so
1486 on).</quote> I think this often true but would urge developers to
1487 consider the ideas that the project leader need not be the
1488 project's founder and that these important powers need not all rest
1489 with one person but that a release manager may be different than a
1490 lead developer. These situations are tricky politically so
1491 be careful and make sure it's necessary before you go around
1496 <title>How to delegate</title>
1499 You may find that other developers seem even more experienced or
1500 knowledgeable than you. Your job as a maintainer does not mean
1501 you have to be the best or the brightest. It means you
1502 are responsible for showing good judgment and for
1503 recognizing which solutions are maintainable and which are not.
1506 Like anything, its easier to watch others delegate than to do it
1507 yourself. In a sentence: <emphasis>Keep an eye out for other
1508 qualified developers who show an interest and sustained
1509 involvement with your project and try and shift responsibility
1510 towards them.</emphasis> The following ideas might be good places
1511 to start or good sources of inspiration:
1515 <title>Allow a larger group of people to have write access to your CVS
1516 repository and make real efforts towards rule by a
1520 <ulink url="http://httpd.apache.org/">Apache</ulink> is an
1521 example of a project that is run by small group of developers
1522 who vote on major technical issues and the admission of new
1523 members and all have write access to the main source
1524 repository. Their process is detailed <ulink
1525 url="http://httpd.apache.org/ABOUT_APACHE.html">online.</ulink>
1529 The <ulink url="http://www.debian.org/"> Debian Project</ulink>
1530 is an extreme example of rule by committee. At current count,
1531 more than 700 developers have full responsibility for
1532 aspects of the project. All these developers can upload into
1533 the main FTP server, and vote on major issues. Direction for
1534 the project is determined by the project's <ulink
1535 url="http://www.debian.org/social_contract">social
1536 contract</ulink> and a <ulink
1537 url="http://www.debian.org/devel/constitution">constitution</ulink>. To
1538 facilitate this system, there are special teams (i.e. the
1539 install team, the Japanese language team) as well as a technical
1540 committee and a project leader. The leader's main responsibility
1541 is to, <quote>appoint delegates or delegate decisions to the
1542 Technical Committee.</quote>
1546 While both of these projects operate on a scale that your
1547 project will not (at least initially), their example is
1548 helpful. Debian's idea of a project leader who can do
1549 <emphasis>nothing</emphasis> but delegate serves as a
1550 caricature of how a project can involve and empower a huge
1551 number of developers and grow to a huge size.
1556 <sect4 id="releasemanager">
1557 <title>Publicly appoint someone as the release manager for a
1558 specific release</title>
1561 A release manager is usually responsible for coordinating
1562 testing, enforcing a code freeze, being responsible for
1563 stability and quality control, packaging up the software, and
1564 placing it in the appropriate places to be downloaded.
1568 This use of the release manager is a good way to give yourself a
1569 break and to shift the responsibility for accepting and
1570 rejecting patches onto someone else. It is a good way of very
1571 clearly defining a chunk of work on the project as belonging to
1572 a certain person and its a great way of giving yourself room to
1577 <sect4 id="delegatebranch">
1578 <title>Delegate control of an entire branch</title>
1580 If your project chooses to have branches (as described in <xref
1581 linkend="branches">), it might be a good idea to appoint someone
1582 else to be the the head of a branch. If you like focusing your
1583 energy on development releases and the implementation of new
1584 features, hand total control over the stable releases to a
1585 well-suited developer.
1589 The author of Linux, Linus Torvalds, came out and crowned Alan
1590 Cox as <quote>the man for stable kernels.</quote> All patches
1591 for stable kernels go to Alan and, if Linus were to be taken
1592 away from work on Linux for any reason, Alan Cox would be more
1593 than suited to fill his role as the acknowledged heir to the
1594 Linux maintainership.
1600 <!-- Section2: patching -->
1602 <sect2 id="patching">
1603 <title>Accepting and Rejecting Patches</title>
1605 This HOWTO has already touched on the fact that as the maintainer
1606 of a free software project, one of your primary and most important
1607 responsibilities will be accepting and rejecting patches submitted
1608 to you by other developers.
1612 <title>Technical judgment</title>
1615 In <emphasis>Open Source Development with CVS</emphasis>, Karl
1616 Fogel makes a convincing argument that the most important things
1617 to keep in mind when rejecting or accepting patches are:
1624 <para>A firm knowledge of the scope of your program (that's the
1625 <quote>idea</quote> I talked about in <xref linkend="chooseproject">);</para>
1629 <para>The ability to recognize, facilitate, and direct
1630 <quote>evolution</quote> of your program so that the program
1631 can grow and change and incorporate functionality that was
1632 originally unforeseen;</para>
1636 <para>The necessity to avoid digressions that might expand the
1637 scope of the program too much and result and push the project
1638 towards an early death under its own weight and
1639 unwieldiness.</para>
1646 These are the criteria that you as a project maintainer should
1647 take into account each time you receive a patch.
1651 Fogel elaborates on this and states the <quote>the
1652 questions to ask yourself when considering whether to implement
1653 (or approve) a change are:</quote>
1660 <para>Will it benefit a significant percentage of the program's
1661 user community?</para>
1665 <para>Does it fit within the program's domain or within a
1666 natural, intuitive extension of that domain?</para>
1673 The answers to these questions are never straightforward and its
1674 very possible (and even likely) that the person who submitted the
1675 patch may feel differently about the answer to these questions
1676 than you do. However, if you feel that that the answer to either
1677 of those questions is <quote>no,</quote> it is your responsibility
1678 to reject the change. If you fail to do this, the project will
1679 become unwieldy and unmaintainable and many ultimately fail.
1684 <title>Rejecting patches</title>
1687 Rejecting patches is probably the most difficult and sensitive
1688 job that the maintainer of any free software project has to
1689 face. But sometimes it has to be done. I mentioned earlier (in
1690 <xref linkend="developers"> and in <xref linkend="delegation">)
1691 that you need to try and balance your responsibility and power to
1692 make what you think are the best technical decisions with the
1693 fact that you will lose support from other developers if you seem
1694 like you are on a power trip or being overly bossy or possessive
1695 of the community's project. I recommend that you keep these three
1696 major concepts in mind when rejecting patches (or other changes):
1700 <title>Bring it to the community</title>
1702 One of the best ways of justifying a decision to reject a patch
1703 and working to not seem like you keep an iron grip on your
1704 project is by not making the decision alone at all. It might
1705 make sense to turn over larger proposed changes or more
1706 difficult decisions to a development mailing list where they can
1707 be discussed and debated. There will be some patches (bug fixes,
1708 etc.) which will definitely be accepted and some that you feel
1709 are so offbase that they do not even merit further
1710 discussion. It is those that fall into the grey area between
1711 these two groups that might merit a quick forward to a mailing
1716 I recommend this process wholeheartedly. As the project
1717 maintainer you are worried about making the best decision for
1718 the project, for the project's users and developers, and for
1719 yourself as a responsible project leader. Turning things over to
1720 an email list will demonstrate your own responsibility and
1721 responsive leadership as it tests and serves the interests of
1722 your software's community.
1727 <title>Technical issues are not always good justification</title>
1729 Especially towards the beginning of your project's life, you
1730 will find that many changes are difficult to implement,
1731 introduce new bugs, or have other technical problems. Try to see
1732 past these. Especially with added functionality, good ideas do
1733 not always come from good programmers. Technical merit is a
1734 valid reason to postpone an application of a patch but it is not
1735 always a good reason to reject a change outright. Even small
1736 changes are worth the effort of working with the developer
1737 submitting the patch to iron out bugs and incorporate the change
1738 if you think it seems like a good addition to your project. The
1739 effort on your part will work to make your project a community
1740 project and it will pull a new or less experienced developer
1741 into your project and even teach them something that might help
1742 them in making their next patch.
1747 <title>Common courtesy</title>
1749 It should go without saying but, <emphasis>above all and in all
1750 cases, just be nice.</emphasis> If someone has an idea and cares
1751 about it enough to write some code and submit a patch, they
1752 care, they are motivated, and they are already involved. Your
1753 goal as the maintainer is make sure they submit again. They may
1754 have thrown you a dud this time but next time may be the idea or
1755 feature that revolutionizes your project.
1759 It is your responsibility to first justify your choice to not
1760 incorporate their change clearly and concisely. Then thank
1761 them. Let them know that you a appreciate their help and feel
1762 horrible that you can't incorporate their change. Let them know
1763 that you look forward to their staying involved and you hope
1764 that the next patch or idea meshes better with your project
1765 because you appreciate their work and want to see it in your
1766 application. If you have ever had a patch rejected after putting
1767 a large deal of time, thought, and energy into it, you remember
1768 how it feels and it feels bad. Keep this in mind when you have
1769 to let someone down. It's never easy but you need to do
1770 everything you can to make it as not-unpleasant as possible.
1776 <!-- Section2: branches -->
1778 <sect2 id="branches">
1779 <title>Stable and Development Branches</title>
1782 The idea of stable and development branches has already been
1783 described briefly in <xref linkend="chooseversioning"> and in
1784 <xref linkend="delegatebranch">. These allusions attest to some of
1785 the ways that multiple branches can affect your software. Branches
1786 can let you avoid (to some extent) some of the problems around
1787 rejecting patches (as described in <xref linkend="patching">) by
1788 allowing you to temporarily compromise the stability of your
1789 project without affecting those users who need that stability.
1793 The most common way of branching your project is to have one
1794 branch that is stable and one that is for development. This is the
1795 model followed by the Linux kernel that is described in <xref
1796 linkend="chooseversioning">. In this model, there is
1797 <emphasis>always</emphasis> one branch that is stable and always
1798 one that is in development. Before any new release, the
1799 development branch goes into a <quote>feature freeze</quote> as
1800 described in <xref linkend="freezing"> where major changes and
1801 added features are rejected or put on hold under the development
1802 kernel is released as the new stable branch and major development
1803 resumes on the development branch. Bug fixes and small changes
1804 that are unlikely to have any large negative repercussions are
1805 incorporated into the stable branch as well as the development
1810 Linux's model provides an extreme example. On many projects, there is no
1811 need to have two versions constantly available. It may make sense to
1812 have two versions only near a release. The Debian project has
1813 historically made both a stable and an unstable distribution
1814 available but has expanded to this to include: stable, unstable,
1815 testing, experimental, and (around release time) a frozen
1816 distribution that only incorporates bug fixes during the
1817 transition from unstable to stable. There are few projects whose
1818 size would necessitate a system like Debian's but this use of
1819 branches helps demonstrate how they can be used to balance
1820 consistent and effective development with the need to make regular
1821 and usable releases.
1825 In trying to set up a development tree for yourself, there are
1826 several things that might be useful to keep in mind:
1833 <term>Minimize the number of branches</term>
1835 <para>Debian may be able to make good use of four or five
1836 branches but it contains gigabytes of software in over 5000
1837 packages compiled for 5-6 different architectures. For you,
1838 two is probably a good ceiling. Too many branches will confuse
1839 your users (I can't count how many times I had to describe
1840 Debian's system when it only had 2 and sometimes 3 branches!),
1841 potential developers and even yourself. Branches can help but
1842 they come at a cost so use them very sparingly.</para>
1847 <term>Make sure that all your different branches are explained</term>
1849 <para>As I mentioned in the preceding paragraph, different
1850 branches <emphasis>will</emphasis> confuse your users. Do
1851 everything you can to avoid this by clearly explaining the
1852 different branches in a prominent page on your website and in a
1853 README file in the <acronym>FTP</acronym> or
1854 web directory.</para>
1857 I might also recommend against a mistake that I think Debian
1858 has made. The terms <quote>unstable,</quote>
1859 <quote>testing,</quote> and <quote>experimental</quote> are
1860 vague and difficult to rank in order of stability (or
1861 instability as the case may be). Try explaining to someone
1862 that <quote>stable</quote> actually means <quote>ultra
1863 stable</quote> and that <quote>unstable</quote> doesn't
1864 actually include any unstable software but is really stable
1865 software that is untested as a distribution.
1869 If you are going to use branches, especially early on, keep in
1870 mind that people are conditioned to understand the terms
1871 <quote>stable</quote> and <quote>development</quote> and you
1872 probably can't go wrong with this simple and common division of
1879 <term>Make sure all your branches are always available</term>
1881 <para>Like a lot of this document, this should probably should
1882 go without saying but experience has taught me that it's not
1883 always obvious to people. It's a good idea to physically split
1884 up different branches into different directories or directory
1885 trees on your <acronym>FTP</acronym> or web site. Linux
1886 accomplishes this by having kernels in a v2.2 and a v2.3
1887 subdirectory where it is immediately obvious (after you know
1888 their version numbering scheme) which directory is for the most
1889 recent stable and the current development releases. Debian
1890 accomplishes this by naming all their distribution with names
1891 (i.e. woody, potato, etc.) and then changing symlinks named
1892 <quote>stable,</quote> <quote>unstable</quote> and
1893 <quote>frozen</quote> to point to which ever distribution (by
1894 name) is in whatever stage. Both methods work and there are
1895 others. In any case, it is important that different branches
1896 are always available, are accessible from consistent locations,
1897 and that different branches are clearly distinguished from each
1898 other so your users know exactly what they want and where to
1908 <!-- Section2: otherdev -->
1910 <sect2 id="otherdev">
1911 <title>Other Development issues</title>
1913 There are more issues surrounding interaction with developers in a
1914 free software project that I can not touch on in great detail in a
1915 HOWTO of this size and scope. Please don't hesitate to contact me if you see
1916 any major omissions.
1920 Other smaller issues that are worth mentioning are:
1923 <sect3 id="freezing">
1924 <title>Freezing</title>
1926 For those projects that choose to adopt a split development model
1927 (<xref linkend="branches">), freezing is a concept that is worth
1928 becoming familiar with.
1932 Freezes come in two major forms. A <quote>feature freeze</quote>
1933 is a period when no significant functionality is added to a
1934 program. It is a period where established functionality (even
1935 skeletons of barely working functionality) can be improved and
1936 perfected. It is a period where bugs are fixed. This type of
1937 freeze is usually applied some period (a month or two) before a
1938 release. It is easy to push a release back as you wait for
1939 <quote>one more feature</quote> and a freeze helps to avoid this
1940 situation by drawing the much needed line in the sand. It gives
1941 developers room they need to get a program ready for release.
1945 The second type of freeze is a <quote>code freeze</quote> which
1946 is much more like a released piece of software. Once a piece of
1947 software has entered a <quote>code freeze,</quote> all changes to
1948 the code are discouraged and only changes that fix known bugs
1949 are permitted. This type of freeze usually follows a
1950 <quote>feature freeze</quote> and directly precedes a
1951 release. Most released software is in what could be interpreted
1952 as a sort of high level <quote>code freeze.</quote>
1956 Even if you never choose to appoint a release manager (<xref
1957 linkend="releasemanager">), you will have an easier time
1958 justifying the rejection or postponement of patches (<xref
1959 linkend="patching">) before a release with a publicly stated
1966 <title>Forks</title>
1968 I wasn't sure about how I would deal with forking in this
1969 document (or if I would deal with forking at all). A fork is when
1970 a group of developers takes code from a free software project and
1971 actually starts a brand new free software project with it. The
1972 most famous example of a fork was between Emacs and XEmacs. Both
1973 emacsen are based on an identical code-base but for technical,
1974 political, and philosophical reasons, development was split into
1975 two projects which now compete with each other.
1979 The short version of the fork section is, <emphasis>don't do
1980 them.</emphasis> Forks force developers to choose one project to
1981 work with, cause nasty political divisions, and redundancy of
1982 work. Luckily, usually the threat of the fork is enough to scare
1983 the maintainer or maintainers of a project into changing the way
1984 they run their project.
1988 In his chapter on <quote>The Open Source Process,</quote> Karl
1989 Fogel describes how to do a fork if you absolutely must. If you
1990 have determined that is absolutely necessary and that the
1991 differences between you and the people threatening to fork are
1992 absolutely unresolvable, I recommend Fogel's book as a good place
1998 <!-- Section1: users -->
2001 <title>Maintaining a Project: Interacting with Users</title>
2003 <primary>fswd!users</primary>
2007 If you've worked your way up to here, congratulations, you are
2008 nearing the end of this document. This final section describes some
2009 of the situations in which you, in your capacity as project
2010 maintainer, will be interacting with users. It gives some
2011 suggestions on how these situations might be handled effectively.
2015 Interacting with users is difficult. In our discussion of
2016 interaction with developers, the underlying assumption is that in a
2017 free software project, a project maintainer must constantly strive to
2018 attract and keep developers who can easily leave at any time.
2022 Users in the free software community are different than developers
2023 and are also different than users in the world of proprietary
2024 software and they should be treated differently than either
2025 group. Some ways in which the groups differ significantly follow:
2032 <para>The lines between users and developers are blurred in ways
2033 that is totally foreign to any proprietary development
2034 model. Your users are often your developers and vice
2039 <para>In the free software world, you are often your users' only
2040 choice. Because there is such an emphasis on not replicating the
2041 work of others in the free software community and because the
2042 element of competition present in the propriety software model is
2043 absent (or at least in an extremely different form) in the free
2044 software development model, you will probably be the only project
2045 that does what you do (or at least the only one that does what
2046 you do in the way that you do it). This means your responsiveness
2047 to your users is even more important than in the proprietary
2048 software world.</para>
2052 <para>In an almost paradoxical situation, free software projects
2053 have less immediate or dire consequences for ignoring their users
2054 altogether. It is also often easier to do. Because you don't
2055 usually need to compete with another product, chances are good
2056 that you will not be scrambling to gain the features of your
2057 competitor's newest program. This means that your development
2058 process will have to be directed either internally, by a
2059 commitment to your users, or through both.</para>
2065 Trying to tackle this unique situation can only be done
2066 indirectly. Developers and maintainers need to listen to users and
2067 to try and be as responsive as possible. A solid knowledge of the
2068 situation recounted above is any free software developer's best tool
2069 for shifting his development or leadership style to fit the unique
2070 process of free software development. This chapters will try and
2071 introduce some of the more difficult or important points in any
2072 projects interactions with users and give some hints on how to
2076 <!-- Section2: testing -->
2078 <sect2 id="testing">
2079 <title>Testing and Testers</title>
2082 In addition to your users being your developers, they are also
2083 (and perhaps more commonly) your testers. Before I get flamed, I
2084 should rephrase my sentence: <emphasis>some of your
2085 users</emphasis> (those who explicityly volunteer) are your
2090 It is important that this distinction be made early on because not
2091 all of your users want to be testers. Many users want to use
2092 stable software and don't care if they don't have the newest,
2093 greatest software with the latest, greatest features. These users
2094 except a stable, tested piece of software without major or obvious
2095 bugs and will be angry if they find themselves testing. This is
2096 yet another way in which a split development model (as mentioned
2097 in <xref linkend="branches">) might come in handy.
2102 url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2103 Projects the Open Source Way</ulink></quote> describes what a
2104 good test should look for:
2109 <term>Boundary conditions</term>
2112 <para>Maximum buffer lengths, data conversions, upper/lower
2113 boundary limits, and so on.</para>
2118 <term>Inappropriate behavior</term>
2121 <para>Its a good idea to find out what a program will do if a
2122 user hands it a value it isn't expecting, hits the wrong button,
2123 etc. Ask yourself a bunch of <quote>what if</quote> questions
2124 and think of anything that <emphasis>might</emphasis> fail or
2125 <emphasis>might</emphasis> go wrong and find out what your
2126 program would do in those cases.</para>
2131 <term>Graceful failure</term>
2134 <para>The answer to a number of the <quote>what if</quote>
2135 questions above is probably <quote>failure</quote> which is
2136 often the only answer. Now make sure that it happens
2137 nicely. Make sure that when it crashes, there is some indication
2138 of why it crashed or failed so that the user or developer
2139 understands whats going on.</para>
2145 <term>Standards conformance</term>
2148 <para>If possible, make sure your programs conforms to
2149 standards. If it's interactive, don't be too creative with
2150 interfaces. If it is non-interactive, make sure it communicates
2151 over appropriate and established channels with other programs
2152 and with the rest of the system.</para>
2159 <title>Automated testing</title>
2161 For many programs, many common mistakes can be caught by
2162 automated means. Automated tests tend to be pretty good at
2163 catching errors that you've run into several times before or
2164 the things you just forget. They are not very good at finding
2165 errors, even major ones, that are totally unforeseen.
2169 CVS comes with a bourne shell script called sanity.sh that is
2170 worth looking at. Debian uses a program called lintian that
2171 checks Debian packages for all of the most common errors. While
2172 use of these scripts may not be helpful, there is a host of other
2173 sanity checking software on the net that may be applicable (feel
2174 free to email me any recommendations). None of these will create
2175 a bug-free release but they will avoid at least some major
2176 oversights. Finally, if your programs become a long term
2177 endeavor, you will find that there are certain errors that you
2178 tend to make over and over. Start a collection of scripts that
2179 check for these errors to help keep them out of future releases.
2184 <title>Testing by testers</title>
2186 For any program that depends on user interactivity, many bugs
2187 will only be uncovered through testing by users actually clicking
2188 the keys and pressing the mouse buttons. For this you need
2189 testers and as many as possible.
2193 The most difficult part of testing is finding testers. It's
2194 usually a good tactic to post a message to a relevant mailing
2195 list or news group announcing a specific proposed release date
2196 and outlining the functionality of your program. If you put some
2197 time into the announcement, you are sure to get a few responses.
2201 The second most difficult part of testing is
2202 <emphasis>keeping</emphasis> your testers and keeping them
2203 actively involved in the testing process. Fortunately, there are
2204 some tried and true tactics that can applied towards this end:
2211 <term>Make things simple for your testers</term>
2213 <para>Your testers are doing you a favor so make it as easy as
2214 possible for them. This means that you should be careful to
2215 package your software in a way that is easy to find, unpack,
2216 install, and uninstall. This also means you should explain
2217 what you are looking for to each tester and make the means for
2218 reporting bugs simple and well established. The key is to
2219 provide as much structure as possible to make your testers'
2220 jobs easy and to maintain as much flexibility as possible for
2221 those that want to do things a little differently.</para>
2226 <term>Be responsive to your testers</term>
2228 <para>When your testers submit bugs, respond to them and
2229 respond quickly. Even if you are only responding to tell them
2230 that the bug has already been fixed, quick and consistent
2231 responses make them feel like their work is heard, important,
2232 and appreciated.</para>
2237 <term>Thank your testers</term>
2239 <para>Thank them personally each time they send you
2240 patch. Thank them publicly in the documentation and the about
2241 section of your program. You appreciate your testers and your
2242 program would not be possible without their help. Make sure
2243 they know it. Publicly, pat them on the back to make sure the rest of
2244 the world knows it too. It will be appreciated more than you
2255 <!-- Section2: support -->
2257 <sect2 id="support">
2258 <title>Setting up Support Infrastructure</title>
2261 While testing is important, the large part of your interactions
2262 and responsibility to your users falls under the category of
2263 support. The best way to make sure your users are adequately
2264 supported in using your program is to set up a good infrastructure
2265 for this purpose so that your developers and users help each other
2266 and less of the burden falls on you. This way, people will also
2267 get quicker and better responses to their questions. This
2268 infrastructure comes in several major forms:
2272 <title>Documentation</title>
2274 It should not come as any surprise that the key element to any
2275 support infrastructure is good documentation. This topic was
2276 large covered in <xref linkend="documentation"> and will not be
2282 <title>Mailing lists</title>
2284 Aside from documentation, effective mailing lists will be your
2285 greatest tool in providing user support. Running a mailing list
2286 well is more complicated than installing mailing list software
2291 <title>Separate lists</title>
2294 A good idea is too separate your user and development mailing
2295 lists (perhaps into project-user@host and project-devel@host)
2296 and enforce the division. If people post a development question
2297 onto -user, politely ask them to repost it onto -devel and vise
2298 versa. Subscribe yourself to both groups and encourage all
2299 primarily developers to do the same.
2303 This system provides so that no one person is stuck doing all of
2304 the support work and works so that users learn more about the
2305 program, they can help newer users with their questions.
2310 <title>Choose mailing list software well</title>
2312 Please don't make the selection of mailing list software
2313 impulsively. Please consider easy accessibility by users without
2314 a lot of technical experience so you want to be as easy as
2315 possible. Web accessibility to an archive of the list is also
2320 The two biggest free software mailing list programs are <ulink
2321 url="http://www.greatcircle.com/majordomo/">majordomo</ulink>
2322 and <ulink url="http://www.list.org/">GNU Mailman</ulink>. A
2323 long time advocate of majordomo, I would now recommend any
2324 project choose GNU Mailman. It fulfills the criteria listed
2325 above and makes it easier. It provides a good mailing
2326 list program for a free software project maintainer as opposed
2327 to a good mailing list application for a mailing list
2332 There are other things you want to take into consideration in
2333 setting up your list. If it is possible to gate your mailing
2334 lists to USENET and provide it in digest form as well as
2335 making them accessible on the web, you will please some users
2336 and work to make the support infrastructure slightly more
2343 <title>Other support ideas</title>
2346 A mailing list and accessible documentation are far from all you
2347 can do to set up good user support infrastructure. Be
2348 creative. If you stumble across something that works well, email me
2349 and I'll include it here.
2353 <title>Make your self accessible</title>
2355 You can not list too few methods to reach you. If you hang out
2356 in an <acronym>IRC</acronym> channel, don't hesitate to list it
2357 in your projects documentation. List email and snailmail
2358 addresses, and ways to reach you via <acronym>ICQ</acronym>,
2359 <acronym>AIM</acronym>, or Jabber if they apply.
2364 <title>Bug management software</title>
2366 For many large software projects, use of bug management software
2367 is essential to keep track of which bugs have been fixed, which
2368 bugs have not been fixed, and which bugs are being fixed by
2369 which people. Debian uses the <ulink
2370 url="http://bugs.debian.org">Debian Bug Tracking System</ulink>
2371 (<acronym>BTS</acronym>) although it may not be best choice for
2372 every project (it seems to currently be buckling under its own
2373 weight) As well as a damn good web browser, the mozilla project
2374 has spawned a sub-project resulting in a bug tracking system
2376 url="http://www.mozilla.org/projects/bugzilla/">bugzilla</ulink>
2377 which has become extremely possible and which I like a lot.
2381 These systems (and others like them) can be unwieldy so
2382 developers should be careful to not spend more time on the bug
2383 tracking system than on the bugs or the projects themselves. If
2384 a project continues to grow, use of a bug tracking system can
2385 provide an easy standard avenue for users and testers to report
2386 bugs and for developers and maintainers to fix them and track
2387 them in an orderly fashion.
2393 <!-- Section2: releasing -->
2395 <sect2 id="releasing">
2396 <title>Releasing Your Program</title>
2399 As mentioned earlier in the HOWTO, the first rule of releasing is,
2400 <emphasis>release something useful.</emphasis> Non-working or
2401 not-useful software will not attract anyone to your
2402 project. People will be turned off of your project and will be likely
2403 to simply gloss over it next time they see a new version
2404 announced. Half-working software, if useful, will intrigue people,
2405 whet their appetites for versions to come, and encourage them to
2406 join the development process.
2410 <title>When to release</title>
2413 Making the decision to release your software for the first time
2414 is an incredibly important and incredibly stressful decision. But
2415 it needs to done. My advice is to try and make something that
2416 is complete enough to be usable and incomplete enough to allow
2417 for flexibility and room for imagination by your future
2418 developers. It's not an easy decision. Ask for help on a local
2419 Linux User Group mailing list or from a group of developer
2424 One tactic is to first do an <quote>alpha</quote> or
2425 <quote>beta</quote> release as described below in <xref
2426 linkend="alphabeta">. However, most of the guidelines described
2431 <emphasis>When you feel in your gut that it is time and you feel
2432 you've weighed the situation well several times, cross your
2433 fingers and take the plunge.</emphasis>
2437 After you've released for the first time, knowing when to release
2438 becomes less stressful, but just as difficult to gauge. I like
2439 the criteria offered by Robert Krawitz in his article, <ulink
2440 url="http://www.advogato.org/article/196.html"><quote>Free
2441 Software Project Management</quote></ulink> for maintaining a
2442 good release cycle. He recommends that you ask yourself,
2443 <quote>does this release...</quote>
2449 <para>Contain sufficient new functionality or bug fixes to be
2450 worth the effort.</para>
2454 <para>Be spaced sufficiently far apart to allow the user time
2455 to work with the latest release.</para>
2459 <para>Be sufficiently functional so that the user can get work
2460 done (quality).</para>
2466 If the answer is yes to all of these questions, its probably time
2467 for a release. If in doubt, remember that asking for advice can't
2473 <title>How to release</title>
2476 If you've followed the guidelines described in this HOWTO up
2477 until this point, the mechanics of doing a release are going to
2478 be the easy part of releasing. If you have set up consistent
2479 distribution locations and the other infrastructure described in
2480 the preceding sections, releasing should be as simple as building
2481 the package, checking it once over, and uploading it into the
2482 appropriate place and then making your website reflect the
2487 <sect3 id="alphabeta">
2488 <title>Alpha, beta, and development releases</title>
2491 When contemplating releases, it worth considering the fact that
2492 not every release needs to be a full numbered release. Software
2493 users are accustomed to pre-releases but you must be careful to
2494 label these releases accurately or they will cause more problems then
2499 The observation is often made that many free software developers
2500 seem to be confused about the release cycle. <quote><ulink
2501 url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2502 Projects the Open Source Way</ulink></quote> suggests that you memorize
2503 the phrase, <quote>Alpha is not Beta. Beta is not Release</quote>
2504 and I'd agree that tis is a probably a good idea.
2511 <term>alpha releases</term>
2513 <para>Alpha software is feature-complete but sometimes only
2514 partially functional.</para>
2516 <para>Alpha releases are expected to be unstable, perhaps a
2517 little unsafe, but definitely usable. They
2518 <emphasis>can</emphasis> have known bugs and kinks that have
2519 yet to be worked out. Before releasing an alpha, be sure to
2520 keep in mind that <emphasis>alpha releases are still
2521 releases</emphasis> and people are not going to be expecting a
2522 nightly build from the CVS source. An alpha should work and
2523 have minimal testing and bug fixing already finished.</para>
2528 <term>beta releases</term>
2530 <para>Beta software is feature-complete and functional, but is
2531 in the testing cycle and still has a few bugs left to be
2534 <para>Beta releases are general expected to be usable and
2535 slightly unstable, although definitely <emphasis>not
2536 unsafe.</emphasis> Beta releases usually preclude a full
2537 release by under a month. They can contain small known bugs
2538 but no major ones. All major functionality should be fully
2539 implemented although the exact mechanics can still be worked
2540 out. Beta releases are great tool to whet the appetites of
2541 potential users by giving them a very realistic view of where
2542 your project is going to be in the very near future and can
2543 help keep interest by giving people
2544 <emphasis>something.</emphasis></para>
2549 <term>development releases</term>
2551 <para><quote>Development release</quote> is much a more vague
2552 term than <quote>alpha</quote> or <quote>beta</quote>. I
2553 usually choose to reserve the term for discussion of a
2554 development branch although there are other ways to use the
2555 term. So many in fact, that I feel the term has been
2556 cheapened. The popular window manager <ulink
2557 url="http://www.enlightenment.org">Enlightenment</ulink> has
2558 released <emphasis>nothing but</emphasis> development
2559 releases. Most often, the term is used to describe releases
2560 that are not even alpha or beta and if I were to release a
2561 pre-alpha version of a piece of software in order to keep
2562 interest in my project alive, this is probably how I would
2563 have to label it.</para>
2573 <!-- Section2: announcing -->
2575 <sect2 id="announcing">
2576 <title>Announcing Your Project</title>
2579 Well, you've done it. You've (at least for the purposes of this
2580 HOWTO) designed, built, and released your free software
2581 project. All that is left is for you to tell the world so they
2582 know to come and try it out and hopefully jump on board with
2583 development. If everything is in order as described above, this
2584 will be a quick and painless process. A quick announcement is all
2585 that it takes to put yourself on the free software community's
2590 <title>Mailing lists and USENET</title>
2592 Email is still the way that most people on the Internet get their
2593 information. Its a good idea to send a message announcing your
2594 program to any relevant mailing list you know of and any relevant
2595 USENET discussion group. Karl Fogel recommends that use you
2596 simple subject describing the fact that the message is an
2597 announcement, the name of the program, the version, and a
2598 half-line long description of its functionality. This way, any
2599 interested user or developer will be immediately attracted to
2600 your announcement. Fogel's example looks like:
2603 <screen>Subject: ANN: aub 1.0, a program to assemble USENET binaries</screen>
2606 The rest of the email should describe the programs functionality
2607 quickly and concisely in no more than two paragraphs and should
2608 provide links to the projects webpage and direct links to
2609 downloads for those that want to try it right away.
2613 You should repeat this announcement process consistently in the
2614 same locations for each subsequent release.
2619 <title>freshmeat.net</title>
2621 Mentioned earlier in <xref linkend="evalwhere">, in today's free
2622 software community, announcements of your project on freshmeat
2623 are almost more important than announcements on mailing lists.
2627 Visit the <ulink url="http://freshmeat.net">freshmeat.net
2628 website</ulink> or their <ulink
2629 url="http://freshmeat.net/add-project/">submit project
2630 page</ulink> to post your project onto their site and into their
2631 database. In addition to a large website, freshmeat provides a
2632 daily newsletter that highlights all the days releases and
2633 reaches a huge audience (I personally skim it every night for any
2634 interesting new releases).
2643 <title>Printed Books</title>
2648 <surname>Fogel</surname>
2649 <firstname>Karl</firstname>
2652 <title>Open Source Development with CVS</title>
2655 <publishername>Coriolois Open Press</publishername>
2657 <pubdate>1999</pubdate>
2659 <isbn>1-57610-490-7</isbn>
2663 Fogel's <quote>guide to using CVS in the free software
2664 world</quote> is much more than its subitle. In the publisher's
2665 own words: <quote><emphasis>Open Source Development with
2666 CVS</emphasis> is one of the first books available that teaches
2667 you development and implementation of Open Source
2668 software.</quote> It also includes the best reference and
2669 tutorial to CVS I have ever seen. It is the book that was
2670 <emphasis>so good</emphasis> that it prompted me to write this
2671 HOWTO because I thought the role it tried to serve was so
2672 important and useful. Please check it or buy it if you can and
2673 are seriously interested in running a free software project.
2682 <surname>Lessig</surname>
2683 <firstname>Lawrence</firstname>
2686 <title>Code and Other Laws of Cyberspace</title>
2689 <publishername>Basic Books</publishername>
2691 <pubdate>2000</pubdate>
2693 <isbn>0-465-03913-8</isbn>
2697 While it only briefly talks about free software (and does it by
2698 tiptoeing around the free software/open source issue with the
2699 spineless use of the term <quote>open code</quote> that only a
2700 laywer could coin), Lessig's book is brilliant. Written by a
2701 lawyer, it talks about how regulation on the Internet is not
2702 done with law, but with the code itself and how the nature of
2703 the code will determine the nature of future freedoms. In
2704 addition to being a quick and enjoyable read, it gives some
2705 cool history and describes how we <emphasis>need</emphasis>
2706 free software in a way more powerfully than anything I've read
2708 url="http://www.gnu.org/philosophy/right-to-read.html">RMS's
2709 <quote>Right to Read.</quote></ulink>
2718 <surname>Raymond</surname>
2719 <firstname>Eric</firstname>
2722 <title>The Cathedral and the Bazaar</title>
2723 <subtitle>Musings on Linux and Open Source by an Accidental Revolutionary</subtitle>
2726 <publishername>O'Reilly</publishername>
2728 <pubdate>1999</pubdate>
2730 <isbn>1-56592-724-9</isbn>
2733 Although I have to honestly say that I am not the ESR fan that
2734 I used to be, this book proved invaluable in getting me where I
2735 am today. The essay that gives the book its title does a good
2736 job of sketching the free software process and does an an
2737 amazing job of making an argument for free software/open source
2738 development as a road to better software. The rest of the book
2739 has other of ESR's articles, which for the most part are posted
2740 on his website. Still, it's nice thing to own in hard copy and
2741 something that every free software/open source hacker should
2750 <title>Web-Accessable Resources</title>
2753 This is a list of the web resources pertaining to this HOWTO that
2754 I've found most helpful in compiling this information. If you know
2755 of others that would help, please don't hesitate to email me at
2756 <email>mako@debian.org</email> and we can look into getting it
2757 added to the list and represented in the HOWTO.
2761 I'd recommend that any free software developer (or potential one)
2762 skim through these sites becaue they have each have a lot to say.
2768 <surname>Manley</surname>
2769 <firstname>Montey</firstname>
2773 url="http://news.linuxprogramming.com/news_story.php3?ltsn=2000-10-31-001-05-CD">Managing
2774 Projects the Open Source Way</ulink></title>
2777 <publishername><ulink
2778 url="http://www.linuxprogramming.com">Linux
2779 Programming</ulink></publishername>
2781 <pubdate>Oct 31, 2000</pubdate>
2785 In one of the better articles on the subject that I've read,
2786 Monty sums up some of the major points I touch on including:
2787 starting a project, testing, documenation, organizing a team and
2788 leadership, and several other topics. While more opiniated that
2789 I try to be, I think its an important article that I found very
2790 helpful in writing this HOWTO. I've tried to cite him in
2791 the places where I borrowed from him most.
2795 I have problems much of this piece and I recommend you read
2796 <xref linkend="krawitz"> at the same time you read Monty's
2797 article for a good critique.
2806 <surname>Gabriel</surname>
2807 <firstname>Richard</firstname>
2811 url="http://www.jwz.org/doc/worse-is-better.html">The Rise of
2812 <quote>Worse is Better</quote></ulink></title>
2816 A well written article although I think the title may have
2817 confused as many people as the rest of the essay helped. It
2818 offers a good description of how to design programs that will
2819 succeed and stay maintainable as they grow.
2827 <title>Advogato Articles</title>
2830 I've found that one of the best resources that any free software
2831 developer has at his or her disposal is Advogato.org. If you haven't
2832 yet had a chance to visit <ulink url="http://www.advogato.org">the
2833 website</ulink>, do.
2837 I have spent a huge amount of time on advogato and I've gone
2838 through and provided links to the articles that I think might be
2839 of particular interest to anyone reading this HOWTO. I think that
2840 skimming through these links can be helfpul and I promise that if
2841 you do, you'll learn a lot. You will learn that my idea of how a
2842 free software project should be run is not the
2843 <emphasis>only</emphasis> idea. I think that's important.
2847 If nothing else, there is <emphasis>way</emphasis> more
2848 information on that website than I could ever fit into, or
2849 reference from this HOWTO. I have listed what I think are the most
2850 relavant articles here with short descriptions that I've written.
2857 <surname>Hindle</surname>
2858 <firstname>Stephen</firstname>
2861 <title><ulink url="http://www.advogato.org/article/262.html">'Best Practices' for Open Source?</ulink></title>
2864 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2866 <pubdate>March 21, 2001</pubdate>
2870 Touching mostly on programming practice (as most articles on
2871 the subject usually do), the article talks a little about
2872 project managment (<quote>Use it!</quote>) and a bit about
2873 communication within a free software project.
2882 <surname>Cohen</surname>
2883 <firstname>Bram</firstname>
2887 url="http://www.advogato.org/article/258.html"></ulink>How to
2888 Write Maintainable Code</title>
2891 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2893 <pubdate>March 15, 2001</pubdate>
2897 This article touches upon the "writing maintainable code"
2898 discussion that I try hard to avoid in my HOWTO. It's one of
2899 the better (and most diplomatic) articles on the subject that
2905 <biblioentry id="krawitz">
2908 <surname>Krawitz</surname>
2909 <firstname>Robert</firstname>
2912 <title><ulink url="http://www.advogato.org/article/196.html">Free
2913 Source Project Management</ulink></title>
2916 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2918 <pubdate>November 4, 2000</pubdate>
2922 This article made me happy because it challenged many of the
2923 problems that I had with Monty's article on <ulink
2924 url="http://www.linuxprogramming.com">LinuxProgramming</ulink>. The
2925 author argues that Monty calls simply for the application of
2926 old (proprietary software) project management techniques in
2927 free software projects instead of working to come up with
2928 something new. I found his article to be extremely well thought
2929 out and I think it's an essential read for any free software
2939 <surname>Martins</surname>
2940 <firstname>Lalo</firstname>
2943 <title><ulink url="http://www.advogato.org/article/128.html">Ask
2944 the Advogatos: why do Free Software projects
2945 fail?</ulink></title>
2948 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2950 <pubdate>July 20, 2000</pubdate>
2954 While the article is little more than a question, reading the
2955 answers to this question offered by advogato's readers can
2956 help. In a lot of ways, this HOWTO acts as my answer to the
2957 questions posed in this article but there are others, many of
2958 which might take issue with whats is in this HOWTO. It's worth
2968 <surname>Burley</surname>
2969 <firstname>David</firstname>
2973 url="http://www.advogato.org/article/107.html">In-Roads to Free
2974 Software Development</ulink></title>
2977 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
2979 <pubdate>June 14, 2000</pubdate>
2983 This document was written as a response to <ulink
2984 url="http://www.advogato.org/article/72.html">another advogato
2985 article</ulink>. Although not about running a project, this
2986 describes some of the ways that you can get started with free
2987 software development without starting a project. I think this
2988 is an important article. If you are interested in becoming
2989 involved with free software, this article showcases some of the
2990 ways that you can do this without actually starting a project
2991 (something that I hope this HOWTO has demonstrated is not to be
3001 <surname>Moorman</surname>
3002 <firstname>Jacob</firstname>
3006 url="http://www.advogato.org/article/72.html"></ulink>Importance
3007 of Non-Developer Supporters in Free Software</title>
3010 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3012 <pubdate>April 16, 2000</pubdate>
3016 Moorman's is a short article but it brings up some good
3017 points. The comment reminding developers to thank their testers
3018 and end-users is invaluable and oft-forgotten.
3027 <surname>Orchard</surname>
3028 <firstname>Leslie</firstname>
3031 <title><ulink url="http://www.advogato.org/article/67.html">On
3032 Naming an Open Source Project</ulink></title>
3035 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3037 <pubdate>April 12, 2000</pubdate>
3041 I didn't even have a section on project naming in this HOWTO
3042 (See <xref linkend="naming">) until Leslie Orchard's article
3043 reminded me of it. Thanks to Leslie for writing this article!
3052 <surname>Allen</surname>
3053 <firstname>David</firstname>
3056 <title><ulink url="http://www.advogato.org/article/40.html">Version Numbering Madness</ulink></title>
3059 <publishername><ulink url="http://www.advogato.org">Advogato</ulink></publishername>
3061 <pubdate>Februrary 28, 2000</pubdate>
3065 In this article, David Allen challengs the whole
3066 <quote>Major.Minor.Patch</quote> version numbering scheme. Its
3067 good to read this as you read <xref
3068 linkend="chooseversioning">. I liked the article and it
3069 describes some of the projects that I bring up in my discussion
3070 of verion numbering.
3081 <!-- Keep this comment at the end of the file
3086 sgml-namecase-general:t
3087 sgml-general-insert-case:lower
3088 sgml-minimize-attributes:nil
3089 sgml-always-quote-attributes:t
3091 sgml-indent-data:nil
3092 sgml-parent-document:nil
3093 sgml-exposed-tags:nil
3094 sgml-local-catalogs:nil
3095 sgml-local-ecat-files:nil