Around the time that the GPLv3 was being finalized I decided to read up on the Affero General Public License.  Most of you are probably familiar with the AGPL (so skip to the next paragraph), but for those that aren’t here’s a crash course.  The GPL requires derivative works based on GPL’d code to be released publicly.  However, this requirement only applies if the person/company that developed the derivative work decides to redistribute the code (in binary format).  Clearly this doesn’t apply to companies like Google or Facebook that use and create derivative works from GPL code, but doesn’t redistribute the code.  The AGPL was designed to close this loophole.   The AGPL requires derivative works to be released into the community, even if the code is only being accessed over a network, and not being redistributed.

At the time, I had my reservations about AGPL licensing.  I wondered if, for instance, Google would have used as much open source as they currently do if much of the code was AGPL’d.  Would Google really want to release code modifications that aided Google’s differentiation vs. the competition?  Could Google really separate out the GPL/AGPL code from the proprietary Google code/applications?

Why would a company like Google want to contribute their derivative works back?  One reason could be self interest.  A great example of this is the news from Facebook that they have made some interesting modifications to memcached, which lets Facebook run 200,000 UDP request/second vs. 50,000 before the Facebook modifications to memcached.

Facebook has decided to release their modifications and is hoping that they’ll be picked up by the official memcached distribution.  Why do this?  Clearly there is no license-based reason to do so since memcached is BSD licensed. Well, aside from being all around good guys/gals, contributing this code back to memcached ensures that Facebook can use the official version they get from memcached in the future.  Facebook doesn’t have to keep its own branch of memcached internally and try to apply service and feature updates to its own version as newer versions of the official memcached distribution become available.

Do the modifications that Facebook made to memcached aid Facebook’s differentiation vs. competitors? If so, why release the code and allow competitors to access the same technology benefit?

To the first question, I’d say the modifications appear to be differentiators.  The modifications allow Facebook to serve more customers with lower latency at a lower TCO (due to fewer servers required).  To the second question, it seems Facebook values using off the shelf open source in its infrastructure.  Like many companies that use open source, Facebook would rather that someone else (i.e. the memcached community) take care of that code while Facebook developers work on code/applications that are much closer to the Facebook end user.

What do you think?