1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
8 <title>Free Software Development HOWTO</title>
11 <firstname>Benjamin</firstname>
12 <othername>Mako</othername>
13 <surname>Hill</surname>
16 <email>mako@debian.org</email>
24 <revnumber>v0.01</revnumber>
25 <date>25 March 2001</date>
26 <authorinitials>bch</authorinitials>
35 <primary>fswd</primary>
39 This HOWTO is designed for people with experience in programming
40 and some skills in managing a software project but who are new to
41 the world of Free Software. This document is meant to act as a
42 guide to the non-technical aspects of programming and was written
43 to act as a crash course in the people skills that aren't taught
44 to commercial coders but that can make or break a free software
51 <!-- Section1: intro -->
54 <title>Introduction</title>
57 <primary>fswd!introduction</primary>
61 For various reasons, this realease has been codenamed the
62 <emphasis>homade yogurt</emphasis> release.
66 New code names will appear as per industry standard
67 guidelines to emphasize the state-of-the-art-ness of this
72 Skimming through Freshmeat provides mountains of reasons for this
73 HOWTO's existence--the Internet is littered with excellently
74 written and useful programs that have faded away into the Universe
75 of Free Software Forgottenness. This dismal scene made me ask
80 This HOWTO tries to do a lot of thing (probably too many), but it
81 can't answer that question and won't attempt it. What this HOWTO
82 will attempt to do is give your Free Software project a fighting
83 chance-an edge. If you write a piece of crap that no one is
84 interested in, you can read this HOWTO until you recite it in your
85 sleep and your project will probably fail. Then again, you can
86 write a beautiful, relevent piece of software and follow every
87 instruction in this HOWTO and your software may still not make
88 it. Sometimes life is like that. However, I'll go out a limb and
89 say that if you write a great, relevant pieces of software and
90 ignore the advise in this HOWTO, you'll probably fail <emphasis>
91 more often</emphasis>.
95 A lot of the information in this HOWTO is best called common
96 sense. Of course, as any debate on interfaces will prove, what is
97 common sense to some programmers proves totally unintuitive to
98 others. After explaining bites and pieces of this HOWTO to Free
99 Software developers on several occasions, I realized that that
100 writing this HOWTO might provide a useful resource and a forum for
101 programmers to share ideas about what has and has not worked for
110 As anyone involved in any of what seems like an unending parade of
111 ridiculous intellectual property clashes will attest to, a little
112 bit of legalese proves important.
115 <!-- Section2: copyright -->
117 <sect2 id="copyright">
118 <title>Copyright Information</title>
121 This document is copyrighted (c) 2000 Benjamin (Mako) Hill and is
122 distributed under the terms of the Linux Documentation Project
123 (LDP) license, stated below.
127 Unless otherwise stated, Linux HOWTO documents are
128 copyrighted by their respective authors. Linux HOWTO documents may
129 be reproduced and distributed in whole or in part, in any medium
130 physical or electronic, as long as this copyright notice is
131 retained on all copies. Commercial redistribution is allowed and
132 encouraged; however, the author would like to be notified of any
137 All translations, derivative works, or aggregate works
138 incorporating any Linux HOWTO documents must be covered under this
139 copyright notice. That is, you may not produce a derivative work
140 from a HOWTO and impose additional restrictions on its
141 distribution. Exceptions to these rules may be granted under
142 certain conditions; please contact the Linux HOWTO coordinator at
143 the address given below.
147 In short, we wish to promote dissemination of this
148 information through as many channels as possible. However, we do
149 wish to retain copyright on the HOWTO documents, and would like to
150 be notified of any plans to redistribute the HOWTOs.
154 If you have any questions, please contact
155 <email>linux-howto@metalab.unc.edu</email>
159 <!-- Section2: disclaimer -->
161 <sect2 id="disclaimer">
162 <title>Disclaimer</title>
165 No liability for the contents of this documents can be accepted.
166 Use the concepts, examples and other content at your own risk.
167 As this is a new edition of this document, there may be errors
168 and inaccuracies, that may of course be damaging to your system.
169 Proceed with caution, and although this is highly unlikely,
170 the author(s) do not take any responsibility for that.
174 All copyrights are held by their by their respective owners, unless
175 specifically noted otherwise. Use of a term in this document
176 should not be regarded as affecting the validity of any trademark
181 Naming of particular products or brands should not be seen
186 You are strongly recommended to take a backup of your system
187 before major installation and backups at regular intervals.
191 <!-- Section2: newversions-->
193 <sect2 id="newversions">
194 <title>New Versions</title>
197 <primary>(your index root)!news on</primary>
201 This is the initial release. It is written to be released to
202 developers for critique and brainstorming and submitted to
203 Hampshire College for academic credit. Please keep in mind that
204 this version of the HOWTO is still in an infant stage and will be
205 revised extensively before it hits the LDP.
209 The latest version number of this document should always be listed
210 at my webpage at<ulink url="http://people.debian.org/~mako/">
211 http://people.debian.org/~mako/</ulink> Debian.
215 The newest version of this HOWTO will always be made available at
216 the same website, in a variety of formats:
223 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.html">HTML</ulink>.
229 <ulink URL="http://people.debian.org/~mako/howto/fswd-howto.txt">plain text</ulink>.
235 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.US.ps.gz">compressed
236 postscript (US letter format)</ulink>.
242 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.UF.ps.gz">compressed
243 postscript (Universal format / 8.27x11in; 210x279mm)</ulink>.
249 <ulink url="http://people.debian.org/~mako/howto/fswd-howto.sgml">SGML source</ulink>.
256 <!-- Section2: credits -->
259 <title>Credits</title>
262 In this version I have the pleasure of acknowledging:
266 <emphasis>Karl Fogel</emphasis>, the author of <emphasis>Open
267 Source Development with CVS</emphasis> published by the Coriolis
268 Open Press. Larges parts of the book are available <ulink
269 url="http://cvsbook.red-bean.com">on the web</ulink>. 225 pages of
270 the book are available under the GPL and constitute the best
271 tutorial on CVS I have ever seen. The rest of the book covers,
272 "the challenges and philosophical issues inherent in running an
273 Open Source project using CVS." The book does a good job of
274 covering some of the subjects brought up in this HOWTO and much
275 more. <ulink url="http://cvsbook.red-bean.com">The book's
276 website</ulink> has information on ordering the book and provides
277 several translations of the chapters on CVS. I you are seriously
278 interested in running a Free Software project, you want this book.
282 Karl Fogel can be reached at <email>kfogel (at) red-bean (dot)
286 Also providing support and material, and inspiration for this
287 HOWTO is Eric S. Raymond for his prolific, consitent, and
288 carefully crafted arguments, to Lawrence Lessig for reminding me
289 of the importance of Free Software and to every user and developer
290 involved with the <ulink url="http://www.debian.org">Debian
291 Project</ulink>. The project has provided me with a home, a place
292 to practice Free Software advocacy and to make a difference, a
293 place to learn from those how have been involved with the movement
294 much longer than I, and an proof of a Free Software project that
295 <emphasis>definately, definately works</emphasis>.
299 Above all, I want to thank <emphasis>Richard Stallman</emphasis>
300 for his work at the Free Software Foundation and for never giving
301 up. Stallman provided the philosphical basis that attracts me to
302 Free Software and that drives me towards writing a document to
303 make sure it succeeds. RMS can always be emailed at <email>rms
304 (at) gnu (dot) org</email>.
309 <!-- Section2: feedback -->
311 <sect2 id="feedback">
312 <title>Feedback</title>
315 Feedback is most certainly welcome for this document. Without your
316 submissions and input, this document wouldn't exist. Something
317 missing? Don't hesitate to contact me and to write a chapter. I
318 want this document to be as much a product of the Free Software
319 development process that it heralds and I think its ultimate
320 success will be rooted in this fact. Please send your additions,
321 comments and criticisms to the following email address :
322 <email>mako (at) debian (dot) org</email>.
326 <!-- Section2: translations -->
328 <sect2 id="translations">
329 <title>Translations</title>
332 I know that not everyone speaks English. Translations are nice and
333 I'd love for this HOWTO to gain the kind of international reach
334 afforded by a translated version.
337 However, this HOWTO is still young and I have to yet to be
338 contacted about a translation so English is all that is
339 available. If you would like to help with or do a translation, you
340 will gain my utmost respect and admiration and you'll get to be
341 part of a cool process. If you are at all interested, please don't
342 hesitate to contact me at: <email>mako (at) debian (dot)
348 <!-- Section1: intro: END -->
350 <!-- Section1: starting -->
352 <sect1 id="starting">
353 <title>Starting a Project</title>
356 <primary>fswd!starting</primary>
359 With very little argument, starting a project is most difficult
360 part of successful free software development. Laying a firm
361 foundation for your project will determine whether your project
362 flourishes or withers away and dies. It is also the subject that is
363 of most immediate interest to anyone reading this document as a
368 Starting a project also involves a dilemna that you as a developer
369 must try and deal with. No potential user for your program will be
370 interested by a program that doesn't work. Simultaneously, the
371 development process that you want to employ holds involvement of
372 users as essential to the process of the development that will
373 realize this working software.
377 It is in these dangerous initial moments that anyone working to
378 start a free software project must strike a balance. One of the
379 most important ways that omeone trying to start a project can work
380 towards this balance is by establishing a framework for the
381 development process through some of the ways mentioned in this
386 <!-- Section2: chooseproject-->
388 <sect2 id="chooseproject">
389 <title>Choosing a Project</title>
392 If you are reading this document, there's a good chance you
393 already have an idea for a project in mind. Chances are pretty
394 good, it fills a gap by doing something that no other free
395 software process does or or does something unique
400 <!-- Section2: chooselicense-->
402 <sect2 id="chooselicense">
403 <title>Deciding on a License</title>
407 <!-- Section2: chooseversioning-->
409 <sect2 id="chooseversioning">
410 <title>Choosing a Method of Version Numbering</title>
414 <!-- Section2: documentation-->
416 <sect2 id="documentation">
417 <title>Documentation</title>
421 <!-- Section2: presentation -->
423 <sect2 id="presentation">
424 <title>Other Presentation Issues</title>
428 <!-- Section2: futuredev -->
430 <sect2 id="futuredev">
431 <title>Nuturing Future Development</title>
437 <!-- Section1: starting: END -->
439 <!-- Section1: developers -->
441 <sect1 id="developers">
442 <title>Maintaining a Project: Interacting with Developers</title>
445 <primary>fswd!developers</primary>
448 <!-- Section2: delegation -->
450 <sect2 id="delegation">
451 <title>Delegating Work</title>
455 <!-- Section2: branches -->
457 <sect2 id="branches">
458 <title>Stable and Development Branches</title>
462 <!-- Section2: freezing -->
464 <sect2 id="freezing">
465 <title>Freezing</title>
469 <!-- Section2: codecram -->
471 <sect2 id="codecram">
472 <title>Avoiding the Code Cram Effect</title>
476 <!-- Section2: patching -->
478 <sect2 id="patching">
479 <title>Accepting and Rejecting Patches</title>
484 <!-- Section1: users -->
487 <title>Maintaining a Project: Interacting with Users</title>
490 <primary>fswd!users</primary>
494 <!-- Section2: announcing -->
496 <sect2 id="announcing">
497 <title>Announcing Your Project</title>
501 <!-- Section2: testing -->
504 <title>Testing and Testers</title>
511 <!-- Keep this comment at the end of the file
516 sgml-namecase-general:t
517 sgml-general-insert-case:lower
518 sgml-minimize-attributes:nil
519 sgml-always-quote-attributes:t
522 sgml-parent-document:nil
523 sgml-exposed-tags:nil
524 sgml-local-catalogs:nil
525 sgml-local-ecat-files:nil