Why Tcpreplay went GPL

I’ve been thinking about this for a while and honestly pretty made up my mind months ago, but I finally go enough determination to edit almost all the files in the trunk source tree and change the license from the 3 clause BSD to GPLv3.

There’s actually a number of reasons for the change and I wanted to share the ones that were most important to me. I don’t expect everyone to like the decision, but probably most won’t care since it doesn’t really impact them. But sometimes people get all bent out of shape when a project that has been around as long as Tcpreplay (10 years? Damn, where did the time go?) changes its license so I wanted to give my side of it. The change doesn’t mean I don’t like the BSD license anymore, just that I now feel the GPL is more appropriate for the Tcpreplay Suite.

First, for those of you not familiar with the GPL and BSD, what this means for 99% of users is everything stays the same. Tcpreplay is still distributed at no cost and the source code is available for you to read, edit and redistribute. You can use Tcpreplay at no cost for personal and commercial use. The only difference is that if you redistribute Tcpreplay, you need to make the source code of Tcpreplay and any code which links to it available to anyone who asks for it. If your code runs as a separate process then you don’t need to share that. There’s no legal requirement for you to proactively send me a copy of your changes, but I would very much appreciate that.

As for why, it comes down to the following reasons:

  1. Values. I still want to give Tcpreplay away for others to use and build upon, but it’s been frustrating to hear about people who have added features and then for one reason or another decide they don’t want to share those with the rest of the Tcpreplay users. This willingness to take, but not give back to the community sucks and I’d rather not allow people to continue to do that. I’ve got hundreds of hours of effort in Tcpreplay and I suppose I don’t think it’s “fair” for people to build upon it without sharing back. I’ve not only seen this with Tcpreplay, but other BSD projects- one of my previous employers added an enhancement to fragroute, distributed the new binaries to their customers, but never sent the patches back to the original author. I think my old company would of sent their changes back if the author knew about it/asked, but because there was no legal reason to do so, they never took the 5 minutes to do it.
  2. Support. I’ve actually had people enhance Tcpreplay, distribute it to others and then have these users contact me for support. They couldn’t give me the code and I was stuck trying to explain to someone that even though it was my project, I couldn’t help them because I couldn’t fix the bug they were seeing.
  3. Future. Tcpreplay will have a library/API in 4.0 and I hope it will become much more useful to other developers. Going GPL helps to protect the main tree from others creating incompatible forks. Yes, anyone can still fork Tcpreplay for their own purposes, but at least this way I can incorporate the good changes if they start distributing it to others. If you want to fork Tcpreplay for your own internal/personal use, go for it- I just want to limit the chances running into your libtcpreplay.so with an incompatible API getting out in the world causing problems for people.
  4. Developers. I’ve discussed license choices with other existing and potential Tcpreplay developers and there appears to be a greater level of comfort with the GPL and it seemed that they would be more willing to contribute if their contributions would be GPL’d versus BSD. Honestly, I don’t expect to see a lot more people working on Tcpreplay due to the license change, but every little bit helps.


UPDATE: One thing I wanted to add, I chose the GPLv3 because I believe it affords better protections then v2. If you have an existing GPLv2 application and would like to incorporate any part of the Tcpreplay Suite into it, please contact me to discuss dual-licensing options.