I have introduced FreeBSD at a number of companies, and I'm a big fan of it, but also like Debian and Ubuntu a lot. Here are some things I like about FreeBSD:
* Since it's all developed in a smaller community, and FreeBSD hackers/users tend to be pretty opinionated about many things, most subsystems have a consistent feel and are very unsurprising. This makes that you can often guess and be right. It also means you don't get to have some hyped trends. (I have the same feeling about the Go language and community by the way.)
* This might be subjective but I feel that many administration tasks are very transparent, orthogonal and simple. Many system configuration, like enabling of services, network configuration, can be changed by a simple setting in a /etc/rc.conf shellvariables file with defaults in /etc/defaults/rc.conf. Stuff ends up in understandable text config files. Comments and options tend to be simple and don't require --lots-of-long-options --which-i-cant-ever-remember which GNU utils seem to really love :(
* The base system is being developed in a conservative way. We never reinstall servers for a major upgrade, we just upgrade running systems forever. We have some boxes that come from FreeBSD 6.0 (2005) and were gradually bumped up without reinstalling. There is little switching around of subsystems, so you don't often have to learn replacements (like ipfwadm/ipchains/iptables). The OS is just a vehicle to me, please don't complicate my life needlessly!
* The storage options are pretty nice. ZFS is now a common buzzword so I won't go into it, also Linux is now getting a good replacement in btrfs. But I also like FreeBSD's GEOM, which has a lot of 'building blocks' that you can stack on eachother. For instance, you can use gmirror to create a RAID1 mirror, then use geli to create an encrypted volume on top of that.
* The ports/packages collection is a rolling release and generally has very new versions of apps from OpenJDK to Node to PHP etc. In my mind, it's best to keep your app stack continuously fresh, compared with lagging and doing large upgrades every few years. That way you get security updates from the app authors constantly, instead of from maintainers who backport it. I actually prefer this, since upgrading apps creates tangible value for our developers and customers, but it's a tradeoff. If you want to be hands-off, set-and-forget, no-budget-for-maintenance, then you might be better off with an Ubuntu LTS or RHEL strategy of locking apps into old versions with backported fixes. But damn, I cringe whenever I see a box with PHP 5.3...
* If you compile ports yourself, the port maintainers often create configurable options so you can build stuff with your own preferences. This is very useful for instance if you need ffmpeg with some specific codecs. It can be a real drag on Linux to get it just right. Creating your own binary package repository with your favorite custom options is super easy.
* We distribute that stuff like crazy (e.g. on appliances), and it's nice to be able to do that without having too much fear about the GPL(v3).
That said, there's some positive points about Linux (mostly Ubuntu/Debian here):
* Desktop support is undoubtedly better on Linux right now. FreeBSD desktops seem a bit like Linux desktops were in the '00s: manual twiddling, lots of tweaking, having to really watch what video and wireless hardware you get. PC-BSD should be better in this regard, but I haven't tried BSD on the desktop for years now. But I'm tempted to give it another try.
* I think AppArmor is a really cool way to constrain applications without going the whole container way, for which FreeBSD doesn't have an equivalent right now.
* While I'm skeptical about systemd's overreaching goals, I do agree that it is time to centralize service and event management. It's not a critical issue to me however, I'm not too bothered by the old inits for instance. So hopefully FreeBSD doesn't have to have a big controversy and pick the 'good parts'.
* Obviously Linux has a lot of momentum right now, so using it might be less of a long term risk in terms of support, hiring, etc.
* Since it's all developed in a smaller community, and FreeBSD hackers/users tend to be pretty opinionated about many things, most subsystems have a consistent feel and are very unsurprising. This makes that you can often guess and be right. It also means you don't get to have some hyped trends. (I have the same feeling about the Go language and community by the way.)
* This might be subjective but I feel that many administration tasks are very transparent, orthogonal and simple. Many system configuration, like enabling of services, network configuration, can be changed by a simple setting in a /etc/rc.conf shellvariables file with defaults in /etc/defaults/rc.conf. Stuff ends up in understandable text config files. Comments and options tend to be simple and don't require --lots-of-long-options --which-i-cant-ever-remember which GNU utils seem to really love :(
* The base system is being developed in a conservative way. We never reinstall servers for a major upgrade, we just upgrade running systems forever. We have some boxes that come from FreeBSD 6.0 (2005) and were gradually bumped up without reinstalling. There is little switching around of subsystems, so you don't often have to learn replacements (like ipfwadm/ipchains/iptables). The OS is just a vehicle to me, please don't complicate my life needlessly!
* The storage options are pretty nice. ZFS is now a common buzzword so I won't go into it, also Linux is now getting a good replacement in btrfs. But I also like FreeBSD's GEOM, which has a lot of 'building blocks' that you can stack on eachother. For instance, you can use gmirror to create a RAID1 mirror, then use geli to create an encrypted volume on top of that.
* The ports/packages collection is a rolling release and generally has very new versions of apps from OpenJDK to Node to PHP etc. In my mind, it's best to keep your app stack continuously fresh, compared with lagging and doing large upgrades every few years. That way you get security updates from the app authors constantly, instead of from maintainers who backport it. I actually prefer this, since upgrading apps creates tangible value for our developers and customers, but it's a tradeoff. If you want to be hands-off, set-and-forget, no-budget-for-maintenance, then you might be better off with an Ubuntu LTS or RHEL strategy of locking apps into old versions with backported fixes. But damn, I cringe whenever I see a box with PHP 5.3...
* If you compile ports yourself, the port maintainers often create configurable options so you can build stuff with your own preferences. This is very useful for instance if you need ffmpeg with some specific codecs. It can be a real drag on Linux to get it just right. Creating your own binary package repository with your favorite custom options is super easy.
* We distribute that stuff like crazy (e.g. on appliances), and it's nice to be able to do that without having too much fear about the GPL(v3).
That said, there's some positive points about Linux (mostly Ubuntu/Debian here):
* Desktop support is undoubtedly better on Linux right now. FreeBSD desktops seem a bit like Linux desktops were in the '00s: manual twiddling, lots of tweaking, having to really watch what video and wireless hardware you get. PC-BSD should be better in this regard, but I haven't tried BSD on the desktop for years now. But I'm tempted to give it another try.
* I think AppArmor is a really cool way to constrain applications without going the whole container way, for which FreeBSD doesn't have an equivalent right now.
* While I'm skeptical about systemd's overreaching goals, I do agree that it is time to centralize service and event management. It's not a critical issue to me however, I'm not too bothered by the old inits for instance. So hopefully FreeBSD doesn't have to have a big controversy and pick the 'good parts'.
* Obviously Linux has a lot of momentum right now, so using it might be less of a long term risk in terms of support, hiring, etc.