The differences
between the major Unix variants (*BSD, Linux,
Solaris, OS X, etc.) are subtle. In day to day
usage, an experienced Unix admin can comfortably
and efficiently work on any of them, with little
regard to the specific differences between variants.
But despite the great
similarities, the choice of a Unix server operating
system can be hugely significant. While I support
Linux, Solaris and all the other Unix variants, I
have been using FreeBSD for
myself, and recommending it to the majority of my
clients, for many years now. Why not Linux? Here,
in order of importance, are the primary reasons.
Choice is good, but with dozens of available major
distributions and two competing package formats,
one of the problems with Linux is that there are
far too many incompatible alternatives. The software
and configuration files used in one distribution
are often completely different from those available
in another.
Linux is, technically speaking, an operating system
kernel. Any particular Linux distribution consists
of this Linux kernel with other software and packaging
on top of the kernel. Even two distributions that
are RPM-based (Red Hat and SuSE, for example)
typically cannot use the same RPM without difficulty.
FreeBSD, on the other hand, is a complete operating
system. The components of this system (kernel,
libraries, user programs, booting subsystems, etc.)
are a unified piece of software. If you need a
program, or technical support, for a particular
FreeBSD release, you can find precisely that
relatively easily.
Perhaps the biggest advantage of FreeBSD over the
others is the FreeBSD Ports system. There are
thousands of applications, development tools, and
other software packages in the ports system, each
of which can be installed on a FreeBSD system with
one simple command.
The importance of this point cannot be overstated.
With one command, a piece of software, and any
dependencies it may have, will be downloaded from
a trusted location, built and custom configured
for your particular system. One step. No searching
or research required, and no incompatibilities to
deal with.
The FreeBSD documentation is available as a constantly
updated, well written
web
handbook (and
on
paper as well). The handbook covers each and
every aspect of the FreeBSD system in a concise,
yet thorough, style.
The documentation
manages the delicate balance of being both a
definitive resource for an experienced administrator,
and a valuable learning guide for a Unix neophyte.
It is written in a style that does not presuppose
much familiarity with Unix systems, and covers such
basic Unix topics as permissions, but also covers
advanced topics such as kernel configuration and
tuning, security and encrypted disk partitions.
FreeBSD has traditionally excelled with its network, virtual memory and SCSI
subsystems. Other features include:
- Multi-threaded SMP architecture capable of executing the kernel in parallel on multiple processors, a multi-threaded network stack and a multi-threaded virtual memory subsystem.
- Soft Updates allows improved filesystem performance without sacrificing safety and reliability. Features such as background filesystem checking and file system snapshots are built on the consistency and performance foundations of soft updates.
- Support for IP Security (IPsec) allows improved security in networks, and support for the next-generation Internet Protocol, IPv6.
- FreeBSD's GEOM-Based Disk Encryption (GBDE), provides strong cryptographic protection using the GEOM Framework.
- Vinum implements virtual disk drive management, and can support RAID 0, RAID 1, and RAID 5.
- Support for access control lists (ACLs) and mandatory access control (MAC) modules.
- File system snapshots, permitting administrators to take atomic file system snapshots for backup purposes using the free space in the file system, as well as facilitating background fsck, which allows the system to reach multiuser mode without waiting on file system cleanup operations following power outages.
- Netgraph pluggable network stack allows developers to dynamically and easily extend the network stack through clean layered network abstractions. Netgraph nodes can implement a broad range of new network services, including encapsulation, tunneling, encryption, and performance adaptation.
- Accept Filters allow connection-intensive applications, such as web servers, to cleanly push part of their functionality into the operating system kernel, improving performance.
- A merged virtual memory and filesystem buffer cache continuously tunes the amount of memory used for programs and the disk cache. As a result, programs receive both excellent memory management and high performance disk access, and the system administrator is freed from the task of tuning cache sizes.
- Kernel Queues allow programs to respond more efficiently to a variety of asynchronous events including file and socket IO, improving application and system performance.
Compatibility modules enable FreeBSD to run binary
programs built for other operating systems (e.g.,
Linux, SCO Unix, System V Release 4, etc.). Some
run-time libraries (e.g., for Linux) might be
required, but you can add them from the Ports
collection. There is no noticeable difference in
execution speed between a Linux application running
on a Linux machine and a Linux application running
on a FreeBSD machine of the same speed.
FreeBSD is also a leader in terms of backward
compatibility. 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 that are many years old
with no problems. A number of commercial vendors
have FreeBSD 3.x and even 2.x binaries they still
sell today because they don't need to change the
executables in order to have them run on current
versions of FreeBSD.
The BSD license allows you to freely modify the
code to suit your business purposes. Unlike the
GPL, there are no restrictions on how you choose
to distribute the resulting software.