I don't fully understand the difference between geckodriver and marionette.
For example, when I use Selenium WebDriver to control a Firefox browser, I need a geckodriver binary to listen the WebDriver protocol from Selenium.
Selenium uses W3C Webdriver protocol to send requests to Geckodriver, which translates them and uses Marionette protocol to send them to Firefox
Selenium<--(W3C Webdriver)-->Geckodriver<---(Marionette)--->Firefox