OK, I’ll be the pedantic, neuro-atypical pinhead…
The driver is what your computer needs to talk via the USB to your controller. I’m somewhat surprised you need this at all, but it’ll be quite generic.
The firmware is what you download to your controller, and has support for endstops, etc. That’s where you get into Marlin vs. GRBL.
There’s also CAM software that runs on your computer. It may or may not be connected to your controller. This would be things like EstlCAM, Fusion360 (with post-processor), etc. The primary function is to generate toolpaths to control your machine. This will likely be the long-term source of pain and frustration. Everything else is workflow. This is art/voodoo…
Finally, there’s… g-code sender/controller software (for lack of the correct term at hand), this would be software on your computer, connected to your controller that sends the g-code generated by your CAM software as well as immediate commands to your machine. Some CAM software has this functionality built in, some don’t. EstlCAM does, I don’t know about others. Other g-code senders/controllers are Repetier-Host, pronterface, and cnc.js.
Sorry, the Aspy OCD was raging hard… Do NOT take this as newbie shaming or bashing. It really helps communication when everyone is using similar vocabulary.
And of course, I expect to be taken to task if I got something wrong.