669 lines
10 KiB
HTML
669 lines
10 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Software Release Practice HOWTO</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
|
|
REL="NEXT"
|
|
TITLE="Introduction"
|
|
HREF="introduction.html"></HEAD
|
|
><BODY
|
|
CLASS="article"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="ARTICLE"
|
|
><DIV
|
|
CLASS="TITLEPAGE"
|
|
><H1
|
|
CLASS="title"
|
|
><A
|
|
NAME="AEN2"
|
|
></A
|
|
>Software Release Practice HOWTO</H1
|
|
><H3
|
|
CLASS="author"
|
|
><A
|
|
NAME="AEN4"
|
|
>Eric Steven Raymond</A
|
|
></H3
|
|
><DIV
|
|
CLASS="affiliation"
|
|
><SPAN
|
|
CLASS="orgname"
|
|
><A
|
|
HREF="http://www.catb.org/~esr/"
|
|
TARGET="_top"
|
|
> Thyrsus Enterprises</A
|
|
><BR></SPAN
|
|
><DIV
|
|
CLASS="address"
|
|
><P
|
|
CLASS="address"
|
|
><br>
|
|
<TT
|
|
CLASS="email"
|
|
><<A
|
|
HREF="mailto:esr@thyrsus.com"
|
|
>esr@thyrsus.com</A
|
|
>></TT
|
|
><br>
|
|
</P
|
|
></DIV
|
|
></DIV
|
|
><P
|
|
CLASS="copyright"
|
|
>Copyright © 2000 Eric S. Raymond</P
|
|
><DIV
|
|
CLASS="revhistory"
|
|
><TABLE
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
><TR
|
|
><TH
|
|
ALIGN="LEFT"
|
|
VALIGN="TOP"
|
|
COLSPAN="3"
|
|
><B
|
|
>Revision History</B
|
|
></TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 4.1</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2013-01-14</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Check out from a repo to be sure of making patches against fresh code.
|
|
Freshmeat changed its name. USENET topic groups aren't very visible
|
|
any more.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 4.0</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2010-04-11</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>It's no longer necessary to provide RPMS or debs at project
|
|
level. The packaging infrastructure has gotten good at that.
|
|
New caveats about configuration and autotools. AsciiDOC
|
|
is now a viable alternative for documentation masters.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.9</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2004-11-28</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>New material on good patching practice. Recommend Electric Fence
|
|
and valgrind rather than proprietary tools.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.8</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-02-17</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>URL fixups after site move.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.7</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2002-09-25</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Point at the DocBook Demystification HOWTO.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.6</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2002-09-12</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Incorporated material on portability by Keith Bostic.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.6</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2002-08-14</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Rewrote section on documentation practice, since XML-Docbook is
|
|
mature now.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.5</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2002-07-04</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Added section on providing checksums. Cited doclifter.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.4</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2002-01-04</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>More about good patching practice.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.3</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2001-08-16</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>New section about how to send good patches.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.2</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2001-07-11</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Note about not relying on proprietary components.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.1</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2001-02-22</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>LDP Styleguide fixes.</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 3.0</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2000-08-12</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: esr</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>First DocBook version. Advice on SourceForge and a major section
|
|
on documentation practice added.</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
><DIV
|
|
><DIV
|
|
CLASS="abstract"
|
|
><A
|
|
NAME="AEN82"
|
|
></A
|
|
><P
|
|
></P
|
|
><P
|
|
>This HOWTO describes good release practices for Linux and other
|
|
open-source projects. By following these practices, you will make it
|
|
as easy as possible for users to build your code and use it, and for
|
|
other developers to understand your code and cooperate with you to
|
|
improve it.</P
|
|
><P
|
|
>This document is a must-read for novice developers. Experienced
|
|
developers should review it when they are about to release a new
|
|
project. It will be revised periodically to reflect the evolution of
|
|
good-practice standards.</P
|
|
><P
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><HR></DIV
|
|
><DIV
|
|
CLASS="TOC"
|
|
><DL
|
|
><DT
|
|
><B
|
|
>Table of Contents</B
|
|
></DT
|
|
><DT
|
|
>1. <A
|
|
HREF="introduction.html"
|
|
>Introduction</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>1.1. <A
|
|
HREF="introduction.html#purpose"
|
|
>Why this document?</A
|
|
></DT
|
|
><DT
|
|
>1.2. <A
|
|
HREF="introduction.html#newversions"
|
|
>New versions of this document</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>2. <A
|
|
HREF="patching.html"
|
|
>Good patching practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>2.1. <A
|
|
HREF="patching.html#AEN107"
|
|
>Do send patches, don't send whole archives or files</A
|
|
></DT
|
|
><DT
|
|
>2.2. <A
|
|
HREF="patching.html#AEN117"
|
|
>Send patches against the current version of the code.</A
|
|
></DT
|
|
><DT
|
|
>2.3. <A
|
|
HREF="patching.html#AEN123"
|
|
>Don't include patches for generated files.</A
|
|
></DT
|
|
><DT
|
|
>2.4. <A
|
|
HREF="patching.html#AEN133"
|
|
>Don't send patch bands that just tweak version-control $-symbols.</A
|
|
></DT
|
|
><DT
|
|
>2.5. <A
|
|
HREF="patching.html#AEN140"
|
|
>Do use -c or -u format, don't use the default (-e) format</A
|
|
></DT
|
|
><DT
|
|
>2.6. <A
|
|
HREF="patching.html#AEN147"
|
|
>Do include documentation with your patch</A
|
|
></DT
|
|
><DT
|
|
>2.7. <A
|
|
HREF="patching.html#AEN154"
|
|
>Do include an explanation with your patch</A
|
|
></DT
|
|
><DT
|
|
>2.8. <A
|
|
HREF="patching.html#AEN169"
|
|
>Do include useful comments in your code</A
|
|
></DT
|
|
><DT
|
|
>2.9. <A
|
|
HREF="patching.html#AEN182"
|
|
>Just one bugfix or new feature per patch.</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>3. <A
|
|
HREF="naming.html"
|
|
>Good project- and archive- naming practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>3.1. <A
|
|
HREF="naming.html#AEN192"
|
|
>Use GNU-style names with a stem and major.minor.patch numbering.</A
|
|
></DT
|
|
><DT
|
|
>3.2. <A
|
|
HREF="naming.html#local"
|
|
>But respect local conventions where appropriate</A
|
|
></DT
|
|
><DT
|
|
>3.3. <A
|
|
HREF="naming.html#prefix"
|
|
>Try hard to choose a name prefix that is unique and easy to type</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4. <A
|
|
HREF="licensetheory.html"
|
|
>Good licensing and copyright practice: the theory</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.1. <A
|
|
HREF="licensetheory.html#copyrights"
|
|
>Open source and copyrights</A
|
|
></DT
|
|
><DT
|
|
>4.2. <A
|
|
HREF="licensetheory.html#opensource"
|
|
>What qualifies as open source</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>5. <A
|
|
HREF="licensepractice.html"
|
|
>Good licensing and copyright practice: the practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>5.1. <A
|
|
HREF="licensepractice.html#holder"
|
|
>Make yourself or the FSF the copyright holder</A
|
|
></DT
|
|
><DT
|
|
>5.2. <A
|
|
HREF="licensepractice.html#osd"
|
|
>Use a license conformant to the Open Source Definition</A
|
|
></DT
|
|
><DT
|
|
>5.3. <A
|
|
HREF="licensepractice.html#unoriginal"
|
|
>Don't write your own license if you can possibly avoid it.</A
|
|
></DT
|
|
><DT
|
|
>5.4. <A
|
|
HREF="licensepractice.html#visible"
|
|
>Make your license visible in a standard place.</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>6. <A
|
|
HREF="develpractice.html"
|
|
>Good development practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>6.1. <A
|
|
HREF="develpractice.html#language"
|
|
>Choose the most portable language you can</A
|
|
></DT
|
|
><DT
|
|
>6.2. <A
|
|
HREF="develpractice.html#proprietary"
|
|
>Don't rely on proprietary code</A
|
|
></DT
|
|
><DT
|
|
>6.3. <A
|
|
HREF="develpractice.html#build_systems"
|
|
>Build systems</A
|
|
></DT
|
|
><DT
|
|
>6.4. <A
|
|
HREF="develpractice.html#testcode"
|
|
>Test your code before release</A
|
|
></DT
|
|
><DT
|
|
>6.5. <A
|
|
HREF="develpractice.html#sanitycode"
|
|
>Sanity-check your code before release</A
|
|
></DT
|
|
><DT
|
|
>6.6. <A
|
|
HREF="develpractice.html#sanitydocs"
|
|
>Sanity-check your documentation and READMEs before release</A
|
|
></DT
|
|
><DT
|
|
>6.7. <A
|
|
HREF="develpractice.html#cport"
|
|
>Recommended C/C++ portability practices</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>7. <A
|
|
HREF="distpractice.html"
|
|
>Good distribution-making practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>7.1. <A
|
|
HREF="distpractice.html#tarballs"
|
|
>Make sure tarballs always unpack into a single new directory</A
|
|
></DT
|
|
><DT
|
|
>7.2. <A
|
|
HREF="distpractice.html#readme"
|
|
>Have a README</A
|
|
></DT
|
|
><DT
|
|
>7.3. <A
|
|
HREF="distpractice.html#filenames"
|
|
>Respect and follow standard file naming practices</A
|
|
></DT
|
|
><DT
|
|
>7.4. <A
|
|
HREF="distpractice.html#upgradeability"
|
|
>Design for Upgradability</A
|
|
></DT
|
|
><DT
|
|
>7.5. <A
|
|
HREF="distpractice.html#checksums"
|
|
>Provide checksums</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>8. <A
|
|
HREF="documentation.html"
|
|
>Good documentation practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>8.1. <A
|
|
HREF="documentation.html#docpractice"
|
|
>Documentation formats</A
|
|
></DT
|
|
><DT
|
|
>8.2. <A
|
|
HREF="documentation.html#AEN547"
|
|
>Good practice recommendations</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>9. <A
|
|
HREF="communication.html"
|
|
>Good communication practice</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>9.1. <A
|
|
HREF="communication.html#announce"
|
|
>Announce to Freecode</A
|
|
></DT
|
|
><DT
|
|
>9.2. <A
|
|
HREF="communication.html#website"
|
|
>Have a website</A
|
|
></DT
|
|
><DT
|
|
>9.3. <A
|
|
HREF="communication.html#lists"
|
|
>Host project mailing lists</A
|
|
></DT
|
|
><DT
|
|
>9.4. <A
|
|
HREF="communication.html#archives"
|
|
>Release to major archives</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>10. <A
|
|
HREF="management.html"
|
|
>Good project-management practice</A
|
|
></DT
|
|
></DL
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="introduction.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Introduction</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |