An Introduction to FRRouting
I recently learned about FRRouting (FRR), an IP routing protocol suite for Linux and Unix platforms. FRR has been under rapid development since the first release in April 2017. So, they just turned one, and they recently released version 4.0 of the software. According to the website, this release brings various enhancements aimed at creating the best routing protocol stack available.
How did I not know about all this? Doubtless due to a personal defect. In any case, the contributors designed FRR to streamline the routing protocol stack. FRR can be used for connecting hosts, virtual machines, and containers to the network, for network switching and routing, and much more. Here’s what I learned about the excellent FRRouting project and how it came to be.
FRR has its roots in the Quagga project, which I covered here. In fact, it started as a fork by some long-time Quagga developers who combined their efforts to improve on that project’s well-established foundation.
Anyone can fork an open source project, which can be either an advantage or a disadvantage. A fork can double the workload, divide the contributor community, or make two “meh” projects instead of one great one. It can create hard feelings. Or, a fork can succeed, by reviving a moribund project and bringing new energy and enthusiasm. It can also rescue a code base from the clutches of a bad commercial steward. Forking a project is rarely done on a whim because it’s a such a big step.
Examples of successful forks include Ubuntu, forked from Debian (although arguments rage over whether it is really a fork or some other weird thing nobody can think of a word for), the LibreOffice fork of OpenOffice, and my favorite, the MariaDB fork of MySQL.
MariaDB is the all-time great “having your cake and eating it” story. The short version is Sun Microsystems bought MySQL for a cool billion dollars and hired the talent that built it. But the MySQL executive team, including Monty Widenius and Marten Mickos, were publicly unhappy with Sun. They left Sun, taking their billion dollars with them. Then Oracle bought Sun, which motivated Widenius to fork MySQL and found MariaDB, which has been a clear success. (A longer version is here: Migrating to MariaDB from MySQL.)
Why Fork Quagga?
Quagga was created as a fork of the GNU Zebra project, which had died. So, FRR is a fork of a fork. I asked on the FRR developer's mailing list about this and received a wealth of interesting answers. (You can read the whole thread on the dev list archive.)
Here’s what people said:
"There was a desire for a project that was governed by community consensus and documented process."
"I find the FRR community very welcoming, very friendly, extremely helpful and respectful. It is very rare I come across communities like this and it is a real pleasure to engage in conversation and work on issues with them. If one needs a few eyes on a bit of code all you have to do is ask and you get constructive input, almost all of the time from multiple people."
"The easy and pleasant direct access to the developers is a great bonus."
There was a point in time where Quagga was running on a skeleton crew, and thousands of patches were backed up from a variety of contributors, sitting, aging, and going nowhere. Thus, working through the backlog and creating a fast-paced, community-oriented project governed by consensus and documented process are some of the primary FRR drivers. A lot of the work on FRR is devoted to implementing new protocols and features, including cloud networking technologies.
Governance is also a necessary part of any OSS project, and it can make or break a project. FRRouting managed this by joining the vendor-neutral Linux Foundation, which is home to many important projects including the Node.js Foundation, Let's Encrypt, and of course the Linux kernel.
FRRouting has a six-member technical steering committee, and members are elected to one-year terms. Maintainers have regular open meetings, and there is an official charter. This governing structure helps the project handle the numerous issues that any large, complex, and essential software project has to deal with, such as development direction and priorities, differences of opinion, licensing, finances, and so on.
Getting and Using FRR
FRR is hosted on GitHub. You may clone the repository, download source tarballs, or download .deb and .rpm packages. The documentation is quite good, and there is detailed information on becoming a contributor. The FRR user guide also provides a great overview of the architecture.
Visit FRRouting to learn more about the project. Also check out FRRouting on Juniper's Advanced Forwarding Interface for an interesting example of where FRR is already finding a home in advanced networking architectures.