use &os.numports; instead of a hardcoded Ports number, and note that `Alpha' is a supported architecture up to version 6.X of FreeBSD.
		
			
				
	
	
		
			1055 lines
		
	
	
	
		
			43 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			1055 lines
		
	
	
	
		
			43 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—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>
 | 
						|
 | 
						|
    <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—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 — 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—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&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>
 |