<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->

<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>

<article>
  <articleinfo>
    <title>Explaining BSD</title>

    <author>
      <firstname>Greg</firstname>
      <surname>Lehey</surname>

      <affiliation>
	<address><email>grog@FreeBSD.org</email></address>
      </affiliation>
    </author>

    <abstract>
      <para>In the open source world, the word <quote>Linux</quote> is almost
	synonymous with <quote>Operating System</quote>, but it is not the only
	open source <trademark>UNIX</trademark> operating system.  According
	to the <ulink
         url="http://www.leb.net/hzo/ioscount/data/r.9904.txt">Internet
	  Operating System Counter</ulink>, as of April 1999 31.3% of the
	world's network connected machines run Linux.  14.6% run BSD UNIX.
	Some of the world's largest web operations, such as <ulink
          url="http://www.yahoo.com/">Yahoo!</ulink>, run BSD.  The world's
	busiest FTP server, <ulink
          url="ftp://ftp.cdrom.com/">ftp.cdrom.com</ulink>, uses BSD to
	transfer 1.4 TB of data a day.    Clearly this is not a niche
	market: BSD is a well-kept secret.</para>

      <para>So what is the secret?  Why is BSD not better known?  This white
	paper addresses these and other questions.</para>

      <para>Throughout this paper, differences between BSD and Linux will be
	noted <emphasis>like this</emphasis>.</para>
    </abstract>
  </articleinfo>

  <sect1>
    <title>What is BSD?</title>

    <para>BSD stands for <quote>Berkeley Software Distribution</quote>.  It is
      the name of distributions of source code from the University of
      California, Berkeley, which were originally extensions to AT&amp;T's
      Research UNIX operating system.  Several open source operating system
      projects are based on a release of this source code known as
      4.4BSD-Lite.  In addition, they comprise a number of packages from other
      Open Source projects, including notably the GNU project.  The overall
      operating system comprises:</para>

    <itemizedlist>
      <listitem>
	<para>The BSD kernel, which handles process scheduling, memory
	  management, symmetric multi-processing (SMP), device drivers,
	  etc.</para>

	<para><emphasis>Unlike the Linux kernel, there are several different
	    BSD kernels with differing capabilities.</emphasis></para>
      </listitem>

      <listitem>
	<para>The C library, the base API for the system.</para>
	  
	<para><emphasis>The BSD C library is based on code from Berkeley, not
	    the GNU project.</emphasis></para>
      </listitem>
	  
      <listitem>
	<para>Utilities such as shells, file utilities, compilers and
	  linkers.</para>
	
	<para><emphasis>Some of the utilities are derived from the GNU
	    project, others are not.</emphasis></para>
      </listitem>

      <listitem>
	<para>The X Window system, which handles graphical display.</para>

	<para>The X Window system used in most versions of BSD is maintained
	  by a separate project, the
	  <ulink url="http://www.XFree86.org/">XFree86 project</ulink>.
	  This is the same code as Linux uses.  BSD does not normally
	  specify a <quote>graphical desktop</quote> such as GNOME or KDE,
	  though these are available.</para>
      </listitem>

      <listitem>
	<para>Many other programs and utilities.</para>
      </listitem>
    </itemizedlist>
  </sect1>
  
  <sect1>
    <title>What, a real UNIX?</title> 

    <para>The BSD operating systems are not clones, but open source
      derivatives of AT&amp;T's Research UNIX operating system, which is also
      the ancestor of the modern UNIX System V.  This may surprise you.  How
      could that happen when AT&amp;T has never released its code as open
      source?</para>

    <para>It is true that AT&amp;T UNIX is not open source, and in a copyright
      sense BSD is very definitely <emphasis>not</emphasis> UNIX, but on the
      other hand, AT&amp;T has imported sources from other projects,
      noticeably the Computer Sciences Research Group of the University of
      California in Berkeley, CA.  Starting in 1976, the CSRG started
      releasing tapes of their software, calling them <emphasis>Berkeley
	Software Distribution</emphasis> or <emphasis>BSD</emphasis>.</para>

    <para>Initial BSD releases consisted mainly of user programs, but that
      changed dramatically when the CSRG landed a contract with the Defense
      Advanced Projects Research Agency (DARPA) to upgrade the communications
      protocols on their network, ARPANET.  The new protocols were known as
      the <emphasis>Internet Protocols</emphasis>, later
      <emphasis>TCP/IP</emphasis> after the most important protocols.  The
      first widely distributed implementation was part of 4.2BSD, in
      1982.</para>

    <para>In the course of the 1980s, a number of new workstation companies
      sprang up. Many preferred to license UNIX rather than developing
      operating systems for themselves.  In particular, Sun Microsystems
      licensed UNIX and implemented a version of 4.2BSD, which they called
      SunOS.  When AT&amp;T themselves were allowed to sell UNIX commercially,
      they started with a somewhat bare-bones implementation called System
      III, to be quickly followed by System V.  The System V code base did not
      include networking, so all implementations included additional software
      from the BSD, including the TCP/IP software, but also utilities such as
      the <emphasis>csh</emphasis> shell and the <emphasis>vi</emphasis>
      editor.  Collectively, these enhancements were known as the
      <emphasis>Berkeley Extensions</emphasis>.</para>

    <para>The BSD tapes contained AT&amp;T source code and thus required a
      UNIX source license.  By 1990, the CSRG's funding was running out, and
      it faced closure. Some members of the group decided to release the BSD
      code, which was Open Source, without the AT&amp;T proprietary code.
      This finally happened with the <emphasis>Networking Tape 2</emphasis>,
      usually known as <emphasis>Net/2</emphasis>.  Net/2 was not a complete
      operating system: about 20% of the kernel code was missing.  One of the
      CSRG members, William F. Jolitz, wrote the remaining code and released
      it in early 1992 as <emphasis>386BSD</emphasis>.  At the same time,
      another group of ex-CSRG members formed a commercial company called
      <ulink url="http://www.bsdi.com/">Berkeley Software Design Inc.</ulink>
      and released a beta version of an operating system called
      <ulink url="http://www.bsdi.com/">BSD/386</ulink>, which was based on
      the same sources.  The name of the operating system has since changed
      to BSD/OS.</para>

    <para>386BSD never became a stable operating system.  Instead, two other
      projects split off from it in 1993:
      <ulink url="http://www.NetBSD.org/">NetBSD</ulink> and
      <ulink url="../../../../index.html">FreeBSD</ulink>.  The two projects
      originally diverged due to differences in patience waiting for
      improvements to 386BSD: the NetBSD people started early in the year,
      and the first version of FreeBSD was not ready until the end of the
      year.  In the meantime, the code base had diverged sufficiently to
      make it difficult to merge.  In addition, the projects had different
      aims, as we will see below.  In 1996, a further project,
      <ulink url="http://www.OpenBSD.org/">OpenBSD</ulink>, split off from
      NetBSD.</para>
  </sect1>
  
  <sect1>
    <title>Why is BSD not better known?</title>
    
    <para>For a number of reasons, BSD is relatively unknown:</para>
    
    <orderedlist>
      <listitem>
	<para>The BSD developers are often more interested in polishing their
	  code than marketing it.</para>
      </listitem>

      <listitem>
	<para>Much of Linux's popularity is due to factors external to the
	  Linux projects, such as the press, and to companies formed to
	  provide Linux services.  Until recently, the open source BSDs had no
	  such proponents.</para>
      </listitem>

      <listitem>
	<para>BSD developers tend to be more experienced than Linux
	  developers, and have less interest in making the system easy to use.
	  Newcomers tend to feel more comfortable with Linux.</para>
      </listitem>

      <listitem>
	<para>In 1992, AT&amp;T sued
	  <ulink url="http://www.bsdi.com/">BSDI</ulink>,
	  the vendor of BSD/386, alleging that the product contained
	  AT&amp;T-copyrighted code.  The case was settled out of court in
	  1994, but the spectre of the litigation continues to haunt people.
	  As recently as March 2000 an article published on the web claimed
	  that the court case had been <quote>recently settled</quote>.</para>

	<para>One detail that the lawsuit did clarify is the naming: in the
	  1980s, BSD was known as <quote>BSD UNIX</quote>.  With the
	  elimination of the last vestige of AT&amp;T code from BSD, it
	  also lost the right to the name UNIX.  Thus you will see
	  references in book titles to <quote>the 4.3BSD UNIX operating
	    system</quote> and <quote>the 4.4BSD operating
	    system</quote>.</para>
      </listitem>

      <listitem>
	<para>There is a perception that the BSD projects are fragmented and
	  belligerent.  The
	  <ulink url="http://interactive.wsj.com/bin/login?Tag=/&amp;URI=/archive/retrieve.cgi%253Fid%253DSB952470579348918651.djm&">Wall Street
	    Journal</ulink> spoke of <quote>balkanization</quote> of the
	  BSD projects.  Like the law suit, this perception bases mainly
	  on ancient history.</para>
      </listitem>
    </orderedlist>
  </sect1>

  <sect1>
    <title>Comparing BSD and Linux</title>

    <para>So what is really the difference between, say, Debian Linux and
      FreeBSD?  For the average user, the difference is surprisingly small:
      Both are UNIX-like operating systems.  Both are developed by
      non-commercial projects (this does not apply to many other Linux
      distributions, of course).  In the following section, we will look at BSD
      and compare it to Linux.  The description applies most closely to
      FreeBSD, which accounts for an estimated 80% of the BSD installations,
      but the differences from NetBSD and OpenBSD are small.</para>

    <sect2>
      <title>Who owns BSD?</title>

      <para>No one person or corporation owns BSD. It is created and
	distributed by a community of highly technical and committed
	contributors all over the world. Some of the components of BSD are
	Open Source projects managed by a different project maintainer.</para>
    </sect2>

    <sect2>
      <title>How is BSD developed and updated?</title>

      <para>The BSD kernels are developed and updated following the Open
	Source development model.  Each project maintains a publicly
	accessible <emphasis>source tree</emphasis> under the
	<ulink url="http://www.sourcegear.com/CVS/">Concurrent Versions
	  System</ulink> (CVS), which contains all source files for the
	project, including documentation and other incidental files.  CVS
	allows users to <quote>check out</quote> (in other words, to
	extract a copy of) any desired version of the system.</para>

      <para>A large number of developers worldwide contribute to improvements
	to BSD.  They are divided into three kinds:</para>

      <itemizedlist>
	<listitem>
	  <para><firstterm>Contributors</firstterm> write code or documentation.
	    They are not permitted to commit (add code) directly to the source
	    tree.  In order for their code to be included in the system, it
	    must be reviewed and checked in by a registered developer, known
	    as a <emphasis>committer</emphasis>.</para>
	</listitem>

	<listitem>
	  <para><firstterm>Committers</firstterm> are developers with write
	    access to the source tree.  In order to become a committer, an
	    individual must show ability in the area in which he is
	    active.</para>

	  <para>
	    It is at the individual committer's discretion whether he should
	    obtain authority before committing changes to the source tree.  In
	    general, an experienced committer may make changes which are
	    obviously correct without obtaining consensus.  For example, a
	    documentation project committer may correct typographical or
	    grammatical errors without review.  On the other hand, developers
	    making far-reaching or complicated changes are expected to submit
	    their changes for review before committing them.  In extreme
	    cases, a core team member with a function such as Principal
	    Architect may order that changes be removed from the tree, a
	    process known as <firstterm>backing out</firstterm>.  All committers
	    receive mail describing each individual commit, so it is not
	    possible to commit secretly.</para>
	</listitem>

	<listitem>
	  <para>The <firstterm>Core team</firstterm>.  FreeBSD and
	    NetBSD each have a core team which manages the project.  The
	    core teams developed in the course of the projects, and their role
	    is not always well-defined.  It is not necessary to be a developer
	    in order to be a core team member, though it is normal.  The rules
	    for the core team vary from one project to the other, but in
	    general they have more say in the direction of the project than
	    non-core team members have.</para>
	</listitem>
      </itemizedlist>

      <para>This arrangement differs from Linux in a number of ways:</para>

      <orderedlist>
	<listitem>
	  <para>No one person controls the content of the system.  In
	    practice, this difference is overrated, since the Chief Architect
	    can require that code be backed out, and even in the Linux project
	    several people are permitted to make changes.</para>
	</listitem>

	<listitem>
	  <para>On the other hand, there <emphasis>is</emphasis> a central
	    repository, a single place where you can find the entire operating
	    system sources, including all older versions.</para>
	</listitem>

	<listitem>
	  <para>BSD projects maintain the entire <quote>Operating
	      System</quote>, not only the kernel. This distinction is only
	    marginally useful: neither BSD nor Linux is useful without
	    applications.  The applications used under BSD are frequently the
	    same as the applications used under Linux.</para>
	</listitem>

	<listitem>
	  <para>As a result of the formalized maintenance of a single CVS
	    source tree, BSD development is clear, and it is possible to
	    access any version of the system by release number or by date.
	    CVS also allows incremental updates to the system: for example,
	    the FreeBSD repository is updated about 100 times a day.  Most of
	    these changes are small.</para>
	</listitem>
      </orderedlist>
    </sect2>

    <sect2>
      <title>BSD releases</title>

      <para>Each BSD project provides the system in three different
	<quote>releases</quote>.  As with Linux, releases are assigned a
	number such as 1.4.1 or 3.5.  In addition, the version number has a
	suffix indicating its purpose:</para>

      <orderedlist>
	<listitem>
	  <para>The development version of the system is called
	    <firstterm>CURRENT</firstterm>.  FreeBSD assigns a number to
	    CURRENT, for example FreeBSD 5.0-CURRENT.  NetBSD uses a slightly
	    different naming scheme and appends a single-letter suffix which
	    indicates changes in the internal interfaces, for example NetBSD
	    1.4.3G.  OpenBSD does not assign a number ("OpenBSD-current").
	    All new development on the system goes into this branch.</para>
	</listitem>

	<listitem>
	  <para>At regular intervals, between two and four times a year, the
	    projects bring out a <firstterm>RELEASE</firstterm> version of the
	    system, which is available on CD-ROM and for free download from
	    FTP sites, for example OpenBSD 2.6-RELEASE or NetBSD 1.4-RELEASE.
	    The RELEASE version is intended for end users and is the normal
	    version of the system.  NetBSD also provides <emphasis>patch
	      releases</emphasis> with a third digit, for example NetBSD
	    1.4.2.</para>
	</listitem>

	<listitem>
	  <para>As bugs are found in a RELEASE version, they are fixed, and
	    the fixes are added to the CVS tree.  In FreeBSD, the resultant
	    version is called the <firstterm>STABLE</firstterm> version, while in NetBSD and OpenBSD
	    it continues to be called the RELEASE version.  Smaller new
	    features can also be added to this branch after a period of test
	    in the CURRENT branch.</para>
	</listitem>
      </orderedlist>

      <para><emphasis>By contrast, Linux maintains two separate code trees:
	  the stable version and the development version.  Stable versions
	  have an even minor version number, such as 2.0, 2.2 or 2.4.
	  Development versions have an odd minor version number, such as 2.1,
	  2.3 or 2.5.  In each case, the number is followed by a further
	  number designating the exact release.  In addition, each vendor adds
	  their own userland programs and utilities, so the name of the
	  distribution is also important.  Each distribution vendor also
	  assigns version numbers to the distribution, so a complete
	  description might be something like <quote>TurboLinux 6.0 with kernel
	  2.2.14</quote></emphasis></para>
    </sect2>

    <sect2>
      <title>What versions of BSD are available?</title>

      <para>In contrast to the numerous Linux distributions, there are only
	three open source BSDs.  Each BSD project maintains its own source
	tree and its own kernel.  In practice, though, there appear to be
	fewer divergences between the userland code of the projects than there
	is in Linux.</para>

      <para>It is difficult to categorize the goals of each project: the
	differences are very subjective.  Basically,</para>

      <itemizedlist>
	<listitem>
	  <para>FreeBSD aims for high performance and ease of use by
	    end users, and is a favourite of web content providers.  It runs
	    on PCs and Compaq's Alpha processors.  The FreeBSD project has
	    significantly more users than the other projects.</para>
	</listitem>

	<listitem>
	  <para>NetBSD aims for maximum portability: <quote>of course it runs
	      NetBSD</quote>.  It runs on machines from palmtops to large
	    servers, and has even been used on NASA space missions.  It is a
	    particularly good choice for running on old non-Intel
	    hardware.</para>
	</listitem>

	<listitem>
	  <para>OpenBSD aims for security and code purity: it uses a
	    combination of the open source concept and rigorous code reviews
	    to create a system which is demonstrably correct, making it the
	    choice of security-conscious organizations such as banks, stock
	    exchanges and US Government departments.  Like NetBSD, it runs on
	    a number of platforms.</para>
	</listitem>
      </itemizedlist>

      <para>There are also two additional BSD operating systems which are not
	open source, BSD/OS and Apple's Mac OS X:</para>

      <itemizedlist>
	<listitem>
	  <para>BSD/OS is the oldest of the 4.4BSD derivatives.  It
	    is not open source, though source code licenses are available at
	    relatively low cost.  It resembles FreeBSD in many ways.</para>
	</listitem>

	<listitem>
	  <para><ulink url="http://www.apple.com/macosx/server/">Mac OS
	      X</ulink> is the latest version of the operating system for
	    <ulink url="http://www.apple.com/">Apple Computer Inc.'s</ulink>
	      Macintosh line.  Unlike the rest of the operating system, the
	      kernel is open source.  As part of this development, key Apple
	      developers have commit access to the FreeBSD source tree.</para>
	</listitem>
      </itemizedlist>
    </sect2>
    
    <sect2>
      <title>How does the BSD license differ from the GNU Public
	license?</title>
      
      <para>Linux is available under the
	<ulink url="http://www.fsf.org/copyleft/gpl.html">GNU General Public
	  License</ulink> (GPL), which is designed to eliminate closed
	source software.  In particular, any derivative work of a product
	released under the GPL must also be supplied with source code if
	requested.  By contrast, the
	<ulink url="http://www.opensource.org/licenses/bsd-license.html">BSD
	  license</ulink> is less restrictive: binary-only distributions are
	  allowed.  This is particularly attractive for embedded
	  applications.</para>
    </sect2>

    <sect2>
      <title>What else should I know?</title>

      <para>Since fewer applications are available for BSD than Linux, the BSD
	developers created a Linux compatibility package, which allows Linux
	programs to run under BSD.  The package includes both kernel
	modifications, in order to correctly perform Linux system calls, and
	Linux compatibility files such as the C library. There is no
	noticeable difference in execution speed between a Linux application
	running on a Linux machine and a Linux application running on a BSD
	machine of the same speed.</para>

      <para>The <quote>all from one supplier</quote> nature of BSD means that
	upgrades are much easier to handle than is frequently the case with
	Linux.  BSD handles library version upgrades by providing
	compatibility modules for earlier library versions, so it is possible
	to run binaries which are several years old with no problems.</para>
    </sect2>

    <sect2>
      <title>Which should I use, BSD or Linux?</title>

      <para>What does this all mean in practice?  Who should use BSD, who
	should use Linux?</para>
      
      <para>This is a very difficult question to answer.  Here are some
	guidelines:</para>
      
      <itemizedlist>
	<listitem>
	  <para><quote>If it ain't broke, don't fix it</quote>: If you already
	    use an open source operating system, and you are happy with it,
	    there is probably no good reason to change.</para>
	</listitem>
	
	<listitem>
	  <para>BSD systems, in particular FreeBSD, can have notably higher
	    performance than Linux.  But this is not across the board.  In many
	    cases, there is little or no difference in performance.  In some
	    cases, Linux may perform better than FreeBSD.</para>
	</listitem>

	<listitem>
	  <para>In general, BSD systems have a better reputation for
	    reliability, mainly as a result of the more mature code
	    base.</para>
	</listitem>

	<listitem>
	  <para>The BSD license may be more attractive than the GPL.</para>
	</listitem>

	<listitem>
	  <para>BSD can execute Linux code, while Linux can not execute BSD
	    code.  As a result, more software is available for BSD than for
	    Linux.</para>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>Who provides support, service, and training for BSD?</title>
      
      <para>BSDi have always supported BSD/OS, and they have recently
	announced support contracts for FreeBSD.</para>

      <para>In addition, each of the projects has a list of consultants for
	hire:
	<ulink url="../../../../commercial/consulting_bycat.html">FreeBSD</ulink>,
	<ulink url="http://www.netbsd.org/gallery/consultants.html">NetBSD</ulink>,
	and <ulink url="http://www.openbsd.org/support.html">OpenBSD</ulink>.</para>
    </sect2>
  </sect1>
</article>

<!-- 
     Local Variables:
     mode: sgml
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     End:
-->
