398 lines
14 KiB
XML
398 lines
14 KiB
XML
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
|
|
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
|
|
"../../../share/sgml/freebsd42.dtd" [
|
|
<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//EN" "../../share/sgml/entities.ent">
|
|
%entities;
|
|
<!ENTITY % freebsd.urls.absolute "INCLUDE">
|
|
]>
|
|
|
|
<article lang='en'>
|
|
<title>Choosing the FreeBSD Version That Is Right For You</title>
|
|
|
|
<articleinfo>
|
|
<authorgroup>
|
|
<author>
|
|
<surname>The FreeBSD Documentation Project</surname>
|
|
</author>
|
|
</authorgroup>
|
|
|
|
<legalnotice id="trademarks" role="trademarks">
|
|
&tm-attrib.freebsd;
|
|
</legalnotice>
|
|
|
|
<copyright>
|
|
<year>2005</year>
|
|
<holder>The FreeBSD Documentation Project</holder>
|
|
</copyright>
|
|
|
|
<pubdate>$FreeBSD$</pubdate>
|
|
|
|
<releaseinfo>$FreeBSD$</releaseinfo>
|
|
|
|
<abstract>
|
|
<para>So you have chosen to install &os;. Welcome! This
|
|
document is designed to help you to decide which version to
|
|
install.</para>
|
|
</abstract>
|
|
</articleinfo>
|
|
|
|
<sect1 id="background">
|
|
<title>Background</title>
|
|
|
|
<para>To decide which version of &os; is the best for your needs,
|
|
it is important to understand a few concepts about our development
|
|
and Release Engineering (<literal>RE</literal>) processes.</para>
|
|
|
|
<para>&os; is developed by a large group of individuals who are
|
|
almost entirely volunteers. The source code to the kernel and
|
|
the most common libraries and utilities is maintained in a
|
|
<firstterm>source control system</firstterm> and available for
|
|
the general public to download at any time. Separately, compiled
|
|
versions (<literal>binaries</literal>) are made available on a
|
|
recurring basis. Some of these binary versions undergo an
|
|
extensive testing process and are then termed a
|
|
<firstterm>release</firstterm>.</para>
|
|
|
|
<sect2 id="releases">
|
|
<title>Releases</title>
|
|
|
|
<para><literal>Releases</literal> are named with a <firstterm>major
|
|
version number</firstterm> and <firstterm>minor version
|
|
number</firstterm>.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The goal of a major release is to introduce a set of new
|
|
features. Inevitably, as new features are added to &os;, or as
|
|
older features are no longer useful or are dropped, it is
|
|
sometimes necessary to break compatibility with previous major
|
|
releases.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The goal of a minor release is primarily to fix bugs and
|
|
improve performance and stability. Keeping both source-level and binary compatibility
|
|
from one minor release to another is a priority. On occasion,
|
|
new features may be added to a minor release when it is
|
|
believed that these other goals will not be compromised.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>However, keep in mind that a <quote>release version</quote>
|
|
is merely a snapshot of the source tree at a particular point in
|
|
time which is given a particular name (or <emphasis>tag</emphasis>).
|
|
(For instance, the tag that Release Engineering assigned for the
|
|
5.4 release was <literal>RELENG_5_4_0_RELEASE</literal>.) Development
|
|
always continues on what is known as the <literal>HEAD</literal>
|
|
tag.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="branches">
|
|
<title>Branches</title>
|
|
|
|
<para>At the time of each release, a <firstterm>branch</firstterm>
|
|
is created, such as <literal>RELENG_5_4</literal>. Although
|
|
the source files named by <literal>RELENG_5_4_0_RELEASE</literal>
|
|
will never change, those on <literal>RELENG_5_4</literal> can,
|
|
by the adoption of changes from <literal>HEAD</literal> such
|
|
as fixes for security and other bugs.</para>
|
|
|
|
<para>During the life of each major release, another tag is
|
|
created such as <literal>RELENG_5</literal>. In addition
|
|
to security and other bug fixes, other new changes can be
|
|
brought in from <literal>HEAD</literal> so as to constitute
|
|
the changes for the next minor release in the sequence.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="stable-vs-current">
|
|
<title><firstterm>STABLE</firstterm> versus
|
|
<firstterm>CURRENT</firstterm></title>
|
|
|
|
<para>During the lifetime of each major release, an individual
|
|
branch may also be termed <literal>STABLE</literal>. This
|
|
indicates that the &os; Project believes that the branch is
|
|
of sufficiently proven quality to be used by a wide range of
|
|
users. Branches that need further testing before being widely
|
|
adopted are named <literal>CURRENT</literal>.</para>
|
|
|
|
<note><para>The &os; Project cannot in and of itself guarantee
|
|
that the software that it ships is <emphasis>stable</emphasis>
|
|
enough for any given installation. Only each individual user
|
|
can make that decision. Please keep in mind that the Project
|
|
is primarily composed of volunteers and is not able to offer
|
|
any kind of warranty of fitness.</para></note>
|
|
</sect2>
|
|
|
|
<sect2 id="ports-vs-packages">
|
|
<title><firstterm>Ports</firstterm> versus
|
|
<firstterm>Packages</firstterm></title>
|
|
|
|
<para>Separately from the files distributed above, &os;
|
|
supports thousands of applications that are developed by third
|
|
parties outside of the project itself. (Examples include
|
|
windowing systems, Internet browsers, email programs, office
|
|
suites, and so forth.) In general, the project itself does
|
|
not develop this software, only the framework to allow these
|
|
programs to be installed (termed the <firstterm>Ports
|
|
Collection</firstterm>). Applications may be installed
|
|
either from source, if its licensing terms allow such
|
|
redistribution (these are called <emphasis>ports</emphasis>),
|
|
or as compiled binaries if allowed (these are called
|
|
<emphasis>packages</emphasis>).</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="past-schedules">
|
|
<title>Release Scheduling In The Past</title>
|
|
|
|
<para>During the development and release of &os; 5.X, many lessons
|
|
were learned which only became clear in retrospect. The goals
|
|
of the 5.X series were very aggressive, and included:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>To provide support for Symmetric MultiProcessing (SMP)
|
|
machines;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To increase performance by adopting a new strategy
|
|
for dealing with resource contention in the kernel;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To add several new processor architectures;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To introduce a new threading model;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To introduce a new scheduler;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To add support for new technologies such as power
|
|
management (especially important for laptops); and,
|
|
most critically,</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Not to declare the release series as <literal>STABLE</literal>
|
|
until all these tasks were finished.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>This led to a situation where it was several years between
|
|
the time that a release in the 4.X series was declared
|
|
<literal>STABLE</literal> and that a release in the 5.X series
|
|
was declared <literal>STABLE</literal>. This had several
|
|
undesirable effects:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The number of simultaneous feature-set changes made it
|
|
very difficult to isolate one set of changes for merging
|
|
back into the <literal>STABLE</literal> branch;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>which meant that users who absolutely had to have certain
|
|
new features (for instance, to be able to run on modern hardware)
|
|
wound up adopting (for instance) &os; 5.2.1 even though it was
|
|
advertised as a developer-only release, and regardless of the
|
|
fact that a <literal>CURRENT</literal> release was not really
|
|
suitable for their needs.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>In the cases where backmerges were made, this put the
|
|
developers in a position of trying to support features on a
|
|
version that they themselves were not using as their primary
|
|
development platform.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The time lag also meant that when 5.3 was finally declared
|
|
as the latest <literal>STABLE</literal> release, the accumulated
|
|
weight of changes made the upgrading process very painful.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>To put it bluntly, no one was satisfied with this result.</para>
|
|
|
|
<para>The lessons that were learned are:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>New major releases must have a smaller number of
|
|
feature-set changes and be released more often.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To the maximum extent possible, feature-set changes
|
|
should be isolated from each other. (This implies that
|
|
some development must take place outside of the main
|
|
tree and only be merged in when it will not destabilize
|
|
other simultaneous development.)</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Major releases should be targeted at a time
|
|
deadline rather than a feature-set deadline. If some
|
|
feature is not ready in time, then it should be disabled
|
|
by default and left for the next major release.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>By releasing smaller sets of changes more often, it is
|
|
also hoped that less time will be spent trying to merge features
|
|
from <literal>HEAD</literal> back into the latest
|
|
<literal>STABLE</literal> version (and thus trying to support
|
|
those features in more than one major version); and further, that
|
|
as the changes are more isolated, that the risk of introducing
|
|
more bugs by doing so is much less.</para>
|
|
|
|
<para>Also, by focusing on a time deadline rather than a
|
|
feature set, it should finally be possible for users, developers
|
|
of external applications, and the &os; developers themselves to
|
|
be able to better plan for the future.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="future-goals">
|
|
<title>Release Scheduling Goals Going Forward</title>
|
|
|
|
<para>Here are the current scheduling goals for the Project:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>To release a new major release every 18 months;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To release a new minor release every 4 months;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To provide prebuilt packages for the most recent minor
|
|
release of each major version;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>To provide security updates and other critical bug fixes
|
|
for the last several minor versions of each major version
|
|
(termed <firstterm>security branches</firstterm>).</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Due to the large number of possible combinations of installable
|
|
versions, it is not possible to support every version
|
|
indefinitely; this is due somewhat to the availability of machine
|
|
resources but primarily due to the amount of volunteer effort
|
|
that is available.</para>
|
|
|
|
<para>Interested readers should also see:</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><ulink url="&url.base;/releng/index.html#schedule"></ulink></term>
|
|
<listitem>
|
|
<para>The Release Engineering Schedule</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><ulink url="&url.base;/security/security.html#supported-branches"></ulink></term>
|
|
<listitem>
|
|
<para>The Security Branch Schedule</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>These documents go into much greater depth about the background and
|
|
rationale behind the decisions regarding the supported branches and the
|
|
lifetime of each branch.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="decision-points">
|
|
<title>How Do These Factors Affect My Decision?</title>
|
|
|
|
<para>The major factors that should affect your decision as to
|
|
which version to install include:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>What degree of stability does your installation need?</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How much effort do you wish to devote to upgrading?</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How long do you intend to stay on a particular version
|
|
between upgrades?</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How important is security to your installation?</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Will you be installing from source, or from binaries?</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Are you willing to help participate in the &os; development
|
|
process?</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Here are some rough guidelines to help you in your decision:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>If you have a short-term need, would benefit from the highest degree of
|
|
stability currently available, and are not able to devote many
|
|
resources to upgrading, then you will probably want to install
|
|
the latest <literal>STABLE</literal> minor release and remain
|
|
with that. Depending on your security needs, you may or may not
|
|
wish to track changes to that branch as they are released.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>If you have a short-term need, and feature completeness or
|
|
the best levels of security are most important to you, and you
|
|
are willing to spend time upgrading, you may wish to track the
|
|
latest <literal>STABLE</literal> branch.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>If you are not immediately planning on going into
|
|
production, you are willing to work through a certain number
|
|
of problems, and a new major release is upcoming within the
|
|
next few months, you may wish to investigate installing that
|
|
branch to help the project to test it and stabilize it
|
|
to make it the best release possible in the medium to long
|
|
term.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Only if you are willing to install from source, and spend
|
|
time debugging problems with the base system and follow up
|
|
with problem reports, and track the mailing list that deals
|
|
with such issues, should you consider tracking
|
|
<literal>HEAD</literal>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 id="conclusion">
|
|
<title>Conclusion</title>
|
|
|
|
<para>We hope that this article serves as a useful starting point
|
|
for understanding the &os; development model and deciding what version
|
|
is right for your needs.</para>
|
|
</sect1>
|
|
</article>
|