Sorry for the delayed response. You are correct on all other accounts. But this, I have to pick at the nits…
You have to have a gcode sender, even if it’s a “sneaker-net” gcode sender consisting of writing the gcode to an sd card, and plugging it into an sd-capable controller. You may not need a separate gcode sender, if your CAM software can send the gcode to your controller, but you still have a gcode sender in there.
EstlCAM and Mach/LinuxCNC are hybrids in that they distribute the controller out to a computer that can also manage gcode files and/or perform CAM, therefore short circuiting the need for a dedicated gcode sender. Although you could probably figure out a way to send gcode to a machine controlled by either control software.
Now, I realize that we’re (ok, I’m) probably squabbling over semantics, but gcode senders are the rule, not the exception. I wouldn’t say they are optional. There are just ways to work around needing a dedicated gcode sender.