What @flowmage said is pure gold:
The shortest answer: If you have to ask, you don’t want it.
I wholeheartedly agree! The biggest difference between running Home Assistant on a dedicated tiny computer vs. in a virtual machine on a bigger server is that you have to spend the time/effort learning how to deal with virtual machine setup. Honestly, I still struggle with that a bit. It’s not hard to get it working, but the devil is in the details… the hard part is getting it working really well. What I mean by that is: With dedicated hardware, it’s simple to shut it down or restart it. With a virtual machine running on a server, you want to set it up so the virtual machine starts up automatically if you have to reboot the server. Like, if the server loses power for example (this is why I love that mine is an old laptop, because it basically never loses power, and only reboots when I specifically want it to). The other thing is a clean shutdown… I don’t like the idea of just hard-stopping the virtual machine if I need to reboot or replace the server. That’s equivalent to pulling out the power cord on a physical computer while it’s running, which isn’t cool because… what if it’s in the middle of making changes to a config file when the power is cut? You don’t want to let things get corrupted like that. So I prefer to request the computer to shutdown politely, so it can finish what it’s doing and then go off. If you run HA in a virtual machine on a server, then the first two problems you have to deal with are (1) how to make the virtual machine automatically start when the server boots up, and (2) how to make the server know that when it is shutting down or rebooting, it needs to first tell the virtual machine politely to shutdown, wait for it to finish shutting down, and then allow the server to shutdown. And worse, you want all that to happen as quickly as possible, because rebooting the server means you have to sit through shutting down the VM, shutting down the server, starting the server, and then starting the VM – that can be like 5 minutes, which is annoying to sit and wait for if you’re babysitting it to make sure whatever you did worked.
Besides startup and shutdown, there are two more things you have to figure out to run Home Assistant in a VM…
One is how you want networking to work. VM software gives you a variety of options, but the one I found the most convenient is to make the VM behave just like any other PC on the network. This means it creates a virtual network adapter, with its own MAC address, and that way your router can assign it an IP address and a name, just like if it were a physically separate computer on your network. That also means if you ever decide to change from running HA on a VM to dedicated hardware like a Green, then you don’t have to do any major changes to how you access HA, just have to go into the router’s config and change it to the MAC address of your new hardware. This makes it much better than other options, so I won’t even mention them. 
The last tricky thing is if you need to connect any USB devices directly to the HA computer, like a Z-Wave antenna. With dedicated hardware, this is easy – just plug it in.
But when you run Home Assistant in a virtual machine on a server, the VM doesn’t automatically have access to the hardware plugged into the server. You have to choose how devices plugged into the server get “mapped” or “passed through” to the VM. You can find info on a few ways to do this, but it’s important to choose a way that lets you access it even if you plug it into a different USB port. One super annoying thing about hardware is that devices get numbers or IDs assigned them, and sometimes plugging in a new device can cause the old devices to get assigned different ID numbers! So if you set up your VM config to map a USB Z-Wave device into the VM by its USB bus ID, then as soon as you plug another USB device into your server (or remove one), that ID might change and Home Assistant inside the VM might see the Z-Wave device just disappear! No bueno. So I found a way for the VM to identify the USB stick by manufacturer ID instead of USB bus ID, and this makes it work no matter what USB port it’s in, or what other devices are plugged in or not.
If you can make it past all that stuff, you’re good to go! The virtual machine program I use is the one I am most familiar with – that is VirtualBox. It’s nice because it works on any computer (Windows, Linux, Mac) with the same interface. It’s pretty intuitive to set up through a graphical interface, so it’s not just monkeying with config files. I did have to get an add-on for it to support the USB device pass-through, and in order to get it to start up and shut down elegantly when the server starts up and shuts down, I did have to figure out how to control it from the command line, and run it like a service in Ubuntu. A different option than VirtualBox is KVM, which is only for Linux. I tried this first, since my server is in fact Linux, but I struggled getting the USB Z-Wave stick to show up in the VM. I also struggled with the initial setup of the virtual machine, but after doing more with KVM at work, I think I’m more comfortable with it and would give it another shot, because I think it would be able to start up and shut down faster than VirtualBox does.
But yeah, given all that complexity, I am going to try using the Home Assistant Green instead for a while, and see how that goes. I am not running anything else on that server with my HA VM, so I am not really getting any value from having it in a VM. @jamesfreeman – I know you’ve been very curious about this VM stuff, so hopefully this all helps!
@flowmage and @andrewl – For video camera setup, I currently have a Windows box running a program called BlueIris. It was recommended by a YouTuber I like called “The Hook Up”. I have had a generally good experience with it, but there are a few things that could be better. It was $50, and it’s not open source, so there’s that. Updates are generally good quality, setup wasn’t very hard, but the PC I’m running it on is old and can’t really handle 4K video feeds. Running at 1080p is fine, but the frame rate drops to just a few fps in 4K. So I’m planning to build a whole new box for gaming and demote my current gaming box to be a new camera server. I’m going to try using Shinobi – ever heard of it? It sounds great. And also planning to make a dedicated NAS box running TrueNAS. I feel like it’s reasonable to keep all these things on separate hardware while I’m learning what I do/don’t like, so if I want to change any one of them out for an alternative, I know it won’t interfere with the uptime of the others. Maybe later, I’ll combine some/all of them onto fewer servers, but maybe not if that doesn’t seem to provide any tangible benefit. 