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>
 |