My problem with the BSDs?
1. Bug checking – This consists of you placing the stuff on your production hardware and pretty much "hoping" it works. Very few people actually test some of the more rarer hardware, and if you have it, you're on your own, better know how to fix it yourself. (Case in point, I haven't found a version of OpenBSD that properly supports the SCSI controller on my Compaq Proliants. Yes, compaq makes crappy desktops, but their servers totally rock. It's not the hardware's fault, it's OpenBSD. When I tried to report the problem, all I got was rudeness, even from Theo himself at one point. The card is detected, but when the controller starts to hit a higher load, the kernel panics. Replicated by running "tar".)
2. Vendor support – almost none, and part of it is due to the lack of a united front on BSD. (And the attitude problem that some of the BSD core groups carry)
3. SMP support – half of the BSDs don't even have this out of the box. Come on guys, get with the program here. At least _pretend_ your OS was developed after 1996.
4. User community – Most of them are clueless of what they're running, doing so mostly because they want to appear "cool" because they choose to run a UNIX that isn't Linux. The rest of them that know what they're doing are mostly arrogant bastards.
5. Lack of decent packaging – Same reason I don't recommend slackware anymore. Their packaging system sucks, and they're doing nothing to improve things. These days, if you don't have a way to install binary packages (the ports tree doesn't count and I'll elaborate why below) that at least lists the packages that the one you're installing depends on, you might as well not have a packaging system at all. If you want to see a good system, look at debian's APT system, or Ximian's Red Carpet system.
6. Binary packages, or lack therof – I'm sorry, when I'm managing a 200 computer network, I just don't have time to go to each one and run make on the respective ports tree after running CVSup. I barely have time to install binary packages, let alone let thousands of machines compile stuff, especially when the machines need the memory and CPU to complete the tasks they're running at the moment. The mediocre selection of binary packages, and the shitty packaging systems are a deal killer to me.
7. Updating the system, or "make world" – I don't have a 14 hour downtime window once every few weeks to update critical software bugs, or upgrade to the latest versions of things. Most of the systems I run cannot be down for more than 5 minutes, and I'm not exaggerating there.
8. Userland NAT – This might just be a FreeBSD thing, but I mean, what the fuck. Seriously! I don't want every packet I make to transition down to userland software before being transmitted, and in reverse during recieve. It's not that damn hard to put it in the kernel, and it seriously improves performance.
BSD is what happens when you take developers who have no real-world experience on running a global WAN worth of machines, and no idea what the words "Management scaleability" mean, and let them develop an operating system.
It makes no difference to me that the source tree is security audited if it doesn't even run correctly on "real" hardware, and can't even deal with an SMP system without a kernel patch. That pretty much sums it up right there.