Penguin
Diff: HowToSoftwareProjMgmtHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToSoftwareProjMgmtHOWTO.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Tuesday, October 26, 2004 11:07:49 am by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:07:36 am by perry Revert
@@ -1,3454 +1 @@
-Free Software Project Management HOWTO  
-!!!Free Software Project Management HOWTO  
-!Benjamin "Mako" Hill  
-  
- mako@debian.org  
-  
-  
-  
-__Revision History__Revision v0.3.215 April 2002Revised by: bchRevision v0.3.118 June 2001Revised by: bchRevision v0.35 May 2001Revised by: bchRevision v0.2.110 April 2001Revised by: bchRevision v0.28 April 2001Revised by: bchRevision v0.0127 March 2001Revised by: bchInitial Release  
-  
-  
-  
-  
-  
- This HOWTO is designed for people with experience in programming  
-and some skills in managing a software project but who are new to  
-the world of free software. This document is meant to act as a  
-guide to the non-technical aspects of free software project  
-management and was written to be a crash course in the people  
-skills that aren't taught to commercial coders but that can make  
-or break a free software project.  
-  
-  
-  
-  
-  
-  
-----; __Table of Contents__; 1. Introduction: ; 1.1. Copyright Information; 1.2. Disclaimer; 1.3. New Versions; 1.4. Credits; 1.5. Feedback; 1.6. Translations; 2. Starting a Project: ; 2.1. Choosing a Project; 2.2. Naming your project; 2.3. Licensing your Software; 2.4. Choosing a Method of Version Numbering; 2.5. Documentation; 2.6. Other Presentation Issues; 3. Maintaining a Project: Interacting with Developers: ; 3.1. Delegating Work; 3.2. Accepting and Rejecting Patches; 3.3. Stable and Development Branches; 3.4. Other Project Management issues; 3.5. Forks; 4. Maintaining a Project: Interacting with Users: ; 4.1. Testing and Testers; 4.2. Setting up Support Infrastructure; 4.3. Releasing Your Program; 4.4. Announcing Your Project; Bibliography; A. GNU Free Documentation License: ; A.1. . PREAMBLE; A.2. 1. APPLICABILITY AND DEFINITIONS; A.3. 2. VERBATIM COPYING; A.4. 3. COPYING IN QUANTITY; A.5. 4. MODIFICATIONS; A.6. 5. COMBINING DOCUMENTS; A.7. 6. COLLECTIONS OF DOCUMENTS; A.8. 7. AGGREGATION WITH INDEPENDENT WORKS; A.9. 8. TRANSLATION; A.10. 9. TERMINATION; A.11. 10. FUTURE REVISIONS OF THIS LICENSE  
-!!!1. Introduction  
-  
- Skimming through freshmeat.net provides mountains of reasons for this  
-HOWTO's existence--the Internet is littered with excellently  
-written and useful programs that have faded away into the universe  
-of free software forgottenness. This dismal scene made me ask  
-myself, "Why?"  
-  
-  
-  
-  
- This HOWTO tries to do a lot of things (probably too many), but it  
-can't answer that question and won't attempt it. What this HOWTO  
-will attempt to do is give your Free Software project a fighting  
-chance--an edge. If you write a piece of crap that no one is  
-interested in, you can read this HOWTO until you can recite it in  
-your sleep and your project will probably fail. Then again, you can  
-write a beautiful, relevant piece of software and follow every  
-instruction in this HOWTO and your software may still not make  
-it. Sometimes life is like that. However, I'll go out a limb and  
-say that if you write a great, relevant pieces of software and  
-ignore the advise in this HOWTO, you'll probably fail '' more often''.  
-  
-  
-  
-  
- A lot of the information in this HOWTO is best called common  
-sense. Of course, as any debate on interfaces will prove, what is  
-common sense to some programmers proves totally unintuitive to  
-others. After explaining bits and pieces of this HOWTO to Free  
-Software developers on several occasions, I realized that writing  
-this HOWTO might provide a useful resource and a forum for  
-programmers to share ideas about what has and has not worked for  
-them.  
-  
-  
-  
-  
- As anyone involved in any of what seems like an unending parade of  
-ridiculous intellectual property clashes will attest to, a little  
-bit of legalese proves important.  
-  
-  
-----  
-!!1.1. Copyright Information  
-  
- This document is copyrighted (c) 2000 Benjamin "Mako" Hill and is  
-distributed under the terms of the ''GNU Free  
-Documentation License''.  
-  
-  
-  
-  
- Permission is granted to copy, distribute and/or modify this  
-document under the terms of the ''GNU Free Documentation  
-License'', Version 1.1 or any later version  
-published by the Free Software Foundation with no Invariant  
-Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy  
-of the license can be found in Appendix A.  
-  
-  
-----  
-!!1.2. Disclaimer  
-  
- No liability for the contents of this documents can be accepted.  
-Use the concepts, examples and other content at your own risk. As  
-this is a new edition of this document, there may be errors and  
-inaccuracies, that may of course be damaging to your project (and  
-potentially your system). Proceed with caution, and although this  
-is highly unlikely, the author(s) does not take any responsibility  
-for that.  
-  
-  
-  
-  
- All copyrights are held by their by their respective owners, unless  
-specifically noted otherwise. Use of a term in this document  
-should not be regarded as affecting the validity of any trademark  
-or service mark.  
-  
-  
-  
-  
- Naming of particular products or brands should not be seen  
-as endorsements.  
-  
-  
-----  
-!!1.3. New Versions  
-  
- This version is the part of the third pre-release cycle of this  
-HOWTO. It is written to be released to developers for critique and  
-brainstorming. Please keep in mind that this version of the HOWTO  
-is still in an infant stage and will continue to be revised  
-extensively.  
-  
-  
-  
-  
- The latest version number of this document should always be listed  
-on the projects  
-homepage hosted by yukidoke.org.  
-  
-  
-  
-  
- The newest version of this HOWTO will always be made available at  
-the same website, in a variety of formats:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- HTML.  
-  
-  
-  
-****  
-****  
-  
- HTML (single page).  
-  
-  
-  
-****  
-****  
-  
- plain text.  
-  
-  
-  
-****  
-****  
-  
- Compressed postscript.  
-  
-  
-  
-****  
-****  
-  
- Compressed SGML source.  
-  
-  
-  
-****  
-  
-  
-----  
-!!1.4. Credits  
-  
- In this version I have the pleasure of acknowledging:  
-  
-  
-  
-  
-Fellow Debian developer Martin Michlmayr and Vivek  
-Venugopalan who sent me information and links to extremely  
-interesting articles. I've added both to the bibliography and I've  
-added information from each into the HOWTO. Thanks to Andrew Shugg  
-who pointed out several errors in the document. Also, a big thanks  
-to Sung Wook Her (AKA !RedBaron) who is doing the first translation  
-of the HOWTO into Korean. I've been happy to see that people have  
-enjoyed and benefited from the HOWTO so far.  
-  
-  
-  
- Older thanks that I don't want to take out yet include: Josh  
-Crawford, Andy King, and Jaime Davila who all read through this in  
-entirety and gave me feedback that has helped me make changes and  
-improvements to this document. I can't thank you guys enough for  
-your help. An extra "Thank You" goes to Andy King who  
-who read through this several times and submitted patches to make  
-life easier for me.  
-  
-  
-  
-  
- Karl Fogel, the author of ''Open Source Development with  
-CVS'' published by the Coriolis Open Press. Large parts  
-of his book are available on the web. 225 pages of  
-the book are available under the GPL and constitute the best  
-tutorial on CVS I've ever seen. The rest of the book covers,  
-"the challenges and philosophical issues inherent in running  
-an Open Source project using CVS." The book does a good job  
-of covering some of the subjects brought up in this HOWTO and much  
-more. The book's  
-website has information on ordering the book and provides  
-several translations of the chapters on CVS. If you are seriously  
-interested in running a Free Software project, you want this  
-book. I tried to mention Fogel in sections of this HOWTO where I  
-knew I was borrowing directly from his ideas. If I missed any, I'm  
-sorry. I'll try and have those fixed in future versions.  
-  
-  
-  
-  
- Karl Fogel can be reached at `kfogel (at) red-bean (dot)  
-comb  
-  
-  
-  
-  
- Also providing support material, and inspiration for this HOWTO is  
-Eric S. Raymond for his prolific, consistent, and carefully  
-crafted arguments and Lawrence Lessig for reminding me of the  
-importance of Free Software. Additionally, I want to thank every  
-user and developer involved with the Debian Project. The project  
-has provided me with a home, a place to practice free software  
-advocacy, a place to make a difference, a place to learn from  
-those who have been involved with the movement much longer than I,  
-and proof of a free software project that definitely, definitely  
-works.  
-  
-  
-  
-  
- Above all, I want to thank ''Richard Stallman''  
-for his work at the Free Software Foundation and for never giving  
-up. Stallman provides and articulates the philosophical basis that  
-attracts me to free software and that drives me toward writing a  
-document to make sure it succeeds. RMS can always be emailed at  
-`rms (at) gnu (dot) orgb.  
-  
-  
-----  
-!!1.5. Feedback  
-  
- Feedback is always and most certainly welcome for this  
-document. Without your submissions and input, this document  
-wouldn't exist. Do you feel that something is missing? Don't  
-hesitate to contact me to have me write a chapter, section, or  
-subsection or to write one yourself. I want this document to be a  
-product of the Free Software development process that it heralds  
-and I believe that its ultimate success will be rooted in its  
-ability to do this. Please send your additions, comments, and  
-criticisms to the following email address:  
-`mako@debian.orgb.  
-  
-  
-----  
-!!1.6. Translations  
-  
- I know that not everyone speaks English. Translations are nice and  
-I'd love for this HOWTO to gain the kind of international reach  
-afforded by translated versions.  
-  
-  
-  
-  
- I've been contacted by a reader who promises a translation into  
-Korean. However, this HOWTO is still young and other than the  
-promise of Korean, English is all that is currently available. If  
-you would like to help with or do a translation, you will gain my  
-utmost respect and admiration and you'll get to be part of a cool  
-process. If you are at all interested, please don't hesitate to  
-contact me at: `mako@debian.orgb.  
-  
-  
-----  
-!!!2. Starting a Project  
-  
- With very little argument, the beginning is the most difficult  
-period in a project's life to do successful free software project  
-management. Laying a firm foundation will determine whether your  
-project flourishes or withers away and dies. It is also the subject  
-that is of most immediate interest to anyone reading this document  
-as a tutorial.  
-  
-  
-  
-  
- Starting a project involves a dilemma that you as a developer must  
-try and deal with: no potential user for your program is interested  
-in a program that doesn't work, while the development process that  
-you want to employ holds involvement of users as imperative.  
-  
-  
-  
-  
- It is in these dangerous initial moments that anyone working to  
-start a free software project must try and strike a balance along  
-these lines. One of the most important ways that someone trying to  
-start a project can work toward this balance is by establishing a  
-solid framework for the development process through some of the  
-suggestions mentioned in this section.  
-  
-  
-----  
-!!2.1. Choosing a Project  
-  
- If you are reading this document, there's a good chance you  
-already have an idea for a project in mind. Chances are also  
-pretty good that it fills a perceived gap by doing something that  
-no other free software project does or by doing something in a way  
-that is unique enough to necessitate a brand new piece of  
-software.  
-  
-  
-----  
-!2.1.1. Identify and articulate your idea  
-  
- Eric S. Raymond writes about how free software projects start in  
-his essay, "The  
-Cathedral and the Bazaar," which comes as required  
-reading for any free software developer. It is available online .  
-  
-  
-  
-  
- In "The Cathedral and the Bazaar," Raymond tells us  
-that: "every good work of software starts by scratching  
-a developers itch." Raymond's now widely accepted  
-hypothesis is that new free software programs are written, first  
-and foremost, to solve a specific problem facing the developer.  
-  
-  
-  
-  
- If you have an idea for a program in mind, chances are good that  
-it targets a specific problem or "itch" you want to  
-see scratched. ''This idea is the project.''  
-Articulate it clearly. Write it out. Describe the problem you  
-will attack in detail. The success of your project in tackling a  
-particular problem will be tied to your ability to identify that  
-problem clearly early on. Find out exactly what it is that you  
-want your project to do.  
-  
-  
-  
-  
- Monty Manley articulates the importance of this initial step in  
-an essay, "Managing  
-Projects the Open Source Way." As the next section  
-will show, there is ''a lot'' of work that needs  
-to be done before software is even ready to be coded. Manley  
-says, "Beginning an OSS project properly means that a  
-developer must, first and foremost, avoid writing code too  
-soon!"  
-  
-  
-----  
-!2.1.2. Evaluate your idea  
-  
- In evaluating your idea, you need to first ask yourself a few  
-questions. This should happen before you move any further  
-through this HOWTO. Ask yourself: ''Is the free software  
-development model really the right one for your  
-project?''  
-  
-  
-  
-  
- Obviously, since the program scratches your itch, you are  
-definitely interested in seeing it implemented in code. But,  
-because one hacker coding in solitude fails to qualify as a free  
-software development effort, you need to ask yourself a second  
-question: ''Is anybody else interested?''  
-  
-  
-  
-  
- Sometimes the answer is a simple "no." If you want  
-to write a set of scripts to sort ''your''  
-MP3 collection on ''your''  
-machine, ''maybe'' the free software development  
-model is not the best one to choose. However, if you want to  
-write a set of scripts to sort ''anyone's''  
-MP3s, a free software project might fill a  
-useful gap.  
-  
-  
-  
-  
- Luckily, the Internet is a place so big and so diverse that,  
-chances are, there is someone, somewhere, who shares your  
-interests and who feels the same "itch." It is the  
-fact that there are so many people with so many similar needs and  
-desires that introduces the third major question: ''Has  
-somebody already had your idea or a reasonably similar  
-one?''  
-  
-  
-----__2.1.2.1. Finding Similar Projects__  
-  
- There are places you can go on the web to try and answer the  
-question above. If you have experience with the free software  
-community, you are probably already familiar with many of these  
-sites. All of the resources listed below offer searching of  
-their databases:  
-  
-  
-  
-  
-  
-  
-  
-  
-; freshmeat.net:  
-  
-freshmeat.net  
-describes itself as, "the Web's largest index of Linux  
-and Open Source software" and its reputation along  
-these lines is totally unparalleled and unquestioned. If you  
-can't find it on freshmeat, its doubtful that you (or anyone  
-else) will find it at all.  
-  
-; Slashdot:  
-  
-Slashdot  
-provides "News for Nerds. Stuff that matters,"  
-which usually includes discussion of free software, open  
-source, technology, and geek culture news and events. It is  
-not unusual for a particularly sexy development effort to be  
-announced here, so it is definitely worth checking.  
-  
-; !SourceForge:  
-  
-!SourceForge  
-houses and facilitates a growing number of open source and  
-free software projects. It is also quickly becoming a nexus  
-and a necessary stop for free software  
-developers. !SourceForge's software  
-map and new  
-release pages should be necessary stops before  
-embarking on a new free software project. !SourceForge also  
-provides a Code Snippet  
-Library which contains useful reusable chunks of code  
-in an array of languages which can come in useful in any  
-project.  
-  
-; Google and Google's Linux Search:  
-  
-Google and  
- Google's Linux  
-Search, provides powerful web searches that may reveal  
-people working on similar projects. It is not a catalog of  
-software or news like freshmeat or Slashdot, but it is worth  
-checking to make sure you aren't pouring your effort into a  
-redundant project.  
-  
-  
-  
-  
-----__2.1.2.2. Deciding to Proceed__  
-  
- Once you have successfully charted the terrain and have an idea  
-about what kinds of similar free software projects exist, every  
-developer needs to decide whether to proceed with their own  
-project. It is rare that a new project seeks to accomplish a  
-goal that is not at all similar or related to the goal of  
-another project. Anyone starting a new project needs to ask  
-themselves: "Will the new project be duplicating work done  
-by another project? Will the new project be competing for  
-developers with an existing project? Can the goals of the new  
-project be accomplished by adding functionality to an existing  
-project?"  
-  
-  
-  
-  
- If the answer to any of these questions is "yes,"  
-try to contact the developer of the existing project(s) in  
-question and see if he or she might be willing to collaborate  
-with you.  
-  
-  
-  
-  
- For many developers this may be the single most difficult aspect  
-of free software project management, but it is an essential one. It is  
-easy to become fired up by an idea and get caught up in the  
-momentum and excitement of a new project. It is often extremely  
-difficult to do, but it is important that any free software  
-developer remembers that the best interests of the free software  
-community and the quickest way to accomplish your own project's  
-goals and the goals of similar projects can often be  
-accomplished by ''not'' starting a new  
-development effort.  
-  
-  
-----  
-!!2.2. Naming your project  
-  
- While there are plenty of projects that fail with descriptive  
-names and plenty that succeed without them, I think naming your  
-project is worth giving a bit of thought. Leslie Orchard tackles  
-this issue in an Advogato  
-article. His article is short and definitely worth looking  
-over quickly.  
-  
-  
-  
-  
- The synopsis is that Orchard recommends you pick a name where,  
-after hearing the name, many users or developers will both:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-Know what the project does.  
-  
-  
-****  
-****  
-  
-Remember it tomorrow.  
-  
-  
-****  
-  
-  
-  
-  
- Humorously, Orchard's project, "Iajitsu," does  
-neither. It is probably unrelated that development has effectively  
-frozen since the article was written.  
-  
-  
-  
-  
- He makes a good point though. There are companies whose only job  
-is to make names for pieces of software. They make  
-''ridiculous'' amount of money doing it and are  
-supposedly worth it. While you probably can't afford a company like  
-this, you can afford to learn from their existence and think a  
-little bit about the name you are giving your project because it  
-''does'' matter.  
-  
-  
-  
-  
- If there is a name you really want but it doesn't fit Orchard's  
-criteria, you can still go ahead. I thought "gnubile"  
-was one of the best I'd heard for a free software project ever and  
-I still talk about it long after I've stopped using the  
-program. However, if you can be flexible on the subject, listen to  
-Orchard's advice. It might help you.  
-  
-  
-----  
-!!2.3. Licensing your Software  
-  
- On one (somewhat simplistic) level, the difference between a piece  
-of free software and a piece of propriety software is the  
-license. A license helps you as the developer by protecting your  
-legal rights to have your software distributed under your terms  
-and helps demonstrate to those who wish to help you or your  
-project that they are encouraged to join.  
-  
-  
-----  
-!2.3.1. Choosing a license  
-  
- Any discussion of licenses is also sure to generate at least a  
-small flame war as there are strong feelings that some free  
-software licenses are better than others. This discussion also  
-brings up the question of "Open Source Software" and  
-the debate over the terms "Open Source Software" and  
-"Free Software". However, because I've written the  
-Free Software Project Management HOWTO and not the Open Source  
-Software Project Management HOWTO, my own allegiances in this  
-argument are in the open.  
-  
-  
-  
-  
- In attempting to reach a middle ground through diplomacy without  
-sacrificing my own philosophy, I will recommend picking any  
-license that conforms to the Debian Free Software  
-Guidelines. Originally compiled by the Debian project  
-under Bruce Perens, the DFSG forms the first  
-version of the Open  
-Source Definition. Examples of free licenses given by the  
-DFSG are the GPL, the  
-BSD, and the Artistic License. As ESR mentions  
-in his his HOWTO [[ESRHOWTO ], don't write your own  
-license if at all possible. The three licenses I mention all have  
-long interpretive traditions. They are also definitely free  
-software (and can therefore be distributed as part of Debian and  
-in other places that permit the transfer of free software).  
-  
-  
-  
-  
- Conforming to the definition of free software offered by Richard  
-Stallman in "The Free  
-Software Definition", any of these licenses will  
-uphold, "users' freedom to run, copy, distribute, study,  
-change and improve the software." There are plenty of  
-other licenses that also conform to the DFSG  
-but sticking with a more well-known license will offer the  
-advantage of immediate recognition and understanding. Many  
-people write three or four sentences in a COPYING file and assume  
-that they have written a free software license--as my long  
-experience with the debian-legal mailing professes, this is very  
-often not the case.  
-  
-  
-  
-  
- In attempting a more in-depth analysis, I agree with Karl Fogel's  
-description of licenses as falling into two groups: those that  
-are the GPL and those that are not the  
-GPL.  
-  
-  
-  
-  
- Personally, I license all my software under the  
-GPL. Created and protected by the Free  
-Software Foundation and the GNU Project, the  
-GPL is the license for the Linux kernel,  
-GNOME, Emacs, and the vast majority of GNU/Linux software. It's  
-the obvious choice but I also believe it is a good one. Any BSD  
-fanatic will urge you to remember that there is a viral aspect to  
-the GPL that prevents the mixture of  
-GPL'ed code with non-GPL'ed  
-code. To many people (myself included), this is a benefit, but to  
-some, it is a major drawback.  
-  
-  
-  
-  
- Many people write three or four sentences in a COPYING file and  
-assume that they have written a free software license--as my long  
-experience with the debian-legal mailing professes, this is very  
-often not the case. It may not protect you, it may not protect  
-your software, and it may make things very difficult for people  
-that want to use your software but who pay a lot of attention to  
-the subtle legal points of licenses. If you are passionate about  
-a home-brewed license, run it by either people at OSI or the debian-legal mailing  
-list first protect yourself from unanticipated  
-side-effects of your license.  
-  
-  
-  
-  
- The three major licenses can be found at the following locations:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-The GNU  
-General Public License  
-  
-  
-****  
-****  
-  
-The  
-BSD License  
-  
-  
-****  
-****  
-  
-The Artistic  
-License  
-  
-  
-****  
-  
-  
-  
-  
- ''In any case, please read through any license before  
-your release your software under it. As the primary developer,  
-you can't afford any license surprises.''  
-  
-  
-----  
-!2.3.2. The mechanics of licensing  
-  
- The text of the GPL offers a good  
-description of the mechanics of applying a license to a  
-piece of software. My quick checklist for applying a license  
-includes:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-Make yourself or the FSF the copyright holder for the  
-work. In a few rare cases, you might want to make a sponsoring  
-organization (if it's big and powerful enough) the copyright  
-holder instead. Doing this is as simple as putting the name in  
-the blank when you modify the notice of copyright  
-below. Contrary to popular belief, you don't need to file with  
-any organization. The notice alone is enough to copyright your  
-work.  
-  
-  
-****  
-****  
-  
-If at all possible, attach and distribute a full copy of  
-the license with the source and binary by including a separate  
-file.  
-  
-  
-****  
-****  
-  
-At the top of each source file in your program, attach a  
-notice of copyright and include information on where the full  
-license can be found. The GPL recommends  
-that each file begin with:  
-  
-  
-''one line to give the program's name and an idea of what it does.''  
-Copyright (C) yyyy name of author  
-This program is free software; you can redistribute it and/or  
-modify it under the terms of the GNU General Public License  
-as published by the Free Software Foundation; either version 2  
-of the License, or (at your option) any later version.  
-This program is distributed in the hope that it will be useful,  
-but WITHOUT ANY WARRANTY; without even the implied warranty of  
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
-GNU General Public License for more details.  
-You should have received a copy of the GNU General Public License  
-along with this program; if not, write to the Free Software  
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
-  
-  
- The GPL goes on to recommend attaching  
-information on methods for contacting you (the author) via  
-email or physical mail.  
-  
-  
-  
-****  
-****  
-  
- The GPL continues and suggests that if your  
-program runs in an interactive mode, you should write the  
-program to output a notice each time it enters interactive  
-mode that includes a message like this one that points to full  
-information about the programs license:  
-  
-  
-  
-Gnomovision version 69, Copyright (C) year name of author  
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details  
-type `show w'. This is free software, and you are welcome  
-to redistribute it under certain conditions; type `show c'  
-for details.  
-  
-****  
-****  
-  
-Finally, it might be helpful to include a  
-"copyright disclaimer" from an employer or a  
-school if you work as a programmer or if it seems like your  
-employer or school might be able to make an argument for  
-ownership of your code later on. These aren't often needed but  
-there are plenty of free software developers who have gotten  
-into trouble and wish they'd asked for one.  
-  
-  
-****  
-  
-  
-----  
-!2.3.3. Final license warning  
-  
- Please, please, please, place your software under  
-''some'' license. It may not seem important, and  
-to you it may not be, but licenses ''are''  
-important. For a piece of software to be included in the Debian  
-GNU/Linux distribution, it must have a license that fits the  
-Debian Free  
-Software Guidelines. If your software has no license, it  
-can not be distributed as a package in Debian until you  
-re-release it under a free license. Please save yourself and  
-others trouble by releasing the first version of your software  
-with a clear license.  
-  
-  
-----  
-!!2.4. Choosing a Method of Version Numbering  
-  
- ''The most important thing about a system of version  
-numbering is that there is one.'' It may seem pedantic to  
-emphasize this point but you'd be surprised at the number of  
-scripts and small programs that pop up without any version number  
-at all.  
-  
-  
-  
-  
- ''The second most important thing about a system of  
-numbering is that the numbers always go up.'' Automatic  
-version tracking systems and people's sense of order in the  
-universe will fall apart if version numbers don't rise. It doesn't  
-''really'' matter if 2.1 is a big jump and  
-2..005 is a small jump but it does matter that 2.1 is more recent  
-than 2..005.  
-  
-  
-  
-  
- Follow these two simple rules and you will not go (too)  
-wrong. Beyond this, the most common technique seems to be the  
-"major level," "minor level,"  
-"patch level" version numbering scheme. Whether you  
-are familiar with the name or not, you interact with it all the  
-time. The first number is the major number and it signifies major  
-changes or rewrites. The second number is the minor number and it  
-represents added or tweaked functionality on top of a largely  
-coherent structure. The third number is the patch number and it  
-usually will only refer to releases fixing bugs.  
-  
-  
-  
-  
- The widespread use of this scheme is why I know the nature and  
-relative degree in the differences between a 2.4.12 release of the  
-Linux kernel and a 2.4.11, 2.2.12, and 1.2.12 without knowing  
-anything about any of the releases.  
-  
-  
-  
-  
- You can bend or break these rules, and people do. But beware, if  
-you choose to, someone will get annoyed, assume you don't know,  
-and try and educate you, probably not nicely. I always follow this  
-method and I implore you to do so as well.  
-  
-  
-  
-  
- There are several version numbering systems that are well known,  
-useful, and that might be worth looking into before you release  
-your first version.  
-  
-  
-  
-  
-  
-  
-; Linux kernel version numbering::  
-  
-The Linux kernel uses a versioning system where any odd  
-minor version number refers to an development or testing release  
-and any even minor version number refers to a stable  
-version. Think about it for a second. Under this system, 2.1 and  
-2.3 kernels were and always will be development or testing  
-kernels and 2., 2.2. and 2.4 kernels are all production code  
-with a higher degree of stability and more testing.  
-  
-  
-  
-  
- Whether you plan on having a split development model (as  
-described in Section 3.3) or only one version  
-released at a time, my experience with several free software  
-projects and with the Debian project has taught me that use of  
-Linux's version numbering system is worth taking into  
-consideration. In Debian, ''all'' minor  
-versions are stable distributions (2., 2.1, etc). However,  
-many people assume that 2.1 is an unstable or development  
-version and continue to use an older version until they get so  
-frustrated with the lack of development progress that they  
-complain and figure the system out. If you never release an odd  
-minor version but only release even ones, nobody is hurt, and  
-less people are confused. It's an idea worth taking into  
-consideration.  
-  
-  
-; Wine version numbering::  
-  
-Because of the unusual nature of wine's development where  
-the not-emulator is constantly improving but not working toward  
-any immediately achievable goal, wine is released every three  
-weeks. Wine does this by labeling their releases in "Year  
-Month Day" format where each release might be labeled  
-"wine-XXXXXXXX" where the version from January 04,  
-2000 would be "wine-20000104". For certain  
-projects, "Year Month Day" format can make a lot of  
-sense.  
-  
-  
-; Mozilla milestones::  
-  
-When one considers Netscape 6 and vendor versions, the  
-mozilla's project development structure is one of the most  
-complex free software models available. The project's version  
-numbering has reflected the unique situation in which it is  
-developed.  
-  
-  
-  
-  
- Mozilla's version numbering structure has historically been  
-made up of milestones. From the beginning of the mozilla  
-project, the goals of the project in the order and degree to  
-which they were to be achieved were charted out on a series of  
-road  
-maps. Major points and achievements along these  
-road-maps were marked as milestones. Therefore, although  
-Mozilla was built and distributed nightly as "nightly  
-builds," on a day when the goals of a milestone on the  
-road-map had been reached, that particular build was marked as  
-a "milestone release."  
-  
-  
-  
-  
- While I haven't seen this method employed in any other projects  
-to date, I like the idea and think that it might have value in  
-any testing or development branch of a large application under  
-heavy development.  
-  
-  
-----  
-!!2.5. Documentation  
-  
- A huge number of otherwise fantastic free software applications  
-have withered and died because their author was the only person  
-who knew how to use them fully. Even if your program is written  
-primarily for a techno-savvy group of users, documentation is  
-helpful and even necessary for the survival of your project. You  
-will learn later in Section 4.3 that you should  
-always release something that is usable. ''A piece of  
-software without documentation is not usable.''  
-  
-  
-  
-  
- There are lots of different people you should document for and  
-there are lots of ways to document your project. ''The  
-importance of documentation in source code to help facilitate  
-development by a large community is vital'' but it falls  
-outside the scope of this HOWTO. This being the case, this section  
-deals with useful tactics for user-directed documentation.  
-  
-  
-  
-  
- A combination of tradition and necessity has resulted in a  
-semi-regular system of documentation in most free software  
-projects that is worth following. Both users and developers expect  
-to be able to get documentation in several ways and it's essential  
-that you provide the information they are seeking in a form they  
-can read if your project is ever going to get off the  
-ground. People have come to expect:  
-  
-  
-----  
-!2.5.1. Man pages  
-  
-Your users will want to be able to type "man  
-yourprojectname" end up with a nicely formatted man page  
-highlighting the basic use of your application. Make sure that  
-before you release your program, you've planned for this.  
-  
-  
-  
-  
- Man pages are not difficult to write. There is excellent  
-documentation on the man page writing process available through  
-the "The Linux Man-Page-HOWTO" which is available  
-through the Linux Documentation project (LDP)  
-and is written by Jens Schweikhardt. It is available from  
-Schweikhardt's site or from the  
-LDP.  
-  
-  
-  
-  
- It is also possible to write man pages using !DocBook  
-SGML. Because man pages are so simple and the !DocBook method  
-relatively new, I have not been able to follow this up but would  
-love help from anyone who can give me more information on how  
-exactly how this is done.  
-  
-  
-----  
-!2.5.2. Command line accessible documentation  
-  
- Most users will expect some basic amount of documentation to be  
-easily available from the command line. For few programs should  
-this type of documentation extend for more than one screen (24 or  
-25 lines) but it should cover the basic usage, a brief (one or  
-two sentence) description of the program, a list of the commands  
-with explanations, as well as all the major options (also with  
-explanations), plus a pointer to more in-depth documentation for  
-those who need it. The command line documentation for Debian's  
-apt-get serves as an excellent example and a useful model:  
-  
-  
-  
-apt .3.19 for i386 compiled on May 12 2000 21:17:27  
-Usage: apt-get [[options] command  
-apt-get [[options] install pkg1 [[pkg2 ...]  
-apt-get is a simple command line interface for downloading and  
-installing packages. The most frequently used commands are update  
-and install.  
-Commands:  
-update - Retrieve new lists of packages  
-upgrade - Perform an upgrade  
-install - Install new packages (pkg is libc6 not libc6.deb)  
-remove - Remove packages  
-source - Download source archives  
-dist-upgrade - Distribution upgrade, see apt-get(8)  
-dselect-upgrade - Follow dselect selections  
-clean - Erase downloaded archive files  
-autoclean - Erase old downloaded archive files  
-check - Verify that there are no broken dependencies  
-Options:  
--h This help text.  
--q Loggable output - no progress indicator  
--qq No output except for errors  
--d Download only - do NOT install or unpack archives  
--s No-act. Perform ordering simulation  
--y Assume Yes to all queries and do not prompt  
--f Attempt to continue if the integrity check fails  
--m Attempt to continue if archives are unlocatable  
--u Show a list of upgraded packages as well  
--b Build the source package after fetching it  
--c=? Read this configuration file  
--o=? Set an arbitary configuration option, eg -o dir::cache=/tmp  
-See the apt-get(8), sources.list(5) and apt.conf(5) manual  
-pages for more information and options.  
-  
-  
- It has become a GNU convention to make this type of information  
-accessible with the "-h" and the  
-"--help" options. Most GNU/Linux users will expect  
-to be able to retrieve basic documentation these ways so if you  
-choose to use different methods, be prepared for the flames and  
-fallout that may result.  
-  
-  
-----  
-!2.5.3. Files users will expect  
-  
- In addition to man pages and command-line help, there are certain  
-files where people will look for documentation, especially in any  
-package containing source code. In a source distribution, most of  
-these files can be stored in the root directory of the source  
-distribution or in a subdirectory of the root called  
-"doc" or "Documentation." Common files  
-in these places include:  
-  
-  
-  
-  
-  
-  
-  
-  
-; README or Readme:  
-  
-A document containing all the basic installation,  
-compilation, and even basic use instructions that make up the  
-bare minimum information needed to get the program up and  
-running. A README is not your chance to be verbose but should  
-be concise and effective. An ideal README is at least 30 lines  
-long and more no more than 250.  
-  
-; INSTALL or Install:  
-  
-The INSTALL file should be much shorter than the README  
-file and should quickly and concisely describe how to build  
-and install the program. Usually an INSTALL file simply  
-instructs the user to run "./configure; make; make  
-install" and touches on any unusual options or actions  
-that may be necessary. For most relatively standard install  
-procedures and for most programs, INSTALL files are as short  
-as possible and are rarely over 100 lines.  
-  
-; CHANGELOG, Changelog, !ChangeLog, or changelog:  
-  
-A CHANGELOG is a simple file that every well-managed  
-free software project should include. A CHANGELOG is simple  
-the file that, as its name implies, logs or documents the  
-changes you make to your program. The most simple way to  
-maintain a CHANGELOG is to simply keep a file with the source  
-code for your program and add a section to the top of the  
-CHANGELOG with each release describing what has been changed,  
-fixed, or added to the program. It's a good idea to post the  
-CHANGELOG onto the website as well because it can help people  
-decide whether they want or need to upgrade to a newer version  
-or wait for a more significant improvement.  
-  
-; NEWS:  
-  
-A NEWS file and a !ChangeLog are similar. Unlike a  
-CHANGELOG, a NEWS file is not typically updated with new  
-versions. Whenever new features are added, the developer  
-responsible will make a note in the NEWS file. NEWS files  
-should not have to be changed before a release (they should be  
-kept up to date all along) but it's usually a good idea to  
-check first anyway because often developers just forget to  
-keep them as current as they should.  
-  
-; FAQ:  
-  
-For those of you that don't already know,  
-FAQ stands for Frequently Asked Questions  
-and a FAQ is a collection of exactly that. FAQs are not  
-difficult to make. Simply make a policy that if you are asked  
-a question or see a question on a mailing list two or more  
-times, add the question (and its answer) to your FAQ. FAQs are  
-more optional than the files listed above but they can save  
-your time, increase usability, and decrease headaches on all  
-sides.  
-  
-  
-  
-  
-----  
-!2.5.4. Website  
-  
- It's only indirectly an issue of documentation but a good website  
-is quickly becoming an essential part of any free software  
-project. Your website should provide access to your documentation  
-(in HTML if possible). It should also include  
-a section for news and events around your program and a section  
-that details the process of getting involved with development or  
-testing and make an open invitation. It should also supply links  
-to any mailing lists, similar websites, and provide a direct link  
-to all the available ways of downloading your software.  
-  
-  
-----  
-!2.5.5. Other documentation hints  
-  
-  
-  
-  
-****  
-  
- All your documentation should be in plaintext, or, in cases  
-where it is on your website primarily, in HTML. Everyone can  
-cat a file, everyone has a pager, (almost) everyone can render  
-HTML. ''You are welcome to distribute information in  
-PDF, !PostScript, RTF, or any number of other widely used  
-formats but this information must also be available in  
-plaintext or HTML or people will be very angry at  
-you.'' In my opinion, info falls into this category  
-as well. There is plenty of great GNU documentation that  
-people simply don't read because it only in info. And this  
-''does'' make people angry. It's not a  
-question of superior formats; it is a question of  
-accessability and the status quo plays a huge role in this  
-determination.  
-  
-  
-  
-****  
-****  
-  
- It doesn't hurt to distribute any documentation for your  
-program from your website (FAQs etc) with your program. Don't  
-hesitate to throw any of this in the program's tarball. If  
-people don't need it, they will delete it. I can repeat it over  
-and over: ''Too much documentation is not a  
-sin.''  
-  
-  
-  
-****  
-****  
-  
-Unless your software is particular to a non-English  
-language (a Japanese language editor for example), please  
-distribute it with English language documentation. If you don't  
-speak English or not not confident in your skills, ask a friend  
-for help. Like it or not, fair or unfair, ''English is  
-the language of free software''. However, this does not  
-mean you should limit your documentation to only English. If you  
-speak another language, distribute translations of documentation  
-with your software if you have the time and energy to do  
-so. They will invariably be useful to someone.  
-  
-  
-****  
-****  
-  
- Finally, ''please spell-check your  
-documentation.'' Misspellings in documentation are  
-bugs. I'm very guilty of committing this error and it's  
-extremely easy to do. If English is not your first language,  
-have a native speaker look over or edit your documentation or  
-web pages. Poor spelling or grammar goes a long way to making  
-your code look unprofessional. In code comments, this type of  
-thing is less important but in man pages and web pages these  
-mistakes are not acceptable.  
-  
-  
-  
-****----  
-!!2.6. Other Presentation Issues  
-  
- Many of the remaining issues surrounding the creation of a new  
-free software program fall under what most people describe as  
-common sense issues. Its often said that software engineering is  
-90 percent common sense combined with 10 percent specialized  
-knowledge. Still, they are worth noting briefly in hopes that they  
-may remind a developer of something they may have forgotten.  
-  
-  
-----  
-!2.6.1. Package File Names  
-  
- I agree with ESR when he says that: " It's helpful to  
-everybody if your archive files all have GNU-like names --  
-all-lower-case alphanumeric stem prefix, followed by a dash,  
-followed by a version number, extension, and other  
-suffixes." There is more info (including lots of examples  
-of what ''not'' to do in his ''Software  
-Release Practices HOWTO'' which is included in this  
-HOWTO's bibliography and can be found through the LDP.  
-  
-  
-----  
-!2.6.2. Package formats  
-  
- Package formats may differ depending on the system you are  
-developing for. For windows based software, Zip archives (.zip)  
-usually serve as the package format of choice. If you are  
-developing for GNU/Linux, *BSD, or any UN*X, make sure that your  
-source code is always available in tar'ed and gzip'ed format  
-(.tar.gz). UNIX compress (.Z) has gone out of style and  
-usefulness and faster computers have brought bzip2 (.bz2) into  
-the spot-light as a more effective compression medium. I now make  
-all my releases available in both gzip'ed and bzip2'ed tarballs.  
-  
-  
-  
-  
- Binary packages should always be distribution specific. If you  
-can build binary packages against a current version of a major  
-distribution, you will only make your users happy. Try to foster  
-relationships with users or developers of large distributions to  
-develop a system for the consistent creation of binary  
-packages. It's often a good idea to provide !RedHat  
-RPM's (.rpm), Debian deb's (.deb) and source  
-RPM's SRPM's if  
-possible. Remember: ''While these binaries packages are  
-nice, getting the source packaged and released should always be  
-your priority. Your users or fellow developers can and will do  
-the the binary packages for you.''  
-  
-  
-----  
-!2.6.3. Version control systems  
-  
- A version control system can make a lot of these problems of  
-packaging (and a lot of other problems mentioned in this HOWTO)  
-less problematic. If you are using *NIX, CVS is your best bet. I  
-recommend Karl Fogel's book on the subject (and the posted HTML version)  
-wholeheartedly.  
-  
-  
-  
-  
- CVS or not, you should probably invest some time into learning  
-about a version control system because it provides an automated  
-way of solving many of the problems described by this HOWTO. I  
-am not aware of any free version control systems for Windows or  
-Mac OS but I know that CVS clients exist for both  
-platforms. Websites like !SourceForge do a great job  
-as well with a nice, easy-to-use web interface to CVS.  
-  
-  
-  
-  
- I'd love to devote more space in this HOWTO to CVS because I love  
-it (I even use CVS to keep versions straight on this HOWTO!) but  
-I think it falls outside the scope of this document and already  
-has its own HOWTOs. Most notably is the ''CVS Best  
-Practices HOWTO''[[CVSBESTPRACTICES]  
-which I've included in the attached bibliography.  
-  
-  
-----  
-!2.6.4. Useful tidbits and presentation hints  
-  
- Other useful hints include:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- ''Make sure that your program can always be found in a  
-single location.'' Often this means that you have a  
-single directory accessible via FTP or the  
-web where the newest version can be quickly recognized. One  
-effective technique is a provide a symlink called  
-"yourprojectname-latest" that is always pointing  
-to the most recent released or development version of your  
-free software application. Keep in mind that this location  
-will receive many requests for downloads around releases so  
-make sure that the server you choose has adequate bandwidth.  
-  
-  
-  
-****  
-****  
-  
- ''Make sure that there is a consistent email address  
-for bug reports.'' It's usually a good idea to make  
-this something that is NOT your primary email address like  
-yourprojectname@host or yourprojectname-bugs@host. This way,  
-if you ever decide to hand over maintainership or if your  
-email address changes, you simply need to change where this  
-email address forwards. It also will allow for more than one  
-person to deal with the influx of mail that is created if your  
-project becomes as huge as you hope it will.  
-  
-  
-  
-****  
-  
-  
-----  
-!!!3. Maintaining a Project: Interacting with Developers  
-  
- Once you have gotten your project started, you have overcome the  
-most difficult hurdles in the development process of your  
-program. Laying a firm foundation is essential, but the development  
-process itself is equally important and provides just as many  
-opportunities for failure. In the next two sections, I will  
-describe running a project by discussing how to maintain a  
-development effort through interactions with developers and with  
-users.  
-  
-  
-  
-  
- In releasing your program, your program becomes free software. This  
-transition is more than just a larger user base. By releasing your  
-program as free software, ''your'' software  
-becomes the ''free software community's''  
-software. The direction of your software's development will be  
-reshaped, redirected, and fully determined by your users and, to a  
-larger extent, by other developers in the community.  
-  
-  
-  
-  
- The major difference between free software development and  
-propriety software development is the developer base. As the leader  
-of a free software project, you need to attract and keep developers  
-in a way that leaders of proprietary software projects simply don't  
-have to worry about. ''As the person leading development of  
-a free software project, you must harness the work of fellow  
-developers by making responsible decisions and by responsibly  
-choosing not to make decisions. You have to direct developers  
-without being overbearing or bossy. You need to strive to earn  
-respect and never forget to give it out.''  
-  
-  
-----  
-!!3.1. Delegating Work  
-  
- By now, you've hypothetically followed me through the early  
-programming of a piece of software, the creation of a website and  
-system of documentation, and we've gone ahead and (as will be  
-discussed in Section 4.3) released it to the rest  
-of the world. Times passes, and if things go well, people become  
-interested and want to help. The patches begin flowing in.  
-  
-  
-  
-  
- ''Like the parent of any child who grows up, it's now time  
-to wince, smile and do most difficult thing in any parents  
-life: It's time to let go.''  
-  
-  
-  
-  
- Delegation is the political way of describing this process of  
-"letting go." It is the process of handing some of  
-the responsibility and power over your project to other  
-responsible and involved developers. It is difficult for anyone  
-who has invested a large deal of time and energy into a project  
-but it essential for the growth of any free software project. One  
-person can only do so much. A free software project is nothing  
-without the involvement of ''a group'' of  
-developers. A group of developers can only be maintained through  
-respectful and responsible leadership and delegation.  
-  
-  
-  
-  
- As your project progresses, you will notice people who are putting  
-significant amounts of time and effort into your project. These  
-will be the people submitting the most patches, posting most on  
-the mailing lists, and engaging in long email discussions. It is  
-your responsibility to contact these people and to try and shift  
-some of the power and responsibility of your position as the  
-project's maintainer onto them (if they want it). There are  
-several easy ways you can do this:  
-  
-  
-  
-  
- In a bit of a disclaimer, delegation need not mean rule by  
-committee. In many cases it does and this has been proven to  
-work. In other cases this has created problems. Managing  
-Projects the Open Source Way argues that "OSS  
-projects do best when one person is the clear leader of a team and  
-makes the big decisions (design changes, release dates, and so  
-on)." I think this often true but would urge developers to  
-consider the ideas that the project leader need not be the  
-project's founder and that these important powers need not all rest  
-with one person but that a release manager may be different than a  
-lead developer. These situations are tricky politically so  
-be careful and make sure it's necessary before you go around  
-empowering people.  
-  
-  
-----  
-!3.1.1. How to delegate  
-  
- You may find that other developers seem even more experienced or  
-knowledgeable than you. Your job as a maintainer does not mean  
-you have to be the best or the brightest. It means you  
-are responsible for showing good judgment and for  
-recognizing which solutions are maintainable and which are not.  
-  
-  
-  
-  
- Like anything, its easier to watch others delegate than to do it  
-yourself. In a sentence: ''Keep an eye out for other  
-qualified developers who show an interest and sustained  
-involvement with your project and try and shift responsibility  
-toward them.'' The following ideas might be good places  
-to start or good sources of inspiration:  
-  
-  
-----__3.1.1.1. Allow a larger group of people to have write access to your CVS  
-repository and make real efforts toward rule by a  
-committee__  
-  
- Apache is an  
-example of a project that is run by small group of developers  
-who vote on major technical issues and the admission of new  
-members and all have write access to the main source  
-repository. Their process is detailed online.  
-  
-  
-  
-  
- The Debian Project  
-is an extreme example of rule by committee. At current count,  
-more than 700 developers have full responsibility for  
-aspects of the project. All these developers can upload into  
-the main FTP server, and vote on major issues. Direction for  
-the project is determined by the project's social  
-contract and a constitution. To  
-facilitate this system, there are special teams (i.e. the  
-install team, the Japanese language team) as well as a technical  
-committee and a project leader. The leader's main responsibility  
-is to, "appoint delegates or delegate decisions to the  
-Technical Committee."  
-  
-  
-  
-  
- While both of these projects operate on a scale that your  
-project will not (at least initially), their example is  
-helpful. Debian's idea of a project leader who can do  
-''nothing'' but delegate serves as a  
-caricature of how a project can involve and empower a huge  
-number of developers and grow to a huge size.  
-  
-  
-----__3.1.1.2. Publicly appoint someone as the release manager for a  
-specific release__  
-  
- A release manager is usually responsible for coordinating  
-testing, enforcing a code freeze, being responsible for  
-stability and quality control, packaging up the software, and  
-placing it in the appropriate places to be downloaded.  
-  
-  
-  
-  
- This use of the release manager is a good way to give yourself a  
-break and to shift the responsibility for accepting and  
-rejecting patches onto someone else. It is a good way of very  
-clearly defining a chunk of work on the project as belonging to  
-a certain person and its a great way of giving yourself room to  
-breath.  
-  
-  
-----__3.1.1.3. Delegate control of an entire branch__  
-  
- If your project chooses to have branches (as described in Section 3.3), it might be a good idea to appoint someone  
-else to be the the head of a branch. If you like focusing your  
-energy on development releases and the implementation of new  
-features, hand total control over the stable releases to a  
-well-suited developer.  
-  
-  
-  
-  
- The author of Linux, Linus Torvalds, came out and crowned Alan  
-Cox as "the man for stable kernels." All patches  
-for stable kernels go to Alan and, if Linus were to be taken  
-away from work on Linux for any reason, Alan Cox would be more  
-than suited to fill his role as the acknowledged heir to the  
-Linux maintainership.  
-  
-  
-----  
-!!3.2. Accepting and Rejecting Patches  
-  
- This HOWTO has already touched on the fact that as the maintainer  
-of a free software project, one of your primary and most important  
-responsibilities will be accepting and rejecting patches submitted  
-to you by other developers.  
-  
-  
-----  
-!3.2.1. Encouraging Good Patching  
-  
-As the person managing or maintaining the project, you  
-aren't the person who is going to be making a lot of  
-patches. However, it's worth knowing about ESR's section on  
-''Good Patching Practice'' in the  
-''Software Release Practices HOWTO''[[ESRHOWTO]. I don't agree with ESR's claim that most ugly  
-or undocumented patches are probably worth throwing out at first  
-sight--this just hasn't been my experience, especially when  
-dealing with bug fixes that often don't come in the form of  
-patches at all. Of course, this doesn't mean that I  
-''like'' getting poorly done patches. If you get  
-ugly -e patches, if you get totally undocumented patches, and  
-especially if they are anything more than trivial bug-fixes, it  
-might be worth judging the patch by some of the criteria in ESR's  
-HOWTO and then throwing people the link to the document so they  
-can do it the "right way."  
-  
-  
-----  
-!3.2.2. Technical judgment  
-  
- In ''Open Source Development with CVS'', Karl  
-Fogel makes a convincing argument that the most important things  
-to keep in mind when rejecting or accepting patches are:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-A firm knowledge of the scope of your program (that's the  
-"idea" I talked about in Section 2.1);  
-  
-  
-****  
-****  
-  
-The ability to recognize, facilitate, and direct  
-"evolution" of your program so that the program  
-can grow and change and incorporate functionality that was  
-originally unforeseen;  
-  
-  
-****  
-****  
-  
-The necessity to avoid digressions that might expand the  
-scope of the program too much and result and push the project  
-toward an early death under its own weight and  
-unwieldiness.  
-  
-  
-****  
-  
-  
-  
-  
- These are the criteria that you as a project maintainer should  
-take into account each time you receive a patch.  
-  
-  
-  
-  
- Fogel elaborates on this and states the "the  
-questions to ask yourself when considering whether to implement  
-(or approve) a change are:"  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-Will it benefit a significant percentage of the program's  
-user community?  
-  
-  
-****  
-****  
-  
-Does it fit within the program's domain or within a  
-natural, intuitive extension of that domain?  
-  
-  
-****  
-  
-  
-  
-  
- The answers to these questions are never straightforward and its  
-very possible (and even likely) that the person who submitted the  
-patch may feel differently about the answer to these questions  
-than you do. However, if you feel that that the answer to either  
-of those questions is "no," it is your responsibility  
-to reject the change. If you fail to do this, the project will  
-become unwieldy and unmaintainable and many ultimately fail.  
-  
-  
-----  
-!3.2.3. Rejecting patches  
-  
- Rejecting patches is probably the most difficult and sensitive  
-job that the maintainer of any free software project has to  
-face. But sometimes it has to be done. I mentioned earlier (in  
-Section 3 and in Section 3.1)  
-that you need to try and balance your responsibility and power to  
-make what you think are the best technical decisions with the  
-fact that you will lose support from other developers if you seem  
-like you are on a power trip or being overly bossy or possessive  
-of the community's project. I recommend that you keep these three  
-major concepts in mind when rejecting patches (or other changes):  
-  
-  
-----__3.2.3.1. Bring it to the community__  
-  
- One of the best ways of justifying a decision to reject a patch  
-and working to not seem like you keep an iron grip on your  
-project is by not making the decision alone at all. It might  
-make sense to turn over larger proposed changes or more  
-difficult decisions to a development mailing list where they can  
-be discussed and debated. There will be some patches (bug fixes,  
-etc.) which will definitely be accepted and some that you feel  
-are so off base that they do not even merit further  
-discussion. It is those that fall into the gray area between  
-these two groups that might merit a quick forward to a mailing  
-list.  
-  
-  
-  
-  
- I recommend this process wholeheartedly. As the project  
-maintainer you are worried about making the best decision for  
-the project, for the project's users and developers, and for  
-yourself as a responsible project leader. Turning things over to  
-an email list will demonstrate your own responsibility and  
-responsive leadership as it tests and serves the interests of  
-your software's community.  
-  
-  
-----__3.2.3.2. Technical issues are not always good justification__  
-  
- Especially toward the beginning of your project's life, you  
-will find that many changes are difficult to implement,  
-introduce new bugs, or have other technical problems. Try to see  
-past these. Especially with added functionality, good ideas do  
-not always come from good programmers. Technical merit is a  
-valid reason to postpone an application of a patch but it is not  
-always a good reason to reject a change outright. Even small  
-changes are worth the effort of working with the developer  
-submitting the patch to iron out bugs and incorporate the change  
-if you think it seems like a good addition to your project. The  
-effort on your part will work to make your project a community  
-project and it will pull a new or less experienced developer  
-into your project and even teach them something that might help  
-them in making their next patch.  
-  
-  
-----__3.2.3.3. Common courtesy__  
-  
- It should go without saying but, ''above all and in all  
-cases, just be nice.'' If someone has an idea and cares  
-about it enough to write some code and submit a patch, they  
-care, they are motivated, and they are already involved. Your  
-goal as the maintainer is make sure they submit again. They may  
-have thrown you a dud this time but next time may be the idea or  
-feature that revolutionizes your project.  
-  
-  
-  
-  
- It is your responsibility to first justify your choice to not  
-incorporate their change clearly and concisely. Then thank  
-them. Let them know that you a appreciate their help and feel  
-horrible that you can't incorporate their change. Let them know  
-that you look forward to their staying involved and you hope  
-that the next patch or idea meshes better with your project  
-because you appreciate their work and want to see it in your  
-application. If you have ever had a patch rejected after putting  
-a large deal of time, thought, and energy into it, you remember  
-how it feels and it feels bad. Keep this in mind when you have  
-to let someone down. It's never easy but you need to do  
-everything you can to make it as not-unpleasant as possible.  
-  
-  
-----  
-!!3.3. Stable and Development Branches  
-  
- The idea of stable and development branches has already been  
-described briefly in Section 2.4 and in  
-Section 3.1.1.3. These allusions attest to some of  
-the ways that multiple branches can affect your software. Branches  
-can let you avoid (to some extent) some of the problems around  
-rejecting patches (as described in Section 3.2) by  
-allowing you to temporarily compromise the stability of your  
-project without affecting those users who need that stability.  
-  
-  
-  
-  
- The most common way of branching your project is to have one  
-branch that is stable and one that is for development. This is the  
-model followed by the Linux kernel that is described in Section 2.4. In this model, there is  
-''always'' one branch that is stable and always  
-one that is in development. Before any new release, the  
-development branch goes into a "feature freeze" as  
-described in Section 3.4.1 where major changes and  
-added features are rejected or put on hold under the development  
-kernel is released as the new stable branch and major development  
-resumes on the development branch. Bug fixes and small changes  
-that are unlikely to have any large negative repercussions are  
-incorporated into the stable branch as well as the development  
-branch.  
-  
-  
-  
-  
- Linux's model provides an extreme example. On many projects, there is no  
-need to have two versions constantly available. It may make sense to  
-have two versions only near a release. The Debian project has  
-historically made both a stable and an unstable distribution  
-available but has expanded to this to include: stable, unstable,  
-testing, experimental, and (around release time) a frozen  
-distribution that only incorporates bug fixes during the  
-transition from unstable to stable. There are few projects whose  
-size would necessitate a system like Debian's but this use of  
-branches helps demonstrate how they can be used to balance  
-consistent and effective development with the need to make regular  
-and usable releases.  
-  
-  
-  
-  
- In trying to set up a development tree for yourself, there are  
-several things that might be useful to keep in mind:  
-  
-  
-  
-  
-  
-  
-  
-  
-; Minimize the number of branches:  
-  
-Debian may be able to make good use of four or five  
-branches but it contains gigabytes of software in over 5000  
-packages compiled for 5-6 different architectures. For you,  
-two is probably a good ceiling. Too many branches will confuse  
-your users (I can't count how many times I had to describe  
-Debian's system when it only had 2 and sometimes 3 branches!),  
-potential developers and even yourself. Branches can help but  
-they come at a cost so use them very sparingly.  
-  
-; Make sure that all your different branches are explained:  
-  
-As I mentioned in the preceding paragraph, different  
-branches ''will'' confuse your users. Do  
-everything you can to avoid this by clearly explaining the  
-different branches in a prominent page on your website and in a  
-README file in the FTP or  
-web directory.  
-  
-  
-  
- I might also recommend against a mistake that I think Debian  
-has made. The terms "unstable,"  
-"testing," and "experimental" are  
-vague and difficult to rank in order of stability (or  
-instability as the case may be). Try explaining to someone  
-that "stable" actually means "ultra  
-stable" and that "unstable" doesn't  
-actually include any unstable software but is really stable  
-software that is untested as a distribution.  
-  
-  
-  
-  
- If you are going to use branches, especially early on, keep in  
-mind that people are conditioned to understand the terms  
-"stable" and "development" and you  
-probably can't go wrong with this simple and common division of  
-branches.  
-  
-  
-; Make sure all your branches are always available:  
-  
-Like a lot of this document, this should probably should  
-go without saying but experience has taught me that it's not  
-always obvious to people. It's a good idea to physically split  
-up different branches into different directories or directory  
-trees on your FTP or web site. Linux  
-accomplishes this by having kernels in a v2.2 and a v2.3  
-subdirectory where it is immediately obvious (after you know  
-their version numbering scheme) which directory is for the most  
-recent stable and the current development releases. Debian  
-accomplishes this by naming all their distribution with names  
-(i.e. woody, potato, etc.) and then changing symlinks named  
-"stable," "unstable" and  
-"frozen" to point to which ever distribution (by  
-name) is in whatever stage. Both methods work and there are  
-others. In any case, it is important that different branches  
-are always available, are accessible from consistent locations,  
-and that different branches are clearly distinguished from each  
-other so your users know exactly what they want and where to  
-get it.  
-  
-  
-  
-  
-----  
-!!3.4. Other Project Management issues  
-  
- There are more issues surrounding interaction with developers in a  
-free software project that I can not touch on in great detail in a  
-HOWTO of this size and scope. Please don't hesitate to contact me if you see  
-any major omissions.  
-  
-  
-  
-  
- Other smaller issues that are worth mentioning are:  
-  
-  
-----  
-!3.4.1. Freezing  
-  
- For those projects that choose to adopt a split development model  
-(Section 3.3), freezing is a concept that is worth  
-becoming familiar with.  
-  
-  
-  
-  
- Freezes come in two major forms. A "feature freeze"  
-is a period when no significant functionality is added to a  
-program. It is a period where established functionality (even  
-skeletons of barely working functionality) can be improved and  
-perfected. It is a period where bugs are fixed. This type of  
-freeze is usually applied some period (a month or two) before a  
-release. It is easy to push a release back as you wait for  
-"one more feature" and a freeze helps to avoid this  
-situation by drawing the much needed line in the sand. It gives  
-developers room they need to get a program ready for release.  
-  
-  
-  
-  
- The second type of freeze is a "code freeze" which  
-is much more like a released piece of software. Once a piece of  
-software has entered a "code freeze," all changes to  
-the code are discouraged and only changes that fix known bugs  
-are permitted. This type of freeze usually follows a  
-"feature freeze" and directly precedes a  
-release. Most released software is in what could be interpreted  
-as a sort of high level "code freeze."  
-  
-  
-  
-  
- Even if you never choose to appoint a release manager (Section 3.1.1.2), you will have an easier time  
-justifying the rejection or postponement of patches (Section 3.2) before a release with a publicly stated  
-freeze in effect.  
-  
-  
-----  
-!!3.5. Forks  
-  
- I wasn't sure about how I would deal with forking in this  
-document (or if I would deal with forking at all). A fork is when  
-a group of developers takes code from a free software project and  
-actually starts a brand new free software project with it. The  
-most famous example of a fork was between Emacs and XEmacs. Both  
-emacsen are based on an identical code-base but for technical,  
-political, and philosophical reasons, development was split into  
-two projects which now compete with each other.  
-  
-  
-  
-  
- The short version of the fork section is, ''don't do  
-them.'' Forks force developers to choose one project to  
-work with, cause nasty political divisions, and redundancy of  
-work. Luckily, usually the threat of the fork is enough to scare  
-the maintainer or maintainers of a project into changing the way  
-they run their project.  
-  
-  
-  
-  
- In his chapter on "The Open Source Process," Karl  
-Fogel describes how to do a fork if you absolutely must. If you  
-have determined that is absolutely necessary and that the  
-differences between you and the people threatening to fork are  
-absolutely unresolvable, I recommend Fogel's book as a good place  
-to start.  
-  
-  
-----  
-!!!4. Maintaining a Project: Interacting with Users  
-  
- If you've worked your way up to here, congratulations, you are  
-nearing the end of this document. This final section describes some  
-of the situations in which you, in your capacity as project  
-maintainer, will be interacting with users. It gives some  
-suggestions on how these situations might be handled effectively.  
-  
-  
-  
-  
- Interacting with users is difficult. In our discussion of  
-interaction with developers, the underlying assumption is that in a  
-free software project, a project maintainer must constantly strive to  
-attract and keep developers who can easily leave at any time.  
-  
-  
-  
-  
- Users in the free software community are different than developers  
-and are also different than users in the world of proprietary  
-software and they should be treated differently than either  
-group. Some ways in which the groups differ significantly follow:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-The lines between users and developers are blurred in ways  
-that is totally foreign to any proprietary development  
-model. Your users are often your developers and vice  
-versa.  
-  
-  
-****  
-****  
-  
-In the free software world, you are often your users' only  
-choice. Because there is such an emphasis on not replicating the  
-work of others in the free software community and because the  
-element of competition present in the propriety software model is  
-absent (or at least in an extremely different form) in the free  
-software development model, you will probably be the only project  
-that does what you do (or at least the only one that does what  
-you do in the way that you do it). This means your responsiveness  
-to your users is even more important than in the proprietary  
-software world.  
-  
-  
-****  
-****  
-  
-In an almost paradoxical situation, free software projects  
-have less immediate or dire consequences for ignoring their users  
-altogether. It is also often easier to do. Because you don't  
-usually need to compete with another product, chances are good  
-that you will not be scrambling to gain the features of your  
-competitor's newest program. This means that your development  
-process will have to be directed either internally, by a  
-commitment to your users, or through both.  
-  
-  
-****  
-  
-  
-  
-  
- Trying to tackle this unique situation can only be done  
-indirectly. Developers and maintainers need to listen to users and  
-to try and be as responsive as possible. A solid knowledge of the  
-situation recounted above is any free software developer's best tool  
-for shifting his development or leadership style to fit the unique  
-process of free software project management. This chapters will try and  
-introduce some of the more difficult or important points in any  
-projects interactions with users and give some hints on how to  
-tackle these.  
-  
-  
-----  
-!!4.1. Testing and Testers  
-  
- In addition to your users being your developers, they are also  
-(and perhaps more commonly) your testers. Before I get flamed, I  
-should rephrase my sentence: ''some of your  
-users'' (those who explicitly volunteer) are your  
-testers.  
-  
-  
-  
-  
- It is important that this distinction be made early on because not  
-all of your users want to be testers. Many users want to use  
-stable software and don't care if they don't have the newest,  
-greatest software with the latest, greatest features. These users  
-except a stable, tested piece of software without major or obvious  
-bugs and will be angry if they find themselves testing. This is  
-yet another way in which a split development model (as mentioned  
-in Section 3.3) might come in handy.  
-  
-  
-  
-  
- "Managing  
-Projects the Open Source Way" describes what a  
-good test should look for:  
-  
-  
-  
-  
-  
-  
-; Boundary conditions:  
-  
-Maximum buffer lengths, data conversions, upper/lower  
-boundary limits, and so on.  
-  
-; Inappropriate behavior:  
-  
-Its a good idea to find out what a program will do if a  
-user hands it a value it isn't expecting, hits the wrong button,  
-etc. Ask yourself a bunch of "what if" questions  
-and think of anything that ''might'' fail or  
-''might'' go wrong and find out what your  
-program would do in those cases.  
-  
-; Graceful failure:  
-  
-The answer to a number of the "what if"  
-questions above is probably "failure" which is  
-often the only answer. Now make sure that it happens  
-nicely. Make sure that when it crashes, there is some indication  
-of why it crashed or failed so that the user or developer  
-understands whats going on.  
-  
-; Standards conformance:  
-  
-If possible, make sure your programs conforms to  
-standards. If it's interactive, don't be too creative with  
-interfaces. If it is non-interactive, make sure it communicates  
-over appropriate and established channels with other programs  
-and with the rest of the system.  
-  
-----  
-!4.1.1. Automated testing  
-  
- For many programs, many common mistakes can be caught by  
-automated means. Automated tests tend to be pretty good at  
-catching errors that you've run into several times before or  
-the things you just forget. They are not very good at finding  
-errors, even major ones, that are totally unforeseen.  
-  
-  
-  
-  
- CVS comes with a Bourne shell script called sanity.sh that is  
-worth looking at. Debian uses a program called lintian that  
-checks Debian packages for all of the most common errors. While  
-use of these scripts may not be helpful, there is a host of other  
-sanity checking software on the net that may be applicable (feel  
-free to email me any recommendations). None of these will create  
-a bug-free release but they will avoid at least some major  
-oversights. Finally, if your programs become a long term  
-endeavor, you will find that there are certain errors that you  
-tend to make over and over. Start a collection of scripts that  
-check for these errors to help keep them out of future releases.  
-  
-  
-----  
-!4.1.2. Testing by testers  
-  
- For any program that depends on user interactivity, many bugs  
-will only be uncovered through testing by users actually clicking  
-the keys and pressing the mouse buttons. For this you need  
-testers and as many as possible.  
-  
-  
-  
-  
- The most difficult part of testing is finding testers. It's  
-usually a good tactic to post a message to a relevant mailing  
-list or news group announcing a specific proposed release date  
-and outlining the functionality of your program. If you put some  
-time into the announcement, you are sure to get a few responses.  
-  
-  
-  
-  
- The second most difficult part of testing is  
-''keeping'' your testers and keeping them  
-actively involved in the testing process. Fortunately, there are  
-some tried and true tactics that can applied toward this end:  
-  
-  
-  
-  
-  
-  
-  
-  
-; Make things simple for your testers:  
-  
-Your testers are doing you a favor so make it as easy as  
-possible for them. This means that you should be careful to  
-package your software in a way that is easy to find, unpack,  
-install, and uninstall. This also means you should explain  
-what you are looking for to each tester and make the means for  
-reporting bugs simple and well established. The key is to  
-provide as much structure as possible to make your testers'  
-jobs easy and to maintain as much flexibility as possible for  
-those that want to do things a little differently.  
-  
-; Be responsive to your testers:  
-  
-When your testers submit bugs, respond to them and  
-respond quickly. Even if you are only responding to tell them  
-that the bug has already been fixed, quick and consistent  
-responses make them feel like their work is heard, important,  
-and appreciated.  
-  
-; Thank your testers:  
-  
-Thank them personally each time they send you  
-patch. Thank them publicly in the documentation and the about  
-section of your program. You appreciate your testers and your  
-program would not be possible without their help. Make sure  
-they know it. Publicly, pat them on the back to make sure the rest of  
-the world knows it too. It will be appreciated more than you  
-expected.  
-  
-  
-  
-  
-----  
-!!4.2. Setting up Support Infrastructure  
-  
- While testing is important, the large part of your interactions  
-and responsibility to your users falls under the category of  
-support. The best way to make sure your users are adequately  
-supported in using your program is to set up a good infrastructure  
-for this purpose so that your developers and users help each other  
-and less of the burden falls on you. This way, people will also  
-get quicker and better responses to their questions. This  
-infrastructure comes in several major forms:  
-  
-  
-----  
-!4.2.1. Documentation  
-  
- It should not come as any surprise that the key element to any  
-support infrastructure is good documentation. This topic was  
-largely covered in Section 2.5 and will not be  
-repeated here.  
-  
-  
-----  
-!4.2.2. Mailing lists  
-  
- Aside from documentation, effective mailing lists will be your  
-greatest tool in providing user support. Running a mailing list  
-well is more complicated than installing mailing list software  
-onto a machine.  
-  
-  
-----__4.2.2.1. Separate lists__  
-  
- A good idea is too separate your user and development mailing  
-lists (perhaps into project-user@host and project-devel@host)  
-and enforce the division. If people post a development question  
-onto -user, politely ask them to repost it onto -devel and vise  
-versa. Subscribe yourself to both groups and encourage all  
-primarily developers to do the same.  
-  
-  
-  
-  
- This system provides so that no one person is stuck doing all of  
-the support work and works so that users learn more about the  
-program, they can help newer users with their questions.  
-  
-  
-----__4.2.2.2. Choose mailing list software well__  
-  
- Please don't make the selection of mailing list software  
-impulsively. Please consider easy accessibility by users without  
-a lot of technical experience so you want to be as easy as  
-possible. Web accessibility to an archive of the list is also  
-important.  
-  
-  
-  
-  
- The two biggest free software mailing list programs are majordomo  
-and GNU Mailman. A  
-long time advocate of majordomo, I would now recommend any  
-project choose GNU Mailman. It fulfills the criteria listed  
-above and makes it easier. It provides a good mailing  
-list program for a free software project maintainer as opposed  
-to a good mailing list application for a mailing list  
-administrator.  
-  
-  
-  
-  
- There are other things you want to take into consideration in  
-setting up your list. If it is possible to gate your mailing  
-lists to Usenet and provide it in digest form as well as  
-making them accessible on the web, you will please some users  
-and work to make the support infrastructure slightly more  
-accessible.  
-  
-  
-----  
-!4.2.3. Other support ideas  
-  
- A mailing list and accessible documentation are far from all you  
-can do to set up good user support infrastructure. Be  
-creative. If you stumble across something that works well, email me  
-and I'll include it here.  
-  
-  
-----__4.2.3.1. Make your self accessible__  
-  
- You can not list too few methods to reach you. If you hang out  
-in an IRC channel, don't hesitate to list it  
-in your projects documentation. List email and snailmail  
-addresses, and ways to reach you via ICQ,  
-AIM, or Jabber if they apply.  
-  
-  
-----__4.2.3.2. Bug management software__  
-  
- For many large software projects, use of bug management software  
-is essential to keep track of which bugs have been fixed, which  
-bugs have not been fixed, and which bugs are being fixed by  
-which people. Debian uses the Debian Bug Tracking System  
-(BTS) although it may not be best choice for  
-every project (it seems to currently be buckling under its own  
-weight) As well as a damn good web browser, the Mozilla project  
-has spawned a sub-project resulting in a bug tracking system  
-called bugzilla  
-which has become extremely possible and which I like a lot.  
-  
-  
-  
-  
- These systems (and others like them) can be unwieldy so  
-developers should be careful to not spend more time on the bug  
-tracking system than on the bugs or the projects themselves. If  
-a project continues to grow, use of a bug tracking system can  
-provide an easy standard avenue for users and testers to report  
-bugs and for developers and maintainers to fix them and track  
-them in an orderly fashion.  
-  
-  
-----  
-!!4.3. Releasing Your Program  
-  
- As mentioned earlier in the HOWTO, the first rule of releasing is,  
-''release something useful.'' Non-working or  
-not-useful software will not attract anyone to your  
-project. People will be turned off of your project and will be likely  
-to simply gloss over it next time they see a new version  
-announced. Half-working software, if useful, will intrigue people,  
-whet their appetites for versions to come, and encourage them to  
-join the development process.  
-  
-  
-----  
-!4.3.1. When to release  
-  
- Making the decision to release your software for the first time  
-is an incredibly important and incredibly stressful decision. But  
-it needs to done. My advice is to try and make something that  
-is complete enough to be usable and incomplete enough to allow  
-for flexibility and room for imagination by your future  
-developers. It's not an easy decision. Ask for help on a local  
-Linux User Group mailing list or from a group of developer  
-friends.  
-  
-  
-  
-  
- One tactic is to first do an "alpha" or  
-"beta" release as described below in Section 4.3.3. However, most of the guidelines described  
-above still apply.  
-  
-  
-  
-  
- ''When you feel in your gut that it is time and you feel  
-you've weighed the situation well several times, cross your  
-fingers and take the plunge.''  
-  
-  
-  
-  
- After you've released for the first time, knowing when to release  
-becomes less stressful, but just as difficult to gauge. I like  
-the criteria offered by Robert Krawitz in his article, "Free  
-Software Project Management" for maintaining a  
-good release cycle. He recommends that you ask yourself,  
-"does this release..."  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-Contain sufficient new functionality or bug fixes to be  
-worth the effort.  
-  
-  
-****  
-****  
-  
-Be spaced sufficiently far apart to allow the user time  
-to work with the latest release.  
-  
-  
-****  
-****  
-  
-Be sufficiently functional so that the user can get work  
-done (quality).  
-  
-  
-****  
-  
-  
-  
-  
- If the answer is yes to all of these questions, its probably time  
-for a release. If in doubt, remember that asking for advice can't  
-hurt.  
-  
-  
-----  
-!4.3.2. How to release  
-  
- If you've followed the guidelines described in this HOWTO up  
-until this point, the mechanics of doing a release are going to  
-be the easy part of releasing. If you have set up consistent  
-distribution locations and the other infrastructure described in  
-the preceding sections, releasing should be as simple as building  
-the package, checking it once over, and uploading it into the  
-appropriate place and then making your website reflect the  
-change.  
-  
-  
-----  
-!4.3.3. Alpha, beta, and development releases  
-  
- When contemplating releases, it worth considering the fact that  
-not every release needs to be a full numbered release. Software  
-users are accustomed to pre-releases but you must be careful to  
-label these releases accurately or they will cause more problems then  
-they are worth.  
-  
-  
-  
-  
- The observation is often made that many free software developers  
-seem to be confused about the release cycle. "Managing  
-Projects the Open Source Way" suggests that you memorize  
-the phrase, "Alpha is not Beta. Beta is not Release"  
-and I'd agree that tis is a probably a good idea.  
-  
-  
-  
-  
-  
-  
-  
-  
-; alpha releases:  
-  
-Alpha software is feature-complete but sometimes only  
-partially functional.  
-  
-  
-  
-Alpha releases are expected to be unstable, perhaps a  
-little unsafe, but definitely usable. They  
-''can'' have known bugs and kinks that have  
-yet to be worked out. Before releasing an alpha, be sure to  
-keep in mind that ''alpha releases are still  
-releases'' and people are not going to be expecting a  
-nightly build from the CVS source. An alpha should work and  
-have minimal testing and bug fixing already finished.  
-  
-; beta releases:  
-  
-Beta software is feature-complete and functional, but is  
-in the testing cycle and still has a few bugs left to be  
-ironed out.  
-  
-  
-  
-Beta releases are general expected to be usable and  
-slightly unstable, although definitely ''not  
-unsafe.'' Beta releases usually preclude a full  
-release by under a month. They can contain small known bugs  
-but no major ones. All major functionality should be fully  
-implemented although the exact mechanics can still be worked  
-out. Beta releases are great tool to whet the appetites of  
-potential users by giving them a very realistic view of where  
-your project is going to be in the very near future and can  
-help keep interest by giving people  
-''something.''  
-  
-; development releases:  
-  
-"Development release" is much a more vague  
-term than "alpha" or "beta". I  
-usually choose to reserve the term for discussion of a  
-development branch although there are other ways to use the  
-term. So many in fact, that I feel the term has been  
-cheapened. The popular window manager Enlightenment has  
-released ''nothing but'' development  
-releases. Most often, the term is used to describe releases  
-that are not even alpha or beta and if I were to release a  
-pre-alpha version of a piece of software in order to keep  
-interest in my project alive, this is probably how I would  
-have to label it.  
-  
-  
-  
-  
-----  
-!!4.4. Announcing Your Project  
-  
- Well, you've done it. You've (at least for the purposes of this  
-HOWTO) designed, built, and released your free software  
-project. All that is left is for you to tell the world so they  
-know to come and try it out and hopefully jump on board with  
-development. If everything is in order as described above, this  
-will be a quick and painless process. A quick announcement is all  
-that it takes to put yourself on the free software community's  
-radar screen.  
-  
-  
-----  
-!4.4.1. Mailing lists and Usenet  
-  
-Announce your software on Usenet's comp.os.linux.announce. If  
-you only announce your software in two places, have it be c.o.l.a  
-and freshmeat.  
-  
-  
-  
- However, email is still the way that most people on the Internet  
-get their information. Its a good idea to send a message  
-announcing your program to any relevant mailing list you know of  
-and any other relevant Usenet discussion groups.  
-  
-  
-  
-Karl Fogel recommends that use you simple subject  
-describing the fact that the message is an announcement, the name  
-of the program, the version, and a half-line long description of  
-its functionality. This way, any interested user or developer  
-will be immediately attracted to your announcement. Fogel's  
-example looks like:  
-  
-  
-  
-Subject: ANN: aub 1., a program to assemble Usenet binaries  
-  
- The rest of the email should describe the programs functionality  
-quickly and concisely in no more than two paragraphs and should  
-provide links to the projects webpage and direct links to  
-downloads for those that want to try it right away. This form  
-will work for both Usenet and mailing list posts.  
-  
-  
-  
-  
- You should repeat this announcement process consistently in the  
-same locations for each subsequent release.  
-  
-  
-----  
-!4.4.2. freshmeat.net  
-  
- Mentioned earlier in Section 2.1.2.1, in today's free  
-software community, announcements of your project on freshmeat  
-are almost more important than announcements on mailing lists.  
-  
-  
-  
-  
- Visit the freshmeat.net  
-website or their submit project  
-page to post your project onto their site and into their  
-database. In addition to a large website, freshmeat provides a  
-daily newsletter that highlights all the days releases and  
-reaches a huge audience (I personally skim it every night for any  
-interesting new releases).  
-  
-  
-----  
-!4.4.3. Project Mailing List  
-  
-If you've gone ahead and created mailing lists for your  
-project, you should always announce new versions on these  
-lists. I've found that for many projects, users request a very  
-low-volume announce only mailing list to be notified when new  
-versions are released. freshmeat.net now allows users to subscribe  
-to a particular project so they receive emails every time a new  
-version is announced through their system. It's free and it can  
-stand in for an announce-only mailing list. In my opinion, it  
-can't hurt.  
-  
-----  
-!!!Bibliography  
-!!Printed Books  
-  
-Karl Fogel, ''Open Source Development with CVS'', Coriolois Open Press, 1999, 1-57610-490-7.  
-  
-  
-  
- Fogel's "guide to using CVS in the free software  
-world" is much more than its subtitle. In the publisher's  
-own words: "''Open Source Development with  
-CVS'' is one of the first books available that teaches  
-you development and implementation of Open Source  
-software." It also includes the best reference and  
-tutorial to CVS I have ever seen. It is the book that was  
-''so good'' that it prompted me to write this  
-HOWTO because I thought the role it tried to serve was so  
-important and useful. Please check it or buy it if you can and  
-are seriously interested in running a free software project.  
-  
-  
-  
-  
-Lawrence Lessig, ''Code and Other Laws of Cyberspace'', Basic Books, 2000, -465-03913-8.  
-  
-  
-  
- While it only briefly talks about free software (and does it by  
-tiptoeing around the free software/open source issue with the  
-spineless use of the term "open code" that only a  
-lawyer could coin), Lessig's book is brilliant. Written by a  
-lawyer, it talks about how regulation on the Internet is not  
-done with law, but with the code itself and how the nature of  
-the code will determine the nature of future freedoms. In  
-addition to being a quick and enjoyable read, it gives some  
-cool history and describes how we ''need''  
-free software in a way more powerfully than anything I've read  
-outside of RMS's  
-"Right to Read."  
-  
-  
-  
-  
-Eric Raymond, ''The Cathedral and the Bazaar'''': ''''Musings on Linux and Open Source by an Accidental Revolutionary'', O'Reilly, 1999, 1-56592-724-9.  
-  
-  
-  
- Although I have to honestly say that I am not the ESR fan that  
-I used to be, this book proved invaluable in getting me where I  
-am today. The essay that gives the book its title does a good  
-job of sketching the free software process and does an an  
-amazing job of making an argument for free software/open source  
-development as a road to better software. The rest of the book  
-has other of ESR's articles, which for the most part are posted  
-on his website. Still, it's nice thing to own in hard copy and  
-something that every free software/open source hacker should  
-read.  
-  
-  
-----  
-!!Web-Accessible Resources  
-  
-George N Dafermos, ''Management and Virtual Decentralized Networks: The Linux Project''.  
-  
-  
-  
-Since the paper includes its own abstract, I thought I  
-would include it here verbatim:  
-  
-  
-  
-  
-  
-This paper examines the latest of  
-paradigms - the Virtual Network(ed) Organisation - and whether  
-geographically dispersed knowledge workers can virtually  
-collaborate for a project under no central  
-planning. Co-ordination, management and the role of knowledge  
-arise as the central areas of focus. The Linux Project and its  
-development model are selected as a case of analysis and the  
-critical success factors of this organisational design are  
-identified. The study proceeds to the formulation of a  
-framework that can be applied to all kinds of virtual  
-decentralised work and concludes that value creation is  
-maximized when there is intense interaction and uninhibited  
-sharing of information between the organisation and the  
-surrounding community. Therefore, the potential success or  
-failure of this organisational paradigm depends on the degree  
-of dedication and involvement by the surrounding  
-community.  
-  
-  
-  
-  
-  
-This paper was referred to me in my capacity as author of  
-this HOWTO and I was very impressed. It's written by a graduate  
-student in management and I think it succeeds at evaluating the  
-Linux project as an example of a new paradigm in management--one  
-that ''you'' will be be placing yourself at the  
-center of in your capacity as maintainer of a free software  
-project.  
-  
-  
-  
-As a developer trying to control an application and guide  
-it to success in the free software world, I'm not sure how  
-useful Dafermos's argument is. It does however, provide a  
-theoretical justification for my HOWTO--free software project  
-management ''is'' a different creature than  
-proprietary software project management. If you are interested  
-in the conceptual and theoretical ways that free software  
-project management differs from other types of management, this  
-is a great paper to read. If this paper answers questions of  
-"how?", Dafermos answers the (more difficult to  
-defend) questions of "why?" and does a very good  
-job.  
-  
-  
-  
-Richard Gabriel, ''The Rise of  
-"Worse is Better"''.  
-  
-  
-  
- A well written article although I think the title may have  
-confused as many people as the rest of the essay helped. It  
-offers a good description of how to design programs that will  
-succeed and stay maintainable as they grow.  
-  
-  
-  
-  
-Montey Manley, ''Managing  
-Projects the Open Source Way'', Linux  
-Programming, Oct 31, 2000.  
-  
-  
-  
- In one of the better articles on the subject that I've read,  
-Monty sums up some of the major points I touch on including:  
-starting a project, testing, documentation, organizing a team and  
-leadership, and several other topics. While more opinionated that  
-I try to be, I think its an important article that I found very  
-helpful in writing this HOWTO. I've tried to cite him in  
-the places where I borrowed from him most.  
-  
-  
-  
-  
- I have problems much of this piece and I recommend you read  
-[[KRAWITZ] at the same time you read Monty's  
-article for a good critique.  
-  
-  
-  
-  
-Eric Steven Raymond, ''Software Release Practice HOWTO''.  
-  
-  
-  
-At first glance, ESR's release practice HOWTO seems to  
-share a lot of terrain with this document. Upon closer  
-examination, the differences become apparent but they are  
-closely related. His document, read in conjunction with mine,  
-will give a reader a good picture of how to go about managing a  
-project. ESR's HOWTO goes into a bit more detail on how to write  
-and what languages to write in. He tends to give more specific  
-instructions and checklists ("name this file this, not  
-this") while this HOWTO speaks more conceptually. There  
-are several sections that are extremely similar. It's also  
-''much'' shorter.  
-  
-  
-  
-My favorite quote from his HOWTO is: ""Managing a  
-project well when all the participants are volunteers presents  
-some unique challenges. This is too large a topic to cover in a  
-HOWTO." Oh really? Perhaps I just do a poor job.  
-  
-  
-  
-Vivek Venugopalan, ''CVS Best Practices''.  
-  
-  
-  
-Venugopalan provides one of the best essays on  
-effective use of CVS that I've come across. It is written for  
-people who already have a good knowledge of CVS. In the chapter  
-on branching, he describes when and how to branch but gives no  
-information on what CVS commands you should use to do this. This  
-is fine (technical CVS HOWTO have been written) but CVS newbies  
-will want to spend some time with Fogel's reference before they  
-will find this one very useful.  
-  
-  
-  
-Venugopalan creates checklists of things to do before,  
-after, and around releases. It's definitely worth a read through  
-as most of his ideas will save tons of developer head aches over  
-any longer period of time.  
-  
-----  
-!!Advogato Articles  
-  
-Stephen Hindle, '''Best Practices' for Open Source?'', Advogato, March 21, 2001.  
-  
-  
-  
- Touching mostly on programming practice (as most articles on  
-the subject usually do), the article talks a little about  
-project management ("Use it!") and a bit about  
-communication within a free software project.  
-  
-  
-  
-  
-Bram Cohen, ''http://www.advogato.org/article/258.htmlHow to  
-Write Maintainable Code'', Advogato, March 15, 2001.  
-  
-  
-  
- This article touches upon the "writing maintainable code"  
-discussion that I try hard to avoid in my HOWTO. It's one of  
-the better (and most diplomatic) articles on the subject that  
-I've found.  
-  
-  
-  
-  
-Robert Krawitz, ''Free  
-Source Project Management'', Advogato, November 4, 2000.  
-  
-  
-  
- This article made me happy because it challenged many of the  
-problems that I had with Monty's article on !LinuxProgramming. The  
-author argues that Monty calls simply for the application of  
-old (proprietary software) project management techniques in  
-free software projects instead of working to come up with  
-something new. I found his article to be extremely well thought  
-out and I think it's an essential read for any free software  
-project manager.  
-  
-  
-  
-  
-Lalo Martins, ''Ask  
-the Advogatos: why do Free Software projects  
-fail?'', Advogato, July 20, 2000.  
-  
-  
-  
- While the article is little more than a question, reading the  
-answers to this question offered by Advogato's readers can  
-help. In a lot of ways, this HOWTO acts as my answer to the  
-questions posed in this article but there are others, many of  
-which might take issue with whats is in this HOWTO. It's worth  
-checking out.  
-  
-  
-  
-  
-David Burley, ''In-Roads to Free  
-Software Development'', Advogato, June 14, 2000.  
-  
-  
-  
- This document was written as a response to another Advogato  
-article. Although not about running a project, this  
-describes some of the ways that you can get started with free  
-software development without starting a project. I think this  
-is an important article. If you are interested in becoming  
-involved with free software, this article showcases some of the  
-ways that you can do this without actually starting a project  
-(something that I hope this HOWTO has demonstrated is not to be  
-taken lightly).  
-  
-  
-  
-  
-Jacob Moorman, ''Importance of  
-Non-Developer Supporters in Free Software'', '''', Advogato, April 16, 2000.  
-  
-  
-  
- Moorman's is a short article but it brings up some good  
-points. The comment reminding developers to thank their testers  
-and end-users is invaluable and oft-forgotten.  
-  
-  
-  
-  
-Leslie Orchard, ''On  
-Naming an Open Source Project'', Advogato, April 12, 2000.  
-  
-  
-  
- I didn't even have a section on project naming in this HOWTO  
-(See Section 2.2) until Leslie Orchard's article  
-reminded me of it. Thanks to Leslie for writing this article!  
-  
-  
-  
-  
-David Allen, ''Version Numbering Madness'', Advogato, February 28, 2000.  
-  
-  
-  
- In this article, David Allen challenges the whole  
-"Major.Minor.Patch" version numbering scheme. Its  
-good to read this as you read Section 2.4. I liked the article and it  
-describes some of the projects that I bring up in my discussion  
-of version numbering.  
-  
-  
-----  
-!!!A. GNU Free Documentation License__A.1. . PREAMBLE__  
-  
- The purpose of this License is to make a manual, textbook, or  
-other written document "free" in the sense of  
-freedom: to assure everyone the effective freedom to copy and  
-redistribute it, with or without modifying it, either  
-commercially or non-commercially. Secondarily, this License  
-preserves for the author and publisher a way to get credit for  
-their work, while not being considered responsible for  
-modifications made by others.  
-  
-  
-  
-  
- This License is a kind of "copyleft", which means  
-that derivative works of the document must themselves be free in  
-the same sense. It complements the GNU General Public License,  
-which is a copyleft license designed for free software.  
-  
-  
-  
-  
- We have designed this License in order to use it for manuals for  
-free software, because free software needs free documentation: a  
-free program should come with manuals providing the same  
-freedoms that the software does. But this License is not limited  
-to software manuals; it can be used for any textual work,  
-regardless of subject matter or whether it is published as a  
-printed book. We recommend this License principally for works  
-whose purpose is instruction or reference.  
-  
-  
-----__A.2. 1. APPLICABILITY AND DEFINITIONS__  
-  
- This License applies to any manual or other work that contains a  
-notice placed by the copyright holder saying it can be  
-distributed under the terms of this License. The  
-"Document", below, refers to any such manual or  
-work. Any member of the public is a licensee, and is addressed  
-as "you".  
-  
-  
-  
-  
- A "Modified Version" of the Document means any work  
-containing the Document or a portion of it, either copied  
-verbatim, or with modifications and/or translated into another  
-language.  
-  
-  
-  
-  
- A "Secondary Section" is a named appendix or a  
-front-matter section of the Document that deals exclusively  
-with the relationship of the publishers or authors of the  
-Document to the Document's overall subject (or to related  
-matters) and contains nothing that could fall directly within  
-that overall subject. (For example, if the Document is in part a  
-textbook of mathematics, a Secondary Section may not explain any  
-mathematics.) The relationship could be a matter of historical  
-connection with the subject or with related matters, or of  
-legal, commercial, philosophical, ethical or political position  
-regarding them.  
-  
-  
-  
-  
- The "Invariant Sections" are certain Secondary Sections whose titles  
-are designated, as being those of Invariant Sections, in the  
-notice that says that the Document is released under this  
-License.  
-  
-  
-  
-  
- The "Cover Texts" are certain short passages of  
-text that are listed, as Front-Cover Texts or Back-Cover Texts,  
-in the notice that says that the Document is released under this  
-License.  
-  
-  
-  
-  
- A "Transparent" copy of the Document means a machine-readable  
-copy, represented in a format whose specification is available  
-to the general public, whose contents can be viewed and edited  
-directly and straightforwardly with generic text editors or (for  
-images composed of pixels) generic paint programs or (for  
-drawings) some widely available drawing editor, and that is  
-suitable for input to text formatters or for automatic  
-translation to a variety of formats suitable for input to text  
-formatters. A copy made in an otherwise Transparent file format  
-whose markup has been designed to thwart or discourage  
-subsequent modification by readers is not Transparent. A copy  
-that is not "Transparent" is called  
-"Opaque".  
-  
-  
-  
-  
- Examples of suitable formats for Transparent copies include  
-plain ASCII without markup, Texinfo input format, LaTeX input  
-format, SGML or XML using a publicly available DTD, and  
-standard-conforming simple HTML designed for human  
-modification. Opaque formats include !PostScript, PDF,  
-proprietary formats that can be read and edited only by  
-proprietary word processors, SGML or XML for which the DTD  
-and/or processing tools are not generally available, and the  
-machine-generated HTML produced by some word processors for  
-output purposes only.  
-  
-  
-  
-  
- The "Title Page" means, for a printed book, the  
-title page itself, plus such following pages as are needed to  
-hold, legibly, the material this License requires to appear in  
-the title page. For works in formats which do not have any title  
-page as such, "Title Page" means the text near the  
-most prominent appearance of the work's title, preceding the  
-beginning of the body of the text.  
-  
-  
-----__A.3. 2. VERBATIM COPYING__  
-  
- You may copy and distribute the Document in any medium, either  
-commercially or non-commercially, provided that this License, the  
-copyright notices, and the license notice saying this License  
-applies to the Document are reproduced in all copies, and that  
-you add no other conditions whatsoever to those of this  
-License. You may not use technical measures to obstruct or  
-control the reading or further copying of the copies you make or  
-distribute. However, you may accept compensation in exchange for  
-copies. If you distribute a large enough number of copies you  
-must also follow the conditions in section 3.  
-  
-  
-  
-  
- You may also lend copies, under the same conditions stated  
-above, and you may publicly display copies.  
-  
-  
-----__A.4. 3. COPYING IN QUANTITY__  
-  
- If you publish printed copies of the Document numbering more than 100,  
-and the Document's license notice requires Cover Texts, you must enclose  
-the copies in covers that carry, clearly and legibly, all these  
-Cover Texts: Front-Cover Texts on the front cover, and  
-Back-Cover Texts on the back cover. Both covers must also  
-clearly and legibly identify you as the publisher of these  
-copies. The front cover must present the full title with all  
-words of the title equally prominent and visible. You may add  
-other material on the covers in addition. Copying with changes  
-limited to the covers, as long as they preserve the title of the  
-Document and satisfy these  
-conditions, can be treated as verbatim copying in other  
-respects.  
-  
-  
-  
-  
- If the required texts for either cover are too voluminous to fit  
-legibly, you should put the first ones listed (as many as fit  
-reasonably) on the actual cover, and continue the rest onto  
-adjacent pages.  
-  
-  
-  
-  
- If you publish or distribute Opaque copies of the Document numbering more than 100,  
-you must either include a machine-readable Transparent copy along with  
-each Opaque copy, or state in or with each Opaque copy a  
-publicly-accessible computer-network location containing a  
-complete Transparent copy of the Document, free of added  
-material, which the general network-using public has access to  
-download anonymously at no charge using public-standard network  
-protocols. If you use the latter option, you must take  
-reasonably prudent steps, when you begin distribution of Opaque  
-copies in quantity, to ensure that this Transparent copy will  
-remain thus accessible at the stated location until at least one  
-year after the last time you distribute an Opaque copy (directly  
-or through your agents or retailers) of that edition to the  
-public.  
-  
-  
-  
-  
- It is requested, but not required, that you contact the authors  
-of the Document well before  
-redistributing any large number of copies, to give them a chance  
-to provide you with an updated version of the Document.  
-  
-  
-----__A.5. 4. MODIFICATIONS__  
-  
- You may copy and distribute a Modified Version of the Document under the conditions of  
-sections 2 and 3 above, provided that you release  
-the Modified Version under precisely this License, with the  
-Modified Version filling the role of the Document, thus  
-licensing distribution and modification of the Modified Version  
-to whoever possesses a copy of it. In addition, you must do  
-these things in the Modified Version:  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
-__A. __ Use in the Title  
-Page (and on the covers, if any) a title distinct  
-from that of the Document, and from those of  
-previous versions (which should, if there were any, be  
-listed in the History section of the Document). You may  
-use the same title as a previous version if the original  
-publisher of that version gives permission.  
-  
-  
-  
-****  
-****  
-  
-__B. __ List on the Title  
-Page, as authors, one or more persons or entities  
-responsible for authorship of the modifications in the  
-Modified Version,  
-together with at least five of the principal authors of  
-the Document (all of  
-its principal authors, if it has less than five).  
-  
-  
-  
-****  
-****  
-  
-__C. __ State on the Title  
-Page the name of the publisher of the Modified Version, as the  
-publisher.  
-  
-  
-  
-****  
-****  
-  
-__D. __ Preserve all the copyright notices of the Document.  
-  
-  
-  
-****  
-****  
-  
-__E. __ Add an appropriate copyright notice for your modifications  
-adjacent to the other copyright notices.  
-  
-  
-  
-****  
-****  
-  
-__F. __ Include, immediately after the copyright notices, a  
-license notice giving the public permission to use the  
-Modified Version under  
-the terms of this License, in the form shown in the  
-Addendum below.  
-  
-  
-  
-****  
-****  
-  
-__G. __ Preserve in that license notice the full lists of Invariant Sections and  
-required Cover  
-Texts given in the Document's license notice.  
-  
-  
-  
-****  
-****  
-  
-__H. __ Include an unaltered copy of this License.  
-  
-  
-  
-****  
-****  
-  
-__I. __ Preserve the section entitled "History", and  
-its title, and add to it an item stating at least the  
-title, year, new authors, and publisher of the Modified Version as given on  
-the Title Page. If  
-there is no section entitled "History" in the  
-Document, create one  
-stating the title, year, authors, and publisher of the  
-Document as given on its Title Page, then add an item  
-describing the Modified Version as stated in the previous  
-sentence.  
-  
-  
-  
-****  
-****  
-  
-__J. __ Preserve the network location, if any, given in the Document for public access  
-to a Transparent  
-copy of the Document, and likewise the network locations  
-given in the Document for previous versions it was based  
-on. These may be placed in the "History"  
-section. You may omit a network location for a work that  
-was published at least four years before the Document  
-itself, or if the original publisher of the version it  
-refers to gives permission.  
-  
-  
-  
-****  
-****  
-  
-__K. __ In any section entitled "Acknowledgements" or  
-"Dedications", preserve the section's title,  
-and preserve in the section all the substance and tone of  
-each of the contributor acknowledgements and/or  
-dedications given therein.  
-  
-  
-  
-****  
-****  
-  
-__L. __ Preserve all the Invariant  
-Sections of the Document, unaltered in their  
-text and in their titles. Section numbers or the  
-equivalent are not considered part of the section titles.  
-  
-  
-  
-****  
-****  
-  
-__M. __ Delete any section entitled  
-"Endorsements". Such a section may not be  
-included in the Modified  
-Version.  
-  
-  
-  
-****  
-****  
-  
-__N. __ Do not retitle any existing section as  
-"Endorsements" or to conflict in title with  
-any Invariant  
-Section.  
-  
-  
-  
-****  
-  
- If the Modified Version  
-includes new front-matter sections or appendices that qualify as  
-Secondary Sections and  
-contain no material copied from the Document, you may at your  
-option designate some or all of these sections as invariant. To  
-do this, add their titles to the list of Invariant Sections in the  
-Modified Version's license notice. These titles must be  
-distinct from any other section titles.  
-  
-  
-  
-  
- You may add a section entitled "Endorsements",  
-provided it contains nothing but endorsements of your Modified Version by various  
-parties--for example, statements of peer review or that the text  
-has been approved by an organization as the authoritative  
-definition of a standard.  
-  
-  
-  
-  
- You may add a passage of up to five words as a Front-Cover Text, and a passage  
-of up to 25 words as a Back-Cover Text, to the end of  
-the list of Cover Texts  
-in the Modified Version.  
-Only one passage of Front-Cover Text and one of Back-Cover Text  
-may be added by (or through arrangements made by) any one  
-entity. If the Document  
-already includes a cover text for the same cover, previously  
-added by you or by arrangement made by the same entity you are  
-acting on behalf of, you may not add another; but you may  
-replace the old one, on explicit permission from the previous  
-publisher that added the old one.  
-  
-  
-  
-  
- The author(s) and publisher(s) of the Document do not by this License  
-give permission to use their names for publicity for or to  
-assert or imply endorsement of any Modified Version .  
-  
-  
-----__A.6. 5. COMBINING DOCUMENTS__  
-  
- You may combine the Document  
-with other documents released under this License, under the  
-terms defined in section 4  
-above for modified versions, provided that you include in the  
-combination all of the Invariant  
-Sections of all of the original documents, unmodified,  
-and list them all as Invariant Sections of your combined work in  
-its license notice.  
-  
-  
-  
-  
- The combined work need only contain one copy of this License,  
-and multiple identical Invariant  
-Sections may be replaced with a single copy. If there are  
-multiple Invariant Sections with the same name but different  
-contents, make the title of each such section unique by adding  
-at the end of it, in parentheses, the name of the original  
-author or publisher of that section if known, or else a unique  
-number. Make the same adjustment to the section titles in the  
-list of Invariant Sections in the license notice of the combined  
-work.  
-  
-  
-  
-  
- In the combination, you must combine any sections entitled  
-"History" in the various original documents,  
-forming one section entitled "History"; likewise  
-combine any sections entitled "Acknowledgements",  
-and any sections entitled "Dedications". You must  
-delete all sections entitled "Endorsements."  
-  
-  
-----__A.7. 6. COLLECTIONS OF DOCUMENTS__  
-  
- You may make a collection consisting of the Document and other documents  
-released under this License, and replace the individual copies  
-of this License in the various documents with a single copy that  
-is included in the collection, provided that you follow the  
-rules of this License for verbatim copying of each of the  
-documents in all other respects.  
-  
-  
-  
-  
- You may extract a single document from such a collection, and  
-dispbibute it individually under this License, provided you  
-insert a copy of this License into the extracted document, and  
-follow this License in all other respects regarding verbatim  
-copying of that document.  
-  
-  
-----__A.8. 7. AGGREGATION WITH INDEPENDENT WORKS__  
-  
- A compilation of the Document or its derivatives with  
-other separate and independent documents or works, in or on a  
-volume of a storage or distribution medium, does not as a whole  
-count as a Modified Version  
-of the Document, provided no compilation copyright is claimed  
-for the compilation. Such a compilation is called an  
-"aggregate", and this License does not apply to the  
-other self-contained works thus compiled with the Document , on  
-account of their being thus compiled, if they are not themselves  
-derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these  
-copies of the Document, then if the Document is less than one  
-quarter of the entire aggregate, the Document's Cover Texts may  
-be placed on covers that surround only the Document within the  
-aggregate. Otherwise they must appear on covers around the whole  
-aggregate.  
-  
-  
-----__A.9. 8. TRANSLATION__  
-  
- Translation is considered a kind of modification, so you may  
-distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with  
-translations requires special permission from their copyright  
-holders, but you may include translations of some or all  
-Invariant Sections in addition to the original versions of these  
-Invariant Sections. You may include a translation of this  
-License provided that you also include the original English  
-version of this License. In case of a disagreement between the  
-translation and the original English version of this License,  
-the original English version will prevail.  
-  
-  
-----__A.10. 9. TERMINATION__  
-  
- You may not copy, modify, sublicense, or distribute the Document except as expressly  
-provided for under this License. Any other attempt to copy,  
-modify, sublicense or distribute the Document is void, and will  
-automatically terminate your rights under this License. However,  
-parties who have received copies, or rights, from you under this  
-License will not have their licenses terminated so long as such  
-parties remain in full compliance.  
-  
-  
-----__A.11. 10. FUTURE REVISIONS OF THIS LICENSE__  
-  
- The Free Software  
-Foundation may publish new, revised versions of the GNU  
-Free Documentation License from time to time. Such new versions  
-will be similar in spirit to the present version, but may differ  
-in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.  
-  
-  
-  
-  
- Each version of the License is given a distinguishing version  
-number. If the Document  
-specifies that a particular numbered version of this License  
-"or any later version" applies to it, you have the  
-option of following the terms and conditions either of that  
-specified version or of any later version that has been  
-published (not as a draft) by the Free Software Foundation. If  
-the Document does not specify a version number of this License,  
-you may choose any version ever published (not as a draft) by  
-the Free Software Foundation
+Describe [HowToSoftwareProjMgmtHOWTO ] here.