<?xml version="1.0"?>
<!DOCTYPE webpage
  PUBLIC "-//NetBSD//DTD Website-based NetBSD Extension//EN"
    "http://www.NetBSD.org/XML/htdocs/lang/share/xml/website-netbsd.dtd">

<webpage id="releases-release-map">
<config param="desc" value="NetBSD release glossary and graphs"/>
<config param="cvstag" value="$NetBSD: release-map.xml,v 1.4 2009/09/21 22:41:38 tsutsui Exp $"/>
<config param="rcsdate" value="$Date: 2009/09/21 22:41:38 $"/>
<head>

<!-- Copyright (c) 1994-2005
	The NetBSD Foundation, Inc.  ALL RIGHTS RESERVED. -->

<title>NetBSD release glossary and graphs</title>
</head>


<sect1 id="top">

<para>

NetBSD is available in three forms:

</para>

<para>
<itemizedlist>
  <listitem><ulink url="#release">Formal release</ulink>
      - tested, production version.</listitem>
  <listitem><ulink url="#maintenance">Maintenance branches</ulink>
      - various maintenance branches.</listitem>
  <listitem><ulink url="#current">NetBSD-current</ulink>
      - feature (development) tree.</listitem>
</itemizedlist>
</para>

<para>

Additionally, there is a graph showing 
an <ulink url="#graph1">overview of release branches</ulink>,
depicting the <emphasis role="bold">3.0</emphasis> release and
the following maintenance branches as an example.

</para>

<para>

NetBSD has recently changed the release numbering scheme.  For
completeness, there is also a section which describes the <ulink
url="#old-branches">old release numbering scheme.</ulink>

</para>

<html:hr/>

<variablelist>
<varlistentry>

<term id="release"><ulink url="../releases/formal.html">
      <emphasis role="bold">Formal release</emphasis></ulink>
</term>
<listitem>

<para>

An official, believed to be reliable, source and binary distribution
of NetBSD.  This can either be in the form of a major release like
<emphasis role="bold"><ulink url="formal-2.0/">2.0</ulink></emphasis>
or <emphasis role="bold"><ulink url="formal-3/">3.0</ulink></emphasis>,
of a <ulink url="#maintenance">maintenance (stable) release</ulink>
such as <emphasis role="bold"><ulink
url="formal-2.0/NetBSD-2.1.html">2.1</ulink></emphasis>, or a <ulink
url="#security">security/critical release</ulink> like <emphasis
role="bold"><ulink
url="formal-2.0/NetBSD-2.0.2.html">2.0.2</ulink></emphasis>.

</para>

<para>

For each major release there is a corresponding maintenance branch,
and after the release of the major release, bug fixes and features
with limited scope are ported back to the maintenance (stable) branch.
This maintenance branch will after a while give rise to formal minor
releases, e.g. <emphasis role="bold">2.1</emphasis>.  A minor release
is generally more reliable than -current of the same date, but is
missing features compared to -current.

</para>

<para>

NetBSD has with the release of NetBSD 2.0 introduced the concept of
security/critical releases.  These are created from CVS branches which
are branched off the release points for major and minor releases.
These particular maintenance branches only receive bug fixes which
either fix security problems or other critical problems.  This is
illustrated in the graph showing <ulink url="#graph1">the release
branches</ulink>.

</para>


</listitem>
</varlistentry>

<varlistentry>

<term id="maintenance">
      <emphasis role="bold">Maintenance branches</emphasis>
</term>
<listitem>

<para>
Starting with NetBSD 2.0, maintenance branches come in two flavours:

<orderedlist>

  <listitem>Maintenance branches which will develop into the next
  minor release, which we call <emphasis>stable</emphasis> branches,
  and which is reflected in the version designation along this branch,
  e.g. <emphasis role="bold">2.0_STABLE</emphasis>, which will evolve
  into <emphasis role="bold">2.1</emphasis>.  The corresponding CVS
  branch is the same branch that was created from <ulink
  url="#current">NetBSD-current</ulink> and which gave rise to the
  corresponding previous major release.

  </listitem>

  <listitem id="security">Maintenance branches which will give rise to
  any security/critical release.  These are created from each major
  and minor release.  This is what we refer to as the
  <emphasis>security/critical</emphasis> branches.  Because the
  interval between application of fixes and the tagging of the
  corresponding release, there is no separate &quot;branch version
  designation&quot; for these branches, instead the version number
  will jump from e.g. <emphasis role="bold">3.1</emphasis> to
  <emphasis role="bold">3.1.1</emphasis>.  Versions in between used to
  be called e.g. <emphasis role="bold">2.0.0_STABLE</emphasis>, but
  since the NetBSD 3.0.2 and 3.1 releases they are called e.g.
  <emphasis role="bold">3.1.0_PATCH</emphasis>, to distinguish them
  more clearly from the above mentioned stable branches.

  </listitem>
</orderedlist>
</para>

<para>

What you will find on a <emphasis>stable</emphasis> branch is the last
release (major or minor) plus whatever bug fixes and enhancements
which will be going into the next minor release, pulled up from the
NetBSD-current development branch.  For example, if the latest release
is <emphasis role="bold">3.0</emphasis>, the CVS branch for it is
&quot;netbsd-3&quot; which can be thought of as containing an alpha
version of the following <emphasis role="bold">3.x</emphasis>
releases.

</para>

<para>

The security/critical branches only receive fixes for security
problems or other critical problems.  The aim is to provide such fixes
but at the same time minimize the set of other changes which would
otherwise get dragged in if one were to update along a stable branch.
For example, if the latest release is <emphasis
role="bold">2.0</emphasis>, the CVS tag for the corresponding
security/critical branch is &quot;netbsd-2-0&quot;, and will give rise
to <emphasis role="bold">2.0.1</emphasis> and any following <emphasis
role="bold">2.0.x</emphasis> security/critical releases.

</para>

<para>

The maintenance branch(es) can be considered an easy way to get the
most up to date fixes for a given release.

</para>

<para>

There are daily updated snapshots of the latest maintenance branches,
available via both CVS, FTP and SUP.  The directories <ulink
url="ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-release-3-0/">pub/NetBSD/NetBSD-release-3-0/</ulink>
and <ulink
url="ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-release-2-0/">pub/NetBSD/NetBSD-release-2-0/</ulink>
contain the extracted sources plus weekly updated tar files of both
the 3.0 and 2.0 release branches respectively.  These files are
created in a similar manner to those in the <ulink
url="ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-current/">/pub/NetBSD/NetBSD-current</ulink>
directory.

</para>
</listitem>
</varlistentry>


<varlistentry>
<term id="current"><ulink url="../releases/current.html">
      <emphasis role="bold">NetBSD-current</emphasis></ulink>
</term>

<listitem>

<para>

NetBSD-current is the main development branch of NetBSD, it's the
&quot;bleeding edge&quot; of NetBSD development.  The version number
is always in the form of <emphasis role="bold">N.99.M</emphasis>, and
will develop into the next formal <emphasis>major</emphasis> release.
E.g. <emphasis role="bold">3.99.23</emphasis> will eventually become
<emphasis role="bold">4.0_BETA</emphasis> (and later, <emphasis
role="bold">4.0</emphasis>).  In NetBSD-current, the last component in
the kernel's version number is incremented when one of the major
interfaces in the kernel or between the kernel and userland is
changed.

</para>

<para>

NetBSD-current is available via <ulink
url="ftp://ftp.NetBSD.org/pub/NetBSD/README.sup">SUP</ulink>, <ulink
url="http://www.NetBSD.org/docs/current/#using-anoncvs-pserver">CVS</ulink>,
<ulink url="http://cvsweb.NetBSD.org/">cvsweb</ulink>, and <ulink
url="ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-current/">FTP</ulink>.

</para>

<para>

You should be aware that in BSD CSRG terms, -current is normally
an alpha quality distribution. It isn't even guaranteed to
compile.

</para>
</listitem>
</varlistentry>


<varlistentry>

<term id="snapshot">
      <emphasis role="bold">Snapshots</emphasis>
</term>
<listitem>

<para>
Binary snapshots of the latest release branch and -current are
available from <snapshot />.
</para>

<para>

Ad-hoc snapshots may also be made by a port maintainer and can be of
NetBSD-current or maintenance branches. Usually the easiest way to
start tracking -current is by installing a recent snapshot.

</para>

</listitem>
</varlistentry>
</variablelist>

<html:hr/>

<sect2 id="graph1">
<title>Overview of NetBSD release branches</title>

<para>
<html:img src="../images/graphs/release-graph.gif"
    border="0" width="813" height="1085" alt="release graph"/>
</para>

</sect2>

<html:hr/>

<sect2 id="old-branches">
<title>The old NetBSD release numbering scheme</title>

<para>

Up until the NetBSD 2.0 release, we used a slightly different release
numbering scheme.  In that scheme, the major releases were numbered as
<emphasis role="bold">1.5</emphasis> and <emphasis
role="bold">1.6</emphasis>, and the minor releases were numbered as
<emphasis role="bold">1.4.3</emphasis> and <emphasis
role="bold">1.6.2</emphasis>.  The version designations for
NetBSD-current would be formed by the previous major version and one
or two letters, such as <emphasis role="bold">1.6B</emphasis> or
<emphasis role="bold">1.6ZA</emphasis>.

</para>

<para>

The following figure illustrates the relationship between the earlier
NetBSD releases and the CVS branch names and CVS tags.

</para>

<para>
<html:img src="../images/graphs/old-release-branches.gif"
     border="0" width="542" height="540" alt="release branches"/>
</para>

</sect2>


<sect2 id="quirk-2">
<title>The quirk related to NetBSD 2.0</title>

<para>
Lastly, an additional complication and deviation from the above rules
is worth mentioning for completeness (and it also shows in the old
release branch graph above), and that is that even though the change
in release and CVS branch naming was done prior to the final release
of <emphasis role="bold">2.0</emphasis>, it was done after the point
where the release branch for the release was created.  Thus, the
initial branch tag for the <emphasis role="bold">2.0</emphasis>
release was <emphasis>netbsd-2-0</emphasis>, and not
<emphasis>netbsd-2</emphasis>, as it should have been under the new
scheme.  However, the branch names following the release of <emphasis
role="bold">2.0</emphasis> are adhering to the new rules, i.e. the
branch leading up to <emphasis role="bold">2.0.1</emphasis> is
<emphasis>netbsd-2-0</emphasis> and the branch which will lead up to
<emphasis role="bold">2.1</emphasis> is <emphasis>netbsd-2</emphasis>.

</para>

</sect2>

</sect1>
</webpage>

