FreeBSD Advocacy Project
Why Choose FreeBSD?
Why would you consider using FreeBSD? We think that there are lots of reasons. Here is a selection of reasons that some of our existing users gave for their choice of operating system.
FreeBSD is a community-driven operating system despite it being to a partial degree sponsored corporately. FreeBSD has active mailing lists, forums, and IRC channels where experienced users and developers are always willing to help the less experienced.
The community is largely driven by technology, not ideology, and is focused on building the best possible system and making FreeBSD as widely used as possible, not on pushing any other agendas.
There is no dictator—benevolent or otherwise—for the project. The Core Team is elected and is nominally responsible for overseeing the goals of the project, but this is a very light touch. Core mediates disputes between developers, but rarely needs to take an active role in development, beyond their separate contributions as individual developers.
Stability means many different things. FreeBSD very rarely crashes (and when it does it is usually due to hardware faults), but while that was a great boast a decade ago, now it is an expected feature for any operating system.
Stability in FreeBSD means much more than that. It means that upgrading the system does not require upgrading the user. Configuration interfaces do change over time, but only when there is a good reason. If you learned how to use FreeBSD in 2000, most of your knowledge would still be relevant.
Backwards compatibility is very important to the FreeBSD team, and any release in a major release series is expected to be able to run any code—including kernel modules—that ran on an earlier version. The entire base system is developed together, including the kernel, the core utilities, and the configuration system, so upgrades are usually painless. Included tools like mergemaster help update configuration files with little or no manual intervention.
Early Adoption and Collaboration With Other Projects
FreeBSD has been one of the first adopters of the LLVM infrastructure, including the clang compiler and the libc stack. The entire FreeBSD system, including kernel and userspace, can build with clang, and from FreeBSD both clang and the permissively-licensed libc are included, giving a modern, BSD-licensed C++ stack. Several FreeBSD developers are also active contributors to LLVM, ensuring that both projects thrive together.
This same collaboration works downstream, with projects like GhostBSD, MidnightBSD, NomadBSD and pfSense building on top of the FreeBSD base to provide desktop and firewall oriented distributions, respectively. These projects are not forks, they base their work on the latest version of FreeBSD and customize the system for specific uses.
FreeBSD service initialization is very simple. Each service, whether part of the base system or installed from a port, comes with a script that is responsible for starting and stopping it (and often some other options). The /etc/rc.conf file contains a list of variables for enabling and configuring services. Want to enable ssh? Just add sshd_enable="YES" to your rc.conf file. This system makes it easy to see at a glance everything that will be started when your system boots.
The rc system that reads this file understands dependencies between services and so can automatically launch them in parallel, or wait until one is finished before starting the things that it needs. You get all of the benefits of a modern configuration system, without a complex interface.
The ports tree contains a large collection of third-party software, including older versions of some things where the userbase is divided about the benefits of upgrading, and a lot of niche programs. The chances are that anything you want to run which works on FreeBSD will be there.
Unlike some other systems, FreeBSD maintains a clean division between the base system and third-party ports and packages. All third-party software goes in /usr/local, so if you want to repurpose a machine, it is trivial to simply delete all installed packages and then start installing the ones that you want.
The pkg(8) tool makes working with binary packages even easier, although source installs are still supported for people who want the level of configurability that this implies.
Security is vital in any network-connected machine. FreeBSD provides a number of tools for ensuring that you can maintain a secure system, such as:
Jails, allowing you to run applications or entire systems in a sandbox that cannot access the rest of the system. With tools like ezjail and ZFS you can instantly create a new jail with a clone of an existing system, using a tiny amount of disk space, and run untrusted code inside it.
Mandatory Access Control, from the TrustedBSD project, allowing you to configure access control policies for all operating system resources.
Capsicum, from FreeBSD 9 onwards, allows developers to easily implement privilege separation, reducing the impact of compromised code.
The VuXML system for publishing vulnerabilities in ports, which integrates with tools such as pkg, so that your daily security email tells you about any known vulnerabilities in ported software.
Security event auditing, using the BSM standard.
And, of course, all of the standard features that are expected from a modern UNIX® system including IPSec, SSH, and so on.
Cheap snapshots, clones, end-to-end checksums, deduplication, compression, and no need to decide partition sizes on install. Using ZFS for a few days makes going back to a more traditional volume manager painful. If you want to test something with ZFS, it is trivial to just create a snapshot and roll back if it didn’t work.
ZFS lets you clone an existing jail in under a second, no matter how big the jail itself is.
Even without ZFS, FreeBSD comes with a rich storage system. GEOM layers providers and consumers in arbitrary ways, allowing you to use two networked machines for high-availability storage, use your choice of RAID level, or add features like compression or encryption.
FreeBSD 4.x introduced in-kernel sound mixing, so that multiple applications could play sound at the same time even with cheap sound cards with no hardware mixing support. FreeBSD 5.x automatically allocated new channels to applications, without any configuration.
Now, FreeBSD has low-latency sound mixing with per-application volume controls and full support for the OSS 4 APIs out of the box. There is no need to configure a userspace sound daemon. The same audio APIs that were used a decade ago still work on FreeBSD, including some compatibility modes to allow applications that try to manipulate the global volume to only change their own. If you want to watch DVDs with 5.1 surround sound, just install your favourite media player and press play.
My System, How I Want It
FreeBSD gives you an easy-to-use, working, UNIX®-like system. This base system can then be extended easily. If you want to run KDE or GNOME, then just install the metapackage for the version that you prefer. If you want a headless server, then it is equally easy to install the server tools that you want.
It is easy to run the FreeBSD installer via a serial port and to configure the entire system from the terminal. It is also easy to install and use an existing desktop environment. The decisions about the kind of system you want to use are left to you.
If you are deploying FreeBSD in a corporate environment, then it is very easy to customise both the base system and the set of installed packages for your specific requirements. The build system provides numerous tuneable variables allowing you to build exactly the base system that meets your needs.