I've been a big fan of FreeBSD since I first acquired 4.4 on 4 CDs. By that point, I had already spent a lot of time in Linux, but I was always put off by its instability and inconsistency. Once I had FreeBSD installed, it felt like a dream. Everything worked the way it was supposed to, and the consistency of its design meant even older documentation would be mostly applicable without having to figure out how my system was different. There is a reason why in the early days of the Internet, a huge portion of servers ran FreeBSD.

But, that was a while ago. Since then, Linux has matured greatly and has garnered a lot of momentum, becoming the dominant Unix platform. FreeBSD certainly hasn't stood still, however. The FreeBSD team has kept current with hardware support, new features, and a modern, performant design.

I really did enjoy reading the article. Being a FreeBSD user myself since v4.0, I think you did a great job describing what FreeBSD is and how you've eyperienced the current release.

I noticed a few inaccuracies which I'd like to comment on; also allow me to add some words regarding statements I find notable.

"As far as hardware support, it is extremely well supported on i386 and amd64 architectures, which are considered Tier-1 platforms."

There are new restrictions, especially regarding peripherials that violate existing standards. Especially in case of mobile hardware (laptops for example) this can be significant. Intending to use FreeBSD on such a device usually involves research prior to the act of purchasing, and maybe getting hands dirty after purchasing. It still can be worth investing the work.

"First, at least on my laptop, FreeBSD may not properly throttle back the CPU when it gets too hot, so tasks that really hits my laptop hard cause an overheat alarm and the FreeBSD will shut itself off."

This can be the case of improper ACPI implementation. You could add "device coretemp" and "device cpufreq" to the kernel config and make sure you have loaded the appropriate ACPI module. There's also powerd in the base OS.

"The install process is currently simpler, but bsdinstall offers greater levels of scriptability and customization, if your environment requires it."

If you need to do something "non-standard" (like dedicated disk layout), you can still easily drop to a command line shell. In case you really want to do "something strange", you know how to do that with CLI tools. :-)

"The install process itself is fairly straight forward, but there are definite benefits to being familiar with FreeBSD."

A good idea is to have a printed copy of the relevant handbook sections, or make them available via WWW on a second machine. Someone entirely new to the FreeBSD operating system will definitely benefit from the excellent documentation. Things not mentioned by the installer (e. g. usage of "su root" requires "wheel" group membership, or how to install bootcode for a boot manager) is covered there.

"After configuring the base system, the next thing you'll want to do is update the system and install the ports tree."

A working ports tree can be obtained during installation from the media. Of course that tree is dated exactly like the OS, so if you want more recent entries, updating the ports tree is needed via Internet.

"The system can be updated with the FreeBSD-update command."

The command is "freebsd-update" (all lower case).

"FreeBSD differs from most Linux distributions, in that updating the system provides only security updates, and not feature-updates."

The main difference is that FreeBSD does provide a consistent operating system "as a unit", maintained by the FreeBSD team, whereas Linux "base systems" are a composition from packages just as the creators of the distribution decide. The FreeBSD OS consists of a kernel, userland tools and libraries (called "world"), and the source code. All those parts can be subject to freebsd-update. Every other software (coming from the ports collection) does technically not belong to FreeBSD (as "the operating system FreeBSD").

"New feature are rolled into new releases, which happen on a roughly annual basis. If you need to customize your system, you can download the latest source and rebuild the the kernel or the whole system, depending on your needs."

It's worth mentioning that world and kernel should always be in sync version-wise. Still it is possible to change kernel configurations without requring a rebuild of the world.

"The source tree and the FreeBSD Handbook have much documentation on this process. On my laptop, with 8GB of RAM and a 2.2GHz quad-core Sandy Bridge processor, make -j10 buildworld (which builds the entire system) takes about 45 minutes to complete."

"A simple make install will build and install an application and all of it's dependencies."

And its dependencies. :-)

"It will prompt you to set configuration options if needed, and will even create package files if instructed."

The ports collection offers even more functionality. It's a whole consistent framework to fetch, install, update, remove, search and patch software. There are management tools, for example portmaster, that can optimize those processes.

"For regular package management, FreeBSD falls flat initially. It's package tools are rather antiquated, and lack many features. For example, there is no built-in way to upgrade a package automatically - it has to be uninstalled and reinstalled manually."

In combination with an updated ports tree, portmaster can do this (using -P and -PP options to use precompiled packages instead of compiling stuff from source). The new pkg tool (pkgng) intend to solve the problems of binary updating. It can already be used (with few limitations).

"Using pkgng to install a group of packages performs significantly faster, as well. Again, I strongly recommend you use this setup."

Compiling from source is only needed in few specific cases, for example when no package is available for a specific combination of options you want to enable or disable (packages are built with the default options), or if you need to apply specific optimization to gain performance. A good example is mplayer if you want it to be as complete as it can be.

"If you want to virtualize FreeBSD on your desktop, FreeBSD's support of both VMware and Virtualbox guest additions is complete, with accelerated graphics, automatic cursor grabbing and ungrabbing, and shared folders."

In this case, check out VirtuelBSD - this is a preinstalled and preconfigured VM image that does not require any installation and can be used for "trying out" the system.

"It doesn't happen automatically, but FreeBSD can be made into a fine desktop."

I can confirm this, as I'm using FreeBSD exclusively on the desktop since version 4.0. :-)

"Gnome is a different story. Gnome 2 is available in the Ports tree, but Gnome 3 is not. Most of the Gnome developers don't seem to interesting in supporting anything other than Linux."

Similar opinions have been around regarding Xfce which also seems to rely on OS-specific things that are provided in Linux, but not in FreeBSD, so it could be less functional here.

"Some things are important to know about running Xorg on FreeBSD. First, the packaged Xorg (as well as the default configuration when building from ports) includes hald and dbus, but those services are not enabled by default, so when you launch X, your mouse and keyboard won't work."

I always thought at least HAL would already be considered obsoleted in Linux...?

"To enable them, hald_enable="yes" and dbus_enable="yes" need to be added to the /etc/rc.conf file."

Or disable them when building X if you don't require those things for your desktop.

"Pre-KMS drivers do work, with 3D acceleration when available, and NVidia graphics are fully supported by NVidia's proprietary driver. This driver actually works very well and is well supported. It has been available for 10 years, and provides the necessary libraries for running OpenGL applications under Linux emulation."

The built-in "ati" driver of X.org (and even of XFree86) did provide very good 3D performance for the older Radeon GPU series. With current ATI cards, it doesn't seem to be that easy. However, I'm currently using a nVidia card and the binary driver was easy to install, and it has good 3D boom. :-)

"There are some other issues with FreeBSD as a desktop to be aware of. A weird quirk of FreeBSD package management is that the default package repository doesn't get updated; all the packages are the same version as what is found in the ports tree included with that particular release."

There is an environmental variable $PACKAGESITE that you can set to either

"There are some other issues with FreeBSD as a desktop to be aware of. A weird quirk of FreeBSD package management is that the default package repository doesn't get updated; all the packages are the same version as what is found in the ports tree included with that particular release."

There is an environmental variable $PACKAGESITE that you can set to either use the RELEASE packages (those that work with the system as-is from the installation media) or the current packages (which get updated regularly). See "man pkg_add" for details.

"Besides the RELEASE branch, there is also STABLE and CURRENT. The STABLE branch is updated along with the standard ports tree, and there is typically about a week or so of lag time between the port being updated and the corresponding package being available. If you want the cutting-edge branch, you can switch to CURRENT, which provides the absolute latest, untested packages. Currently, CURRENT and STABLE are identical, but this isn't always the case."

That's not fully correct. Allow me to explain:

The tags RELEASE, STABLE and CURRENT (HEAD) have nothing to do with the ports tree pre se. They refer to the operating system (which is, as I explained, maintained independently). The RELEASE branch contains the OS as it is delivered on the installation media, and you can follow the security updates (indicated as patchlevels, e. g. 9.1-RELEASE-p2 as the 2nd patchlevel of 9.1). The CURRENT branch is where the active development takes place. Understand it like this: It is a development branch. Experimental features can appear and disappear, and it may not even compile today, but will do so tomorrow. From this branch, STABLE is created with the "confirmed" and tested features that will go in the next release (e. g. 9-STABLE or 9.2-STABLE to say "this is the STABLE branch after 9.2-RELEASE). Security-critical development will be backported to the RELEASE security branch (and maybe older branches that are to receive security updates).

You should not expect CURRENT to always work. If you want the most current "fully usable" version, use STABLE instead. Continuously update the sources and the ports tree. Following STABLE (or CURRENT) cannot be done using freebsd-upadte (as it only follows the RELEASE security branches), but an update is only a "make update" command away.

The ports tree, on the other side, is "continuously moving", it's "always STABLE" and contains the most current ports. It can be binarily updated with the portsnap command.

Using tools like SVN (previously CVS) you can, of course, obtain ports trees for specific dates, just as you can for the OS.

"Adobe's Flash player is available via the Ports tree (It uses Linux emulation and a shim to provide it to native browsers)."

There is no Linux emulation in the meaning of "Linux emulation", instead it's an ABI, an alternative binary interface that "routes" Linux calls to the respective FreeBSD calls.

"The consistency of the system is why I prefer it over Linux - significant changes can rarely, if ever, be described as disruptive. But, changes still are made."

It's not really fair to compare FreeBSD to Linux in that way. When we say Linux, we usually mean "the many different distributions of Linux", while FreeBSD means "the FreeBSD". That's why FreeBSD has the opportunity to provide a centralized means of documentation (instead of leaving that task to the users, scattered across the web in forums, wikis and user pages), plus there is a friendly, professional and helpful participating on the mailing lists. As there is "only one OS", things don't have to be discussed for any imaginable implementation and variation.

Among developers, FreeBSD is impressive regarding the quality of its documentation. Nearly everything in the system (binaries, configuration files, kernel interfaces, library calls, maintenance procedures, protocols and device drivers) have a manual page with carefully crafted information. Even some quality ports follow this approach and provide excellent off-line documentation (which can be significant under certain circumstances). The FreeBSD Handbook and the FAQ are also locally available and can be output in text, HTML, or various printable formats. The source code is also very tidy and of high quality, it answers the questions that the manpages cannot answers - this is a feature especially appealing to programmers. The system's directory hierarchy, even though containing many "historical idioms" and therefore maybe looking "outdated" from a "modern" point of view, is easily usable; file locations can be "predicted" and the logic behind the patterns is of course described in "man hier". Details matter, and as soon as you know why something is there, it becomes obvious why it is a good idea that it is there.

Of course, many of those advantages are way too "low level" to make any significant point in how FreeBSD is a good desktop OS or not. I can only speak from my individual experiences that I would not want to trade FreeBSD as my primary (because exclusive) desktop OS for anything else. Sure, there are things that don't work as I'd like to (or stopped working), but for a professional, secure, easy, powerful and versatile OS that I'm granted the honor to use it for free I won't complain too much. :-)

The naming for the FreeBSD branches is a bit confusing right now as there are 3 separate naming conventions in use: -CURRENT/-STABLE/-RELEASE, RELENG_X/RELENG_X_Y both from the CVS days; base/head, base/stable, base/releng from the SVN switchover.

-CURRENT (aka base/head in svn terms) is where the most development occurs. This will become the next major (x.0) release of FreeBSD, at which point a new -STABLE branch is created.

-STABLE (aka base/stable/X in svn terms, where X is one of 8, 9, or soon 10) is the development tree for a specific major version of FreeBSD. Currently, there are 2 stable trees under development (for FreeBSD 8.x and 9.x) and a third will be created shortly (for FreeBSD 10.x). Most development that occurs here is merging features from -CURRENT/head, although some new features are developed directly in here. All minor releases (8.1 through 8.4; 9.1 through 9.2) are created from the -STABLE branch for that major version.

-RELEASE (aka base/releng/X.Y in svn terms) is really two separate things: a specific release as distributed on CDs which never changes (this is more commonly known as -RELEASE); a security branch that gets security updates as needed (this is more commonly known as -RELENG).

For an outsider, or someone who used FreeBSD a few years ago and just coming back to it, it's confusing as hell. In another year or so, when 8.x is no longer supported and all CVS-related terms are gone, it will be much easier to understand. Do you want head (devel), stable (devel), or releng (user release)?

It's also extremely confusing right now as there are two separate packaging systems in use (pkg_* and pkgNG) with different releases supporting different package tools. Thankfully, there will be proper pkgNG repos for 9.2 and 10.0 and all releases going forward, so one can easily ignore the old pkg_* tools starting now. Again, in another year or two, when 9.x is no longer support, it will be much simpler as pkg_* will be gone.