I don't think I will provide you and everyone with the perfect answer, however, using a BSD system everyday for work, I am sure I can give you a useful insight in the BSD world.
I didn't ever use NetBSD, I won't talk a lot about it.
Do they use the same kernel?
No, although there are similarities due to the historic forks. Each project evolved separately.
Do they use the same userland tools? (what are the differences, if any?)
They all follow POSIX. You can expect a set of tools to have the same functionality between *BSD.
It's also common to see some obvious differences in process/network management tools within the BSDs.
Do they use the same package/source management system?
They provide a packaging system, different for each OS.
Do they use the same default shell?
No, for example FreeBSD uses csh, OpenBSD uses ksh.
Are binaries portable between them?
No:
(XXXX@freebsd-6 101)file `which ls`
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 5.5, dynamically linked (uses shared libs), stripped
They don't really support stable and fast binary emulation. Don't rely on it.
Are sources portable between them?
Some yes, as long as you don't use kernel code or libc code (which is tied up tightly to the OS) for example.
Do they use different directory trees?
No, they are very similar to Linux here.
However FreeBSD advocates the use of /usr/local/etc for third party software's configuration files. OpenBSD puts all in /etc...
They put all third party in /usr/local, whereas Linux distribution will do as they see fit.
In general you can say that *BSD are very conservative about that, things belongs where they belongs, and that's not something to make up.
How big are their respective communities? Are they the same order of magnitude?
FreeBSD's is the largest and most active, you can reach it through a lot of different forums, mailing lists, IRC channels and such...
OpenBSD has a good community but mostly visible through IRC and mailing lists.
Actually if you think you need a good community, FreeBSD is the way to go.
NetBSD and OpenBSD communities are centered around development, talk about new improvements etc. They don't really like to do basic user-support or advertising. They expect everyone to be advanced unix users and able to read the documentation before asking anything.
How much of the current development is common?
Due to really free licenses code can flow among the projects, OpenBSD often patches their code following NetBSD (as their sources have a lot in common), FreeBSD takes and integrates OpenBSD's Packet Filter, etc. It's obviously harder when it comes to drivers and others kernel things.
What are the main incompatibilities between them?
They are not compatible in a binary form, but they are mostly compatible in syntax and code. You can rely on that to achieve portability in your code. It will build or/and execute easily on all flavors of BSD, except if your going too close to the kernel (ifconfig, pfctl...).
Here's how you can enjoy learning from the BSD world:
Try to replace your home router with an openbsd box, play with pf and the network. You will see how easy it is to make what you want. It's clean, reliable and secure.
Use a FreeBSD as a desktop, they support a lot of GPUs, you can use flash to some extent, there's some compatibility with Linux binaries. You can safely build your custom kernel (actually this is recommended). It's overall a good learning experience.
Try NetBSD on very old hardware or even toasters.
Although they are different, each of them tries to be a good OS, and it will match users more than situations. As a learning experience, try them all (Net/Open/Free), but later you might find yourself using only 1 for most situations (since you're more knowledgeable in a specific system or fit in more with the community).
The other BSDs are hybrids or just slightly modified versions, I find it better to stay close to the source of the software development (use packet filter on OpenBSD, configure yourself your desktop on FreeBSD, ...).
As a personal note, I'm happy to see an enthusiast like you, and I hope you will find a lot of good things in the BSD world. BSD is not about hating windows or other OSs, it's about liking Unix.
Looking at this problem, you mention the following:
When a display is plugged into the external VGA display port, both the
attached display and the external display are active on the BIOS
screens.
Once FreeBSD begins to boot, the external VGA display is no
longer active.
This basically means that you need to edit your /boot/loader.conf
.
I would try something like the following in /boot/loader.conf
:
i915kms_load="YES"
kern.vt.fb.default_mode="1024x768"
Assuming "1024x768" is the resolution you are after.
Sources: freebsd.org forums, some random blog - I was not 100% for the name/spelling of the module, and FreeBSD vt man page
Ahhh, the Fn keys not working, almost forgot that one ... you cannot usually detect Fn key presses, however, your keyboard interprets them and uses it as a key modifier. So when you hit, say Fn+F4
, FreeBSD will get neither Fn
, nor F5
key events but another, the one for enabling/disabling the external screen, which afaik, depends on the type of keyboard you use. Sadly, FreeBSD does not have the proper driver loaded for your keyboard, so you would have to find the proper module and load it in the same way as above <mod>_load="TRUE"
in /boot/loader.conf
. I do not have enough info on your keyboard to be able to help more, though.
Best Answer
PC-BSD is FreeBSD with many enhancements to make a convenient, comfortable desktop environment, their "Push Button Installer" package management tool, a network utility and a unified control panel for easy access to admin utilities. So, yes, FreeBSD can be made to work like PC-BSD—that's exactly what the PC-BSD team have done!
If you want a graphical desktop system to get you started learning *BSD, then I would think PC-BSD is the ideal place to start—it gets you up and running with one of several popular desktop environments from the get-go, so you can then focus on learning other aspects of the system. If, on the other hand, you want to get your hands dirty from the beginning, learning how to install FreeBSD and additional software, you can use the ports system to add the extras you want.
As for the documentation, the vast majority of documentation relevant to FreeBSD will also apply to PC-BSD without modification, so the PC-BSD team focus their efforts on documenting the differences.
You can install PBI packages on a FreeBSD system—simply install the
ports-mgmt/pbi-manager
port, which provides the command line utilities for managing PBI packages. There is alsosysutils/easypbi
, which aims to provide a simple interface for creating PBI modules from FreeBSD ports. There are also ports of the PC-BSD network utility, theirwarden
jail utility and others.