Why People Choose FreeBSD
NOTE: This page has been migrated from the wiki to http://www.freebsd.org/advocacy/whyusefreebsd.html - any future updates should be made there and not here. Thanks!
I recently asked FreeBSD users why they were using the system and these are some of the answers that I got:
FreeBSD is a community-driven operating system and, although we have a lot of corporate users and contributors, they do not overshadow the project, which is still very much driven by the community. 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 focussed on building the best possible system and getting it 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, usually due to faulty hardware), but while that was a great boast a decade ago, now it is an expected feature for any operating system.
Stability in FreeBSD means more than that. It means that upgrading the system doesn't 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, then 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 9 system, including kernel and userspace, can build with clang and from FreeBSD 9.1 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 PC-BSD 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 FreeBSD version and customise the system for specific uses.
FreeBSD service initialisation 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 RCng 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 odds are, anything that 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 then it's trivial to simply delete all installed packages and then start installing the ones that you want.
The upcoming pkg-ng 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 can't 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 portaudit, 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 you'd expect 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. What's not to like? Using ZFS for a few days makes going back to a more traditional volume manager painful. If you want to test something with ZFS, then it's trivial to just create a snapshot and roll back if it didn't work.
If you're using jails, then ZFS lets you clone an existing jail in under a second, irrespective of 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 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 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's 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's equally easy to install the server tools that you want.
It's easy to run the FreeBSD installer via a serial port and to configure the entire system from the terminal. It's also easy to install and use any existing desktop environment. The decisions about the kind of system you want to use are left to you.
If you're deploying FreeBSD in a corporate environment, then it's 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.