The BIRD Internet Routing Daemon (posted 2015-02-01)
The BIRD Internet Routing Daemon supports RIP, OSPF, BGP and BFD. Unlike Zebra/Quagga, all the protocols are combined in a single daemon with a single configuration file. I once again made good use of the FreeBSD ports, although BIRD has so many dependencies that the 2 GB drive that I had configured for my VM wasn't big enough...
I edited the included example bird.conf file and got a BGP session working. However, I had somewhat of a hard time: BIRD's configuration system isn't like anything I've used before. But worse, the birdc tool that lets you interact with the daemon is very non-obvious. And although BIRD's documentation is pretty decent for an open source project, it doesn't discuss the operational aspects of BGP. To add insult to injury, birdc doesn't have any built-in knowledge of BGP. Rather, BGP is handled as a generic protocol instance. This means that the built-in tab-to-complete and ?-to-show-options don't show you what you can do. The wiki has a few examples but is still not very helpful.
As such, BIRD is definitely not recommended for casual experimentation with BGP. For that, Quagga or even Zebra (which I can run on my Mac!) are much better, as the way they are configured is more Cisco-like, which means the skills gained are relatively easy to transfer to Cisco or Brocade routers. Or, if that's not important, try OpenBGPD.
On the other hand, BIRD does indeed seem to be much more mature and well-supported than OpenBGPD or Quagga (while Zebra has been dead for a decade): BIRD is currently being used as a route server at several internet exchanges. So for production use, BIRD is probably a good choice. However, expect a shallow learning curve.
(Pet peeve: a steep learning curve implies that you improve a lot in a short amount of time. So something that's hard has a shallow learning curve, not a steep one.)