Basically, you've got three options:
Option 1: BIOS/MBR
You can use BIOS-mode booting with an MBR partition table. Contrary to what you stated in your question, Linux does not need a primary partition. There are also ways to get Windows to boot with just one primary, but I'm not an expert on that. Thus, you should be able to get it all working with two or three primary partitions and everything else on logical partitions. Setting this up shouldn't be hard, but there are a lot of fiddly little details, many of which have no single right or wrong answer. I recommend installing either FreeBSD or Windows first and Linux last. Preparing your partitions before you begin may be worthwhile, if you understand your needs well enough in advance.
Option 2: EFI/GPT
You can have as many GPT partitions as you like (128 is the default limit, but that can be raised if necessary). There's no distinction between primary, extended, and logical partitions in GPT; there are simply partitions (no modifier). Windows, though, will boot from a GPT disk only in EFI mode, so this option depends on your having an EFI-capable firmware. (If you had a strong enough reason to favor this approach, you could look into using DUET on a BIOS-based computer, but IMHO that's more effort than it's worth in most cases.) Assuming you've got an EFI-based computer, the biggest problem with this approach is that the FreeBSD EFI boot loader is still experimental and isn't integrated into the FreeBSD install process, or even officially available in binary form. Thus, you might need to boot FreeBSD in BIOS mode and Windows in EFI mode. (Linux can boot in either mode.) This is possible with most modern EFI-based computers, but it can be awkward. The least awkward way to do it is to use rEFInd as the boot manager. This program is an EFI boot manager, but it includes the option to launch a BIOS-mode boot loader. You'll need to uncomment the scanfor
line in refind.conf
and ensure that hdbios
is among its options. Be aware that rEFInd's ability to launch BIOS-mode boot loaders is limited, though, so test it on your computer before investing too much effort in this approach.
Option 3: BIOS/hybrid MBR
I hesitate to even mention this option, because IMHO it's the worst of the three by a wide margin; but I'm trying to be complete, at least in enumerating the options. When presented with a hybrid MBR, Windows sees the MBR side, Linux sees the GPT side, and FreeBSD sees both sides. The upshot of this is that you can partition the disk using GPT for all OSes, set up Linux and FreeBSD to boot with that, create a hybrid MBR on the GPT disk, and install Windows to use the MBR partitions. You'll then need to re-install GRUB (since Windows will insist on overwriting GRUB). This might be an acceptable option if you really did need more primary partitions than are available, but as the linked-to page on hybrid MBRs describe, they violate the GPT specification and they introduce new dangers in your partition management. Thus, I can't recommend this method unless you have some compelling reason to use it. (It might be necessary if you were installing on a Mac, for instance.)
Overall, I think that the BIOS/MBR option is likely to be the best one for your situation; however, if you do have an EFI-based computer and if you want to experiment with bleeding-edge FreeBSD software, you might consider the EFI/GPT option. If you're using a Mac, the hybrid MBR option may be required.