The controller is the brain. Picking one depends on scale, language and how much you want to build yourself.
Carrier-grade, distributed, built for high availability. Java.
Modular, model-driven, huge plugin ecosystem. Java.
Lightweight, Python, ideal for learning and prototypes.
Compact, production-focused, config as YAML.
Learning or prototyping? Start with Ryu. Running a real fabric? Look at ONOS or Faucet. See our tools and reading list.