For Windows, I'd recommend vm-bhyve, it runs much better than VirtualBox's Windows. There's a nice quickstart guide on the vm-bhyve git page. One thing they leave out is that if you use the default Windows template, you have to add
bhyve_options="-A"
at the end of the file. Its documentation, though it has a wiki, is a bit sparse. I haven't gotten sound in Windows, though I didn't try, but I think
vermaden has. (His blog also has some useful vm-bhyve stuff, if I remember correctly.
For Linux, if you don't need a GUI, it's great. Use grub as the bootloader, and you can either ssh into it from your local host or use
vm console <vmname>
. If you need a GUI it's a little trickier, depending upon which distribution you're using. For example, Debian, Devuan, or Arch will require some tricks that I haven't seen documented on the github pages, to get it to boot consistently, you have to use uefi boot, etc.
Hopefully, someone with more knowledge will chime in. I have a Windows install for a couple of work things that require windows, and a few RedHat installs, as well as a couple of other Linux installs, but mostly I just use those for fun.