FreeBSD Myths

This page attempts to document some common myths and misconceptions centered around the FreeBSD operating system. Most of the material presented here is gathered from various mailing lists and public forums. This information is current for FreeBSD 6.0-RELEASE.

The kernel

FreeBSD (as well as other BSD systems) doesn't support machines with more than one processor

False. FreeBSD has supported SMP systems since sometime before version 4.0. This was an early version of the support done in a way that is called coarse SMP. It had the entire kernel under one big synchronization lock, meaning that only one process could access the kernel functionalities (such as disk and network I/O) at one time, regardless of the number of processors present in the system. In this model, different processes that have no need for kernel functions can execute simultaneously on different processors. The threading library did not support executing threads of a single process on different processors (called N:1 because all N threads of a single process are viewed by the kernel as a single thing and only one of the threads can execute on a processor).

Since version 5.3 (actually a lot earlier but this was the first -STABLE release with the support) a different model is used: fine-grained SMP. The big lock is still present but is slowly being abandoned in favour of many smaller locks, meaning that many processes can access the kernel, sometimes even if they are accessing the same subsystem. There are three interchangeable threading libraries: libc_r (N:1), libpthread (N:M) and libthr (1:1). Executing multiple threads on multiple processors is well supported by the latter two.

For comparison, the coarse SMP approach is used in Linux 2.2 and NetBSD 2.0. SMP support in OpenBSD is still experimental (but also coarse). DragonflyBSD project is attempting to do fine-grained SMP, but the support is still not finished (remains at the level of FreeBSD 4.x as far as user applications are concerned). Newer Linux kernels and all Windows NT kernels have fine-grained SMP.

FreeBSD has no support for NUMA

True. Non uniform memory access preferences (for example on some AMD Opteron systems) will not be heeded by FreeBSD.

FreeBSD supports only one filesystem type

False, but close. FreeBSD supports the following general-purpose filesystems: UFS/UFS2, ZFS, msdosfs, ext2, ntfs, iso9660, udf and reiserfs3. Of these, UFS/UFS2, msdosfs and ext2 are writeable, but the ext2 implementation doesn't support large files (>2GB) and journaling.

On the other hand, UFS/UFS2 is supported very well and comes close to the "one size fits all" ideal. It's also the only filesystem that supports SoftUpdates.

SoftUpdates is the same as journaling

False. SoftUpdates and journaling are two different approaches to solving the same problem: to ensure consistency of filesystem data. SoftUpdates might be a bit faster and doesn't require additional storage space, but has a downside that fsck must be run after every system crash (by default this will happen as a background process) which is bad if the file system is too large. ZFS is the only journaling file system available for FreeBSD.

Configuration and usage

PAM and/or NSS are not supported by FreeBSD

False. For examples, see here, here, here and here. The support was flaky and/or missing in FreeBSD 4.x, but since version 5.3 support is much better.

Application software

On FreeBSD, all software must be compiled by hand

False. Both the base system and third-party applications can be installed and upgraded with binary (pre-compiled) files. In case of the base system, the sysinstall utility can do that from the installation CD-ROM or a network server. For third-party applications, the pkg_add utility can install software directly from binary packages (as well as any dependencies it might have) that are located either locally or remotely on a FTP server.

Installed packages can be repackaged with pkg_create -b. Binary packages of applications are created directly from the ports tree by issuing make package command in the appropriate directory.

MySQL has problems running on FreeBSD

Inconclusive. In the early 5.x releases there really were many problems with the new threading library, which have mostly been fixed for the 5.3 release (first non-experimental release of the 5.x branch). In the old 4.x branch MySQL could only be run with the linuxthreads port which mimicked Linux 1:1 threading model. By this time, all those problems should be part of history and for most workloads MySQL works fine, though there are still occasional problem reports.

Those that require absolutely top performance should try running MySQL compiled with the libthr (native 1:1 threading library) on FreeBSD 6.x.

FreeBSD can run all available Linux software

Somewhat correct. This is an imprecise statement that can actually mean either of these two things:

  1. Software that can be compiled and run on Linux systems can be compiled and run on FreeBSD. This is partially correct. Most well-written programs that adhere to standards about writing cross-platform applications can be built and run on FreeBSD without major problems. A small percentage of software is badly written or relies on features unique to Linux, and thus cannot be compiled or used on any other system.
  2. Software already compiled for Linux can be run on FreeBSD. This is mostly true. FreeBSD includes a translation layer that allows executables that are compiled on (or for) other operating systems to be run. Most Linux executables can be run on FreeBSD unchanged, which includes (but is not limited to): Adobe Acrobat Reader, Quake 3, Unreal Tournament, Skype client, ICQ client, Real Player, Macromedia Flash player, various Java Virtual Machines, Oracle database products and others. Software that relies on unique Linux features (such as device drivers and system software) cannot be run in this way. Programs executed in this fashion run at the same speed as they would on Linux (there is almost no emulation performed).

FreeBSD cannot run Java

False. Java software can be executed on FreeBSD either by Linux virtual machines (such as those officially provided by Sun and other Java vendors) or by native virtual machines. There are many ready-made ports/packages of Java software available. Running Java applets in Mozilla Firefox also works.

Unfortunately, running Java VMs on FreeBSD is not officially supported by Sun, so the native Java VMs are the result of independent and unofficial porting.