Favorite:
Reliability, Jails, License, Binary upgrades (this helps a lot upgrading remote servers and survive a reboot), Community, Modular design, Linux emulator. Support for some windows network drivers.
Less crazy than Linux. In Linux you get a zillion unusable stuff that just adds noise. You can even get a web server in the kernel. Way too geek! BSDs are more serious, more for real life. BSD is more think before you do.
Dislike:
*Can't run a decent virtual machine on top of it.
*Can't use Wine.
*Not as used as Linux
*Old ports are dropped too fast. With FreeBSD is upgrade or die. Sometimes an upgrade is not convenient specially if you run a load of software. Try to run a FreeBSD 8.0 without compiling and you'll know what I mean. Yes I know vulnerabilities and problems are lurking around. But sometimes you just need it working.
*Other thing I dislike and that is unnecessary. There are a load of packages that take ages to download since when building it, the system tries to contact a zillion defunct links sometimes just ending in the one provided by FreeBSD.org ftp server.
Maybe it would be better to get the build system download a file containing active links and have fetch download one using some randomly picked package.
Or maybe just put a simple web redirection to the actual location. This is very easy to implement and will eat less resources than an outdated list that eventually causes everyone go to FreeBSD.org FTP servers. How about use bittorrent? I wouldn't mind donating some of my bandwidth to some BSD peers by seeding some torrents as long as I can add a quota (time limited and rate limited). Let's say give 100 Gb monthly to other BSD users at 20Kb/sec top. About security well there are hashes and digital signatures.
Binary updates are complex and require relatively complex procedure. I would love a fire and forget. Sort like. Go update all you can and do whatever you need to do, just let me know when you are done.
Would like:
Check this out:
https://lwn.net/Articles/475361/
Something like this would be great to increase security. Sort like an application runs with capabilities and kisses them good bye after some point. Let's say a server reads all its configuration and from there nothing can be read. Or just starts with reduced capabilities. If you are only going to talk to the network why on earth would you need to write to a file? If you only read configuration files why do you need to write? And if you need to log that should be different than write to a file. If you only process files why would you need to talk to the network? This way if some binary is vulnerable scalation of privileges is harder. I know you can achieve something like this with privileges, users, processes, chrooting, jails and some other things as Postfix does to some extent, but is so hard to achieve that almost nobody does.
Also would love a transacted filesystem. If your software starts writing to files and in the middle it crashes. Why leave things inconsistent? If the operating system knows all of this? If something started writing files and it crashed without closing the transaction, have the OS revert all of that as in databases. That is something where Windows kills everyone and it helps a lot with reliability.
I would like the kernel to be hotpatchable like Linux. That would decrease "server down due to not programmed maintenance".
And some weird idea for the future. How about a kernel upgrade without touching userland? Something like. I put all things in standby (running processes, all network transfers, open files, jails ...) upgrade the kernel and resume after reboot. Sort of hibernate userland for some seconds and resume from there with the upgraded kernel.