EMC2 + Linux
EMC2 has been renamed LinuxCNC since the version I installed on my control computer a couple of years ago. I'm using a version that's integrated into a Ubuntu install on my system. I'm using an older Athlon single core machine to control my CNC--it was a junker I already had around the house, so it was "free". EMC2/LinuxCNC is free, too, in that it is open source software under GPL with no cost to download and use. It runs fine on my older computer, and drives my Gecko G450 motor controller, which controls the steppers on my CNC.
Native Abilities Beyond the Basics
Aside from accepting GCode from my CAM program and pushing motors around, EMC2 has some nice built-in capabilities. It can use image files as depth maps, directly. It allows you to load an image then choose whether lighter or darker represents deeper. You'll want to process most images outside of EMC2 beforehand--cropping and contrast enhancement, for example. But it does a great job without needing to buy one of the various image CAM programs out there. You can even do a sort simple CAM by creating image maps of your own for simple objects in a paint program.
EMC2 also has a built in GCode editor and previewer. I have EMC2 installed in duplicate form to what's on my machine's controller on a system in my office. There I can edit GCode directly, or preview a cut on a virtual machine.
Now it has grown to have many capabilities. It can be used to control hexapod robots, and it can control a wide variety of CNCs beyond the basic X Y Z mill. It has worked very well for me. When I got it, expected to use it as a stop gap until I could afford a "real" program. I have no plans to replace it at all now.