doc/en_US.ISO8859-1/articles/building-products/article.sgml
Joseph Koshy 7d3b7c99a9 Warn the reader that this article dates from 2005 and is somewhat
out of date.

Reviewed by:	keramida
2010-01-15 07:52:25 +00:00

1066 lines
44 KiB
Text

<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % articles.ent PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Articles Entity Set//EN">
%articles.ent;
]>
<article>
<articleinfo>
<title>Building Products with FreeBSD</title>
<authorgroup>
<author>
<firstname>Joseph</firstname>
<surname>Koshy</surname>
<affiliation>
<orgname>The FreeBSD Project</orgname>
<address><email>jkoshy@FreeBSD.org</email></address>
</affiliation>
</author>
</authorgroup>
<pubdate>$FreeBSD$</pubdate>
<legalnotice id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<title>Abstract</title>
<para>The FreeBSD project is a worldwide, voluntary, and
collaborative project, which develops a portable and high-quality
operating system. The FreeBSD project distributes the source
code for its product under a liberal license, with the
intention of encouraging the use of its code. Collaborating
with the FreeBSD project can help organizations reduce their
time to market, reduce engineering costs and improve their
product quality.</para>
<para>This article examines the issues in using FreeBSD code in
appliances and software products. It highlights the
characteristics of FreeBSD that make it an excellent substrate
for product development. The article concludes by suggesting a
few <quote>best practices</quote> for organizations
collaborating with the FreeBSD project.</para>
</abstract>
</articleinfo>
<sect1 id="introduction">
<title>Introduction</title>
<para>FreeBSD today is well-known as a high-performance server
operating system. It is deployed on millions of web servers and
internet-facing hosts worldwide. FreeBSD code also forms an
integral part of many products, ranging from appliances such as
network routers, firewalls, and storage devices, to personal
computers. Portions of FreeBSD have also been used in
commercial shrink-wrapped software (see
<xref linkend="freebsd-intro">).</para>
<para>In this article we look at the <ulink
url="&url.base;/">FreeBSD project</ulink> as a software
engineering resource&mdash;as a collection of building blocks
and processes which you can use to build products.</para>
<para>While FreeBSD's source is distributed freely to the public,
to fully enjoy the benefits of the project's work, organizations
need to <emphasis>collaborate</emphasis> with the project. In
subsequent sections of this article we discuss effective means
of collaboration with the project and the pitfalls that need to
be avoided while doing so.</para>
<formalpara>
<title>Caveat Reader</title>
<para>The author believes that the characteristics of the FreeBSD
Project listed in this article were substantially true at the
time the article was conceived and written (2005). However, the
reader should keep in mind that the practices and processes used
by open-source communities can change over time, and that the information
in this article should therefore be taken as indicative rather
than normative.</para>
</formalpara>
<sect2>
<title>Target Audience</title>
<para>This document would be of interest to the following broad
groups of people:</para>
<itemizedlist>
<listitem>
<simpara>Decision makers in product companies looking at
ways to improve their product quality, reduce their time
to market and lower engineering costs in the long
term.</simpara>
</listitem>
<listitem>
<simpara>Technology consultants looking for best-practices
in leveraging <quote>open-source</quote>.</simpara>
</listitem>
<listitem>
<simpara>Industry observers interested in understanding the
dynamics of open-source projects.</simpara>
</listitem>
<listitem>
<simpara>Software developers seeking to use FreeBSD and
looking for ways to contribute back.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Article Goals</title>
<para>After reading this article you should have:</para>
<itemizedlist>
<listitem>
<simpara>An understanding of the goals of the FreeBSD
Project and its organizational structure.</simpara>
</listitem>
<listitem>
<simpara>An overview of the available technology in the
project.</simpara>
</listitem>
<listitem>
<simpara>An understanding of its development model and
release engineering processes.</simpara>
</listitem>
<listitem>
<simpara>An understanding of how conventional corporate
software development processes differ from that used in
the FreeBSD project.</simpara>
</listitem>
<listitem>
<simpara>Awareness of the communication channels used by the
project and the level of transparency you can
expect.</simpara>
</listitem>
<listitem>
<simpara>Awareness of optimal ways of working with the
project&mdash;how best to reduce engineering costs,
improve time to market, manage security vulnerabilities,
and preserve future compatibility with your product as the
FreeBSD project evolves.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Article Structure</title>
<para>The rest of the article is structured as follows:</para>
<itemizedlist>
<listitem>
<simpara><xref linkend="freebsd-intro"> introduces the
FreeBSD project, explores its organizational structure,
key technologies and release engineering
processes.</simpara>
</listitem>
<listitem>
<simpara><xref linkend="freebsd-collaboration"> describes
ways to collaborate with the FreeBSD project. It examines
common pitfalls encountered by corporates working with
voluntary projects like FreeBSD.</simpara>
</listitem>
<listitem>
<simpara><xref linkend="conclusion"> concludes.</simpara>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 id="freebsd-intro">
<title>FreeBSD as a set of building blocks</title>
<para>FreeBSD makes an excellent foundation on which to build
products:</para>
<itemizedlist>
<listitem>
<simpara>FreeBSD source code is distributed under a liberal
BSD license facilitating its adoption in commercial products
<citation>Mon2005</citation> with minimum hassle.</simpara>
</listitem>
<listitem>
<simpara>The FreeBSD project has excellent engineering
practices that can be leveraged.</simpara>
</listitem>
<listitem>
<simpara>The project offers exceptional transparency into its
workings, allowing organizations using its code to plan
effectively for the future.</simpara>
</listitem>
<listitem>
<simpara>The culture of the FreeBSD project, carried over from
the Computer Science Research Group at The University of
California, Berkeley <citation>McKu1999-1</citation>,
fosters high-quality work. Some features in FreeBSD define
the state of the art.</simpara>
</listitem>
</itemizedlist>
<simpara><citation>GoldGab2005</citation> examines the business
reasons for using open-source in greater detail. For
organizations, the benefits of using FreeBSD components in their
products include a shorter time to market, lower development
costs and lower development risks. </simpara>
<sect2>
<title>Building with FreeBSD</title>
<simpara>Here are a few ways organizations have used
FreeBSD:</simpara>
<itemizedlist>
<listitem>
<simpara>As an upstream source for tested code for libraries
and utilities.</simpara>
<simpara>By being <quote>downstream</quote> of the project,
organizations leverage the new features, bug fixes and
testing that the upstream code receives.</simpara>
</listitem>
<listitem>
<simpara>As an embedded OS (for example, for an OEM router
and firewall device). In this model, organizations use a
customized FreeBSD kernel and application program set
along with a proprietary management layer for their
device. OEMs benefit from new hardware support being added
by the FreeBSD project upstream, and from the testing that
the base system receives.</simpara>
<simpara>FreeBSD ships with a self-hosting development
environment that allows easy creation of such
configurations.</simpara>
</listitem>
<listitem>
<simpara>As a Unix compatible environment for the management
functions of high-end storage and networking devices,
running on a separate processor <quote>blade</quote>.</simpara>
<simpara>FreeBSD provides the tools for creating dedicated
OS and application program images. Its implementation of
a BSD unix API is mature and tested. FreeBSD can also
provide a stable cross-development environment for the
other components of the high-end device.</simpara>
</listitem>
<listitem>
<simpara>As a vehicle to get widespread testing and support
from a worldwide team of developers for non-critical
<quote>intellectual property</quote>.</simpara>
<simpara>In this model, organizations contribute useful
infrastructural frameworks to the FreeBSD project (for
example, see &man.netgraph.3;). The widespread
exposure that the code gets helps to quickly identify
performance issues and bugs. The involvement of
top-notch developers also leads to useful extensions to
the infrastructure that the contributing organization also
benefits from.</simpara>
</listitem>
<listitem>
<simpara>As a development environment supporting
cross-development for embedded OSes like <ulink
url="http://www.rtems.com/">RTEMS</ulink> and <ulink
url="http://ecos.sourceware.org/">eCOS</ulink>.</simpara>
<simpara>There are many full-fledged development environments
in the &os.numports;-strong collection of applications ported and
packaged with FreeBSD.</simpara>
</listitem>
<listitem>
<simpara>As a way to support a Unix-like API in an otherwise
proprietary OS, increasing its palatability for
application developers.</simpara>
<simpara>Here parts of FreeBSD's kernel and application
programs are <quote>ported</quote> to run alongside
other tasks in the proprietary OS. The availability of a
stable and well tested <trademark>Unix</trademark> API
implementation can reduce the effort needed to port
popular applications to the proprietary OS. As FreeBSD
ships with high-quality documentation for its internals
and has effective vulnerability management and release
engineering processes, the costs of keeping upto-date are
kept low.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="freebsd-technologies">
<title>Technologies</title>
<para>There are a large number of technologies supported by the
FreeBSD project. A selection of these are listed
below:</para>
<itemizedlist>
<listitem>
<simpara>A complete system that can cross-host itself for
the following architectures: alpha (up to &os; version 6.X), amd64, ia64, i386,
sparc64, powerpc (see &man.build.7;).</simpara>
</listitem>
<listitem>
<simpara>Support for the following technologies, protocols
and standards: <!-- Keyword soup. Urk. -->
<acronym>ATA</acronym>, <acronym>ATAPI</acronym>,
<acronym>ATM</acronym>, <trademark>Bluetooth</trademark>,
<acronym>CAM</acronym>, <trademark>CardBus</trademark>,
<acronym>DHCP</acronym>, <acronym>DNS</acronym>,
<trademark>EISA</trademark>,
<trademark>Ethernet</trademark>, <acronym>FDDI</acronym>,
Fibre Channel, <acronym>GPIB</acronym>, IEEE 1394, IPv4,
IPv6, <acronym>IPSEC</acronym>,
<trademark>IPX</trademark>, <acronym>ISDN</acronym>,
<acronym>MAC</acronym>, <acronym>NIS</acronym>,
<acronym>NFS</acronym>, OpenSSH, <acronym>OPIE</acronym>,
<acronym>PAM</acronym>, <trademark>PCI</trademark>,
<acronym>PCMCIA</acronym>, <trademark>POSIX</trademark>,
<acronym>PnP</acronym>, <acronym>RAID</acronym>,
<acronym>RPC</acronym>, <acronym>SATA</acronym>,
<acronym>SCSI</acronym>, <acronym>SMB</acronym>,
<acronym>TCP</acronym>, <acronym>USB</acronym>,
<acronym>VESA</acronym>, <acronym>VLAN</acronym>,
<acronym>VLB</acronym>,
<trademark>WebNFS</trademark>.</simpara>
</listitem>
<listitem>
<simpara>A modular symmetric multiprocessing capable kernel,
with loadable kernel modules and a flexible and easy to
use configuration system.</simpara>
</listitem>
<listitem>
<simpara>Support for emulation of
<trademark>Linux</trademark> and SVR4 binaries at near
machine speeds. Support for binary
<trademark>Windows</trademark> (<acronym>NDIS</acronym>)
network drivers.</simpara>
</listitem>
<listitem>
<simpara>Libraries for many programming tasks: archivers,
FTP and HTTP support, thread support, in addition to a
full <trademark>POSIX</trademark> like programming
environment.</simpara>
</listitem>
<listitem>
<simpara>Advanced security features: Mandatory Access
Control (&man.mac.9;), jails (&man.jail.2;),
<acronym>ACL</acronym>s, and in-kernel
cryptographic device support.</simpara>
</listitem>
<listitem>
<simpara>Advanced networking features: firewall-ing, QoS
management, high-performance TCP/IP networking with
support for many advanced features.</simpara>
<simpara>FreeBSD's in-kernel Netgraph (&man.netgraph.4;)
framework allows kernel networking modules to be connected
together in flexible ways.</simpara>
</listitem>
<listitem>
<simpara>Support for advanced storage technologies: Fibre
Channel, <acronym>SCSI</acronym>, software and hardware
RAID, <acronym>ATA</acronym> and
<acronym>SATA</acronym>.</simpara>
<simpara>FreeBSD supports a number of filesystems, and its
native UFS2 filesystem supports soft updates, snapshots and
very large filesystem sizes (16TB per filesystem)
<citation>McKu1999</citation>.</simpara>
<simpara>FreeBSD's in-kernel <acronym>GEOM</acronym> (&man.geom.4;)
framework allows kernel storage modules to be
composed in flexible ways.</simpara>
</listitem>
<listitem>
<simpara>Over &os.numports; ported applications, both commercial
and open-source, managed via the FreeBSD ports
collection.</simpara>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Organizational Structure</title>
<para>FreeBSD's organizational structure is
non-hierarchical.</para>
<para>There are essentially two kinds of contributors to
FreeBSD, general users of FreeBSD, and developers with write
access (known as <firstterm>committers</firstterm> in the
jargon) to the source base.</para>
<para>There are many thousands of contributors in the first
group; the vast majority of contributions to FreeBSD come from
individuals in this group. Commit rights (write access) to
the repository are granted to individuals who contribute
consistently to the project. Commit rights come with
additional responsibilities, and new committers are assigned
mentors to help them learn the ropes.</para>
<figure>
<title>FreeBSD Organization</title>
<mediaobject>
<imageobject>
<imagedata fileref="freebsd-organization" format="PIC">
</imageobject>
</mediaobject>
</figure>
<para>Conflict resolution is performed by a nine member
<quote>Core Team</quote> that is elected from the group of
committers.</para>
<para>FreeBSD does not have <quote>corporate</quote> committers.
Individual committers are required to take responsibility for
the changes they introduce to the code. The <ulink
url="&url.articles.committers-guide;">FreeBSD Committer's
guide</ulink> <citation>ComGuide</citation> documents the
rules and responsibilities for committers.</para>
<para>FreeBSD's project model is examined in detail in
<citation>Nik2005</citation>.</para>
</sect2>
<sect2>
<title>FreeBSD Release Engineering Processes</title>
<para>FreeBSD's release engineering processes play a major role
in ensuring that its released versions are of a high quality.
At any point of time, FreeBSD's volunteers support multiple
code lines (<xref linkend="fig-freebsd-branches">):</para>
<itemizedlist>
<listitem>
<simpara>New features and disruptive code enters on the
development branch, also known as the
<firstterm>-CURRENT</firstterm> branch.</simpara>
</listitem>
<listitem>
<simpara><firstterm>-STABLE</firstterm> branches are code
lines that are branched from HEAD at regular intervals.
Only tested code is allowed onto a -STABLE branch. New
features are allowed once they have been tested and
stabilized in the -CURRENT branch.</simpara>
</listitem>
<listitem>
<simpara><firstterm>-RELEASE</firstterm> branches are
maintained by the FreeBSD security team. Only bug fixes
for critical issues are permitted onto -RELEASE
branches.</simpara>
</listitem>
</itemizedlist>
<figure id="fig-freebsd-branches">
<title>FreeBSD Release Branches</title>
<mediaobject>
<imageobject>
<imagedata fileref="freebsd-branches" format="EPS">
</imageobject>
</mediaobject>
</figure>
<para>Code lines are kept alive for as long as there is user and
developer interest in them.</para>
<para>Machine architectures are grouped into
<quote>tiers</quote>; <firstterm>Tier 1</firstterm>
architectures are fully supported by the project's release
engineering and security teams, <firstterm>Tier 2</firstterm>
architectures are supported on a best effort basis, and
experimental architectures comprise <firstterm>Tier
3</firstterm>. The list of <ulink
url="&url.articles.committers-guide;/archs.html">supported
architectures</ulink> is part of the FreeBSD documentation
collection.</para>
<para>The release engineering team publishes a <ulink
url="&url.base;/releng/">road map</ulink> for future
releases of FreeBSD on the project's web site. The dates laid
down in the road map are not deadlines; FreeBSD is released
when its code and documentation are ready.</para>
<para>FreeBSD's release engineering processes are described in
<citation>RelEngDoc</citation>.</para>
</sect2>
</sect1>
<sect1 id="freebsd-collaboration">
<title>Collaborating with FreeBSD</title>
<para>Open-source projects like FreeBSD offer finished code of a
very high quality <citation>Cov2005</citation>. Previous
studies have examined the effect of source code availability on
software development <citation>Com2004</citation>.</para>
<para>While access to quality source code can reduce the cost of
initial development, in the long-term the costs of managing
change begin to dominate. As computing environments change over
the years and new security vulnerabilities are discovered, your
product too needs to change and adapt. Using open-source code is
best viewed not as a one-off activity, but as an
<emphasis>ongoing process</emphasis>. The best projects to
collaborate with are the ones that are
<emphasis>live</emphasis>; i.e., with an active community, clear
goals and a transparent working style.</para>
<itemizedlist>
<listitem>
<simpara>FreeBSD has an active developer community around it.
At the time of writing there are many thousands of
contributors from every populated continent in the world and
over 300 individuals with write access to the project's
source repositories.</simpara>
</listitem>
<listitem>
<simpara>The goals of the FreeBSD project are
<citation>Hub1994</citation>:
<itemizedlist spacing="compact">
<listitem>
<simpara>To develop a high-quality operating system for
popular computer hardware, and,</simpara>
</listitem>
<listitem>
<simpara>To make our work available to all under a liberal
license.</simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara>FreeBSD enjoys an open and transparent working
culture. Nearly all discussion in the project happens by
email, on <ulink url="&a.mailman.listinfo;">public mailing
lists</ulink> that are also archived for posterity. The
project's policies are <ulink
url="&url.base;/internal/policies.html">documented</ulink>
and maintained under revision control. Participation in the
project is open to all.</simpara>
</listitem>
</itemizedlist>
<sect2 id="freebsd-org">
<title>Understanding FreeBSD culture</title>
<para>To be able to work effectively with the FreeBSD project,
you need to understand the project's culture.</para>
<para>Volunteer driven projects operate under different rules
than for-profit corporates. A common mistake that companies
make when venturing into the open-source world is that of
underplaying these differences.</para>
<!-- XXX using <formalpara> constructs is clunky, but I like using
<variablelist> even less -->
<formalpara>
<title>Motivation</title>
<para>Most contributions to FreeBSD are done voluntarily
without monetary rewards entering the picture. The factors
that motivate individuals are complex, ranging from
altruism, to an interest in solving the kinds of problems
that FreeBSD attempts to solve. In this environment,
<quote>elegance is never optional</quote>
<citation>Nor1993</citation>.</para>
</formalpara>
<formalpara>
<title>The Long Term View</title>
<para>FreeBSD traces its roots back nearly twenty years to the
work of the Computer Science Research Group at the
University of California Berkeley.<footnote>
<simpara>FreeBSD's <ulink
url="http://cvsweb.freebsd.org/">source
repository</ulink> contains a history of the project
since its inception, and there are <ulink
url="http://www.mckusick.com/csrg/">CDROMs
available</ulink> that contain earlier code from the
CSRG.</simpara>
</footnote> A number of the original CSRG developers remain
associated with the project.</para>
</formalpara>
<para>The project values long-term perspectives
<citation>Nor2001</citation>. A frequent acronym encountered
in the project is <acronym>DTRT</acronym>, which stands for
<quote>Do The Right Thing</quote>.</para>
<formalpara>
<title>Development Processes</title>
<para>Computer programs are tools for communication: at one
level programmers communicate their intentions using a
precise notation to a tool (a compiler) that translates
their instructions to executable code. At another level,
the same notation is used for communication of intent
between two programmers.</para>
</formalpara>
<para>Formal specifications and design documents are seldom used
in the project. Clear and well-written code and well-written
change logs (<xref linkend="fig-change-log">) are used in
their place. FreeBSD development happens by <quote>rough
consensus and running code</quote>
<citation>Carp1996</citation>.</para>
<figure id="fig-change-log">
<title>A sample change log entry</title>
<programlisting>
bde 2005-10-29 16:34:50 UTC
FreeBSD src repository
Modified files:
lib/msun/src e_rem_pio2f.c
Log:
Use double precision to simplify and optimize arg reduction for small
and medium size args too: instead of conditionally subtracting a float
17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always
subtract a double 33+53 bit one. The float version is now closer to
the double version than to old versions of itself &mdash; it uses the same
33+53 bit approximation as the simplest cases in the double version,
and where the float version had to switch to the slow general case at
|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the
double version.
This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and
2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.
Revision Changes Path
1.14 +22 -97 src/lib/msun/src/e_rem_pio2f.c
</programlisting>
</figure>
<simpara>Communication between programmers is enhanced by the
use of a common coding standard &man.style.9;.</simpara>
<formalpara>
<title>Communication Channels</title>
<para>FreeBSD's contributors are spread across the world.
Email (and to a lesser extent, IRC) is the preferred means
of communication in the project.</para>
</formalpara>
</sect2>
<sect2>
<title>Best Practices for collaborating with the FreeBSD
project</title>
<para>We now look at a few best practices for making the best
use of FreeBSD in product development.</para>
<variablelist>
<varlistentry>
<term>Plan for the long term</term>
<listitem>
<para>Setup processes that help in tracking the development of
FreeBSD. For example:</para>
<formalpara>
<title>Track FreeBSD source code</title>
<para>The project makes it easy to mirror its CVS
repository using <ulink
url="&url.articles.cvsup-advanced;"><!--
--><application>CVSup</application></ulink>. Having
the complete history of the source is useful when
debugging complex problems and offers valuable insight
into the intentions of the original developers. Use a
capable source control system that allows you to
easily merge changes between the upstream FreeBSD code
base and your own in-house code.</para>
</formalpara>
<para><xref linkend="fig-cvs-annotate"> shows a portion of
an annotated listing of the file referenced by the
change log in <xref linkend="fig-change-log">. The
ancestry of each line of the source is clearly visible.
Annotated listings showing the history of every file
that is part of FreeBSD are <ulink
url="http://cvsweb.freebsd.org/">available on the
web</ulink>.</para>
<figure id="fig-cvs-annotate">
<title>An annotated source listing generated using <command>cvs annotate</command></title>
<programlisting>
#LINE #REV #WHO #DATE #TEXT
62 1.1 (jkh 19-Aug-94): int32_t __ieee754_rem_pio2f(float x, float *y)
63 1.1 (jkh 19-Aug-94): {
64 1.14 (bde 29-Oct-05): double z,w,t,r,fn;
65 1.13 (bde 29-Oct-05): double tx[3];
66 1.14 (bde 29-Oct-05): int32_t e0,i,nx,n,ix,hx;
67 1.1 (jkh 19-Aug-94):
68 1.1 (jkh 19-Aug-94): GET_FLOAT_WORD(hx,x);
69 1.1 (jkh 19-Aug-94): ix = hx&0x7fffffff;
70 1.1 (jkh 19-Aug-94): if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
71 1.1 (jkh 19-Aug-94): {y[0] = x; y[1] = 0; return 0;}
72 1.14 (bde 29-Oct-05): /* 33+53 bit pi is good enough for special and medium size cases */
73 1.2 (bde 07-Apr-95): if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
74 1.14 (bde 29-Oct-05): if(hx>0) {
75 1.15 (bde 06-Nov-05): z = x - pio2;
76 1.15 (bde 06-Nov-05): n = 1;
77 1.15 (bde 06-Nov-05): } else {
78 1.15 (bde 06-Nov-05): z = x + pio2;
79 1.15 (bde 06-Nov-05): n = 3;
80 1.9 (bde 08-Oct-05): }
81 1.15 (bde 06-Nov-05): y[0] = z;
82 1.15 (bde 06-Nov-05): y[1] = z - y[0];
83 1.15 (bde 06-Nov-05): return n;
84 1.15 (bde 06-Nov-05): }
85 1.15 (bde 06-Nov-05): if(ix<0x407b53d1) { /* |x| < 5*pi/4, special case with n=+-2 */
</programlisting>
</figure>
<formalpara>
<title>Use a gatekeeper</title>
<para>Appoint a <firstterm>gatekeeper</firstterm> to
monitor FreeBSD development, to keep an eye out for
changes that could potentially impact your
products.</para>
</formalpara>
<formalpara>
<title>Report bugs upstream</title>
<para>If you notice bug in the FreeBSD code that you are
using, file a <ulink url="&url.base;/send-pr.html">bug
report</ulink>. This step helps ensure that you do
not have to fix the bug the next time you take a code
drop from upstream.</para>
</formalpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Leverage FreeBSD's release engineering efforts</term>
<listitem>
<simpara>Use code from a -STABLE development branch of
FreeBSD. These development branches are formally
supported by FreeBSD's release engineering and security
teams and comprise of tested code.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Donate code to reduce costs</term>
<listitem>
<simpara>A major proportion of the costs associated with
developing products is that of doing maintenance. By
donating non-critical code to the project, you benefit
by having your code see much wider exposure than it
would otherwise get. This in turn leads to more bugs
and security vulnerabilities being flushed out and
performance anomalies being identified and fixed.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Get support effectively</term>
<listitem>
<simpara>For products with tight deadlines, it is
recommended that you hire or enter into a consulting
agreement with a developer or firm with FreeBSD
experience. The &a.jobs; is a useful communication
channel to find talent. The FreeBSD project maintains a
<ulink
url="&url.base;/commercial/consult_bycat.html">gallery
of consultants and consulting firms</ulink>
undertaking FreeBSD work. The <ulink
url="http://www.bsdcertification.org/">BSD
Certification Group</ulink> offers certification for
all the major BSD derived OSes.</simpara>
<simpara>For less critical needs, you can ask for help on
the <ulink
url="http://lists.FreeBSD.org/mailman/listinfo">project
mailing lists</ulink>. A useful guide to follow when
asking for help is given in
<citation>Ray2004</citation>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Publicize your involvement</term>
<listitem>
<simpara>You are not required to publicize your use of
FreeBSD, but doing so helps both your effort as well as
that of the project.</simpara>
<simpara>Letting the FreeBSD community know that your
company uses FreeBSD helps improve your chances of
attracting high quality talent. A large roster of
support for FreeBSD also means more mind share for it
among developers. This in turn yields a healthier
foundation for your future.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>Support FreeBSD developers</term>
<listitem>
<simpara>Sometimes the most direct way to get a desired
feature into FreeBSD is to support a developer who is
already looking at a related problem. Help can range
from hardware donations to direct financial assistance.
In some countries, donations to the FreeBSD project
enjoy tax benefits. The project has a dedicated <ulink
url="&url.base;/donations/">donations liaison</ulink>
to assist donors. The project also maintains a web page
where developers <ulink
url="&url.base;/donations/wantlist.html">list their
needs</ulink>.
</simpara>
<simpara>As a policy the FreeBSD project <ulink
url="&url.articles.contributors;">acknowledges</ulink>
all contributions received on its web site.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 id="conclusion">
<title>Conclusion</title>
<para>The FreeBSD project's goals are to create and give away the
source code for a high-quality operating system. By working
with the FreeBSD project you can reduce development costs and
improve your time to market in a number of product development
scenarios.</para>
<para>We examined the characteristics of the FreeBSD project that
make it an excellent choice for being part of an organization's
product strategy. We then looked at the prevailing culture of
the project and examined effective ways of interacting with its
developers. The article concluded with a list of best-practices
that could help organizations collaborating with the
project.</para>
</sect1>
<bibliography>
<biblioentry>
<abbrev>Carp1996</abbrev>
<citetitle><ulink url="http://www.ietf.org/rfc/rfc1958.txt">The
Architectural Principles of the Internet</ulink></citetitle>
<author>
<firstname>B.</firstname>
<surname>Carpenter</surname>
<affiliation>
<orgname>The Internet Architecture Board</orgname>
</affiliation>
</author>
<copyright>
<year>1996</year>
</copyright>
</biblioentry>
<biblioentry xreflabel="Com2004">
<abbrev>Com2004</abbrev>
<citetitle><ulink
url="http://csdl.computer.org/comp/mags/so/2004/01/s1028.pdf">How
is Open-Source Affecting Software
Development?</ulink></citetitle>
<authorgroup>
<author>
<firstname>Diomidis</firstname>
<surname>Spinellis</surname>
</author>
<author>
<firstname>Clemens</firstname>
<surname>Szyperski</surname>
</author>
</authorgroup>
<title>IEEE Computer</title>
<copyright>
<year>Jan/Feb 2004</year>
</copyright>
<publisher>
<publishername>IEEE Computer Society</publishername>
</publisher>
</biblioentry>
<biblioentry>
<abbrev>ComGuide</abbrev>
<citetitle><ulink
url="&url.articles.committers-guide;">Committer's
Guide</ulink></citetitle>
<authorgroup>
<corpauthor>The FreeBSD Project</corpauthor>
</authorgroup>
<copyright>
<year>2005</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Cov2005</abbrev>
<citetitle><ulink
url="http://www.coverity.com/news/nf_news_06_27_05_story_9.html">Coverity
study on kernel security holes in Linux and FreeBSD</ulink></citetitle>
<authorgroup>
<corpauthor>Coverity Inc.</corpauthor>
</authorgroup>
<copyright>
<year>2005</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>GoldGab2005</abbrev> <citetitle><ulink
url="http://dreamsongs.com/IHE/IHE.html">Innovation Happens
Elsewhere: Open Source as Business Strategy</ulink></citetitle>
<authorgroup>
<author>
<firstname>Ron</firstname>
<surname>Goldman</surname>
</author>
<author>
<firstname>Richard</firstname>
<surname>Gabriel</surname>
</author>
</authorgroup>
<copyright>
<year>2005</year>
</copyright>
<isbn>ISBN 1558608893</isbn>
<publisher>
<publishername>Morgan-Kaufmann</publishername>
</publisher>
</biblioentry>
<biblioentry xreflabel="Hub1994">
<!-- XXX Get the date of this article right -->
<abbrev>Hub1994</abbrev>
<citetitle><ulink url="&url.articles.contributing;">Contributing
to the FreeBSD Project</ulink></citetitle>
<author>
<firstname>Jordan</firstname>
<surname>Hubbard</surname>
</author>
<copyright>
<year>1994&mdash;2005</year>
</copyright>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
</biblioentry>
<biblioentry>
<abbrev>McKu1999</abbrev>
<citetitle><ulink
url="http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html">Soft
Updates: A Technique for Eliminating Most Synchronous Writes
in the Fast Filesystem</ulink></citetitle>
<authorgroup>
<author>
<firstname>Kirk</firstname>
<surname>McKusick</surname>
</author>
<author>
<firstname>Gregory</firstname>
<surname>Ganger</surname>
</author>
</authorgroup>
<confgroup>
<conftitle>USENIX Annual Technical Conference</conftitle>
</confgroup>
<copyright>
<year>1999</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>McKu1999-1</abbrev>
<citetitle><ulink
url="http://www.oreilly.com/catalog/opensources/book/kirkmck.html"
>Twenty Years of Berkeley Unix: From AT&amp;T-Owned to
Freely Redistributable</ulink></citetitle>
<authorgroup>
<author>
<firstname>Marshall Kirk</firstname>
<surname>McKusick</surname>
</author>
</authorgroup>
<title><ulink
url="http://www.oreilly.com/catalog/opensources/book/toc.html">Open
Sources: Voices from the Open Source
Revolution</ulink></title>
<isbn>ISBN 1-56592-582-3</isbn>
<publisher>
<publishername>O'Reilly Inc.</publishername>
</publisher>
<copyright>
<year>1993</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Mon2005</abbrev>
<citetitle><ulink url="&url.articles.bsdl-gpl;/article.html">Why you should
use a BSD style license for your Open Source
Project</ulink></citetitle>
<author>
<firstname>Bruce</firstname>
<surname>Montague</surname>
</author>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
<copyright>
<year>2005</year>
</copyright>
</biblioentry>
<biblioentry xreflabel="Nik2005">
<abbrev>Nik2005</abbrev>
<citetitle><ulink url="&url.books.dev-model;/book.html">A
project model for the FreeBSD Project</ulink></citetitle>
<author>
<firstname>Niklas</firstname>
<surname>Saers</surname>
</author>
<copyright>
<year>2005</year>
</copyright>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
</biblioentry>
<biblioentry xreflabel="Nor1993">
<abbrev>Nor1993</abbrev>
<citetitle><ulink
url="http://www.norvig.com/luv-slides.ps">Tutorial
on Good Lisp Programming Style</ulink></citetitle>
<authorgroup>
<author>
<firstname>Peter</firstname>
<surname>Norvig</surname>
</author>
<author>
<firstname>Kent</firstname>
<surname>Pitman</surname>
</author>
</authorgroup>
<copyright>
<year>1993</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Nor2001</abbrev>
<citetitle><ulink url="http://www.norvig.com/21-days.html">Teach
Yourself Programming in Ten Years</ulink></citetitle>
<author>
<firstname>Peter</firstname>
<surname>Norvig</surname>
</author>
<copyright>
<year>2001</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>Ray2004</abbrev>
<citetitle><ulink
url="http://www.catb.org/~esr/faqs/smart-questions.html">How
to ask questions the smart way</ulink></citetitle>
<authorgroup>
<author>
<firstname>Eric Steven</firstname>
<surname>Raymond</surname>
</author>
</authorgroup>
<copyright>
<year>2004</year>
</copyright>
</biblioentry>
<biblioentry>
<abbrev>RelEngDoc</abbrev>
<citetitle><ulink url="&url.articles.releng;">FreeBSD Release
Engineering</ulink></citetitle>
<author>
<firstname>Murray</firstname>
<surname>Stokely</surname>
</author>
<copyright>
<year>2001</year>
</copyright>
<publisher>
<publishername>The FreeBSD Project</publishername>
</publisher>
</biblioentry>
</bibliography>
</article>