Note: this blog post was updated on 25 September 2017.

The popular React Javascript library from Facebook, amongst other open source projects from them, has a license (3-clause BSD license) and a patents grant. Recently, the Apache Software Foundation declared that this license + patents grant belongs to Category X. The licenses in Category X means that projects that are part of the ASF (Apache Software Foundation) umbrella cannot use libraries or code that are licensed under those licenses.

The patents grant basically amounts to this:

The patent grant says that if you’re going to use the software [Facebook] released under it, you lose the patent license from us if you sue [Facebook] for patent infringement

This means that if you’re using React.js in your startup’s code and later on down the line, Facebook patents something related to your startup and you try to sue them for patent infringement, then Facebook revokes the patent license. Their reasoning for this is that it will prevent patent trolls from suing Facebook but this doesn’t make much sense. There are other ways to protect themselves from patent trolls and it feels like this chaos is much more punishing to the open source communities around Facebook’s code.

Another alternative is that Facebook could support campaigns to end software patents.

The prominent example is CouchDB which was using React.js for their UI and is now looking for a replacement, which will likely be Preact. The commentary on reddit and hacker news has been deafening and close to unanimous. Almost all developers are against the patent grant and will be hesitant to use any Facebook code that carries that license and PATENTS file.

It seems like Facebook decided on this approach around 2 years ago and they considered one of their alternatives as “stop contributing to open source”. At the end of the day, Facebook is a business that uses open source to further their goals; they can choose not to contribute or close things up (which Google and Apple and others have done over the years).

If you’re looking to switch away from Facebook’s projects, here is a partial list of projects that include the poorly-considered patent protection:

  • React.js
  • Jest
  • Yoga (which was mentioned earlier in the SourceContribute blog)
  • prepack
  • React-Native
  • Relay
  • Redex
  • Flow type checker
  • osquery
  • bistro
  • proxygen
  • fboss
  • wangle
  • draft-js
  • ds2
  • reason
  • infer
  • litho
  • FBSimulatorControl
  • DataLoader
  • Fresco
  • Recipes-For-AutoPkg
  • regenerator
  • fbshipit
  • mcrouter
  • metro-bundler
  • fatal
  • react-devtools

While the PATENTS file has been around for 2 years in some of these projects, its implications have only been thought through recently. This is why it’s important for all open source projects to have a clear LICENSE file in their repositories and to clear up any potential confusion as early as possible.

Update from 20 September 2017

GraphQL also seems to have been hit with patent issues. The Facebook developers are looking into what their legal options are so that developers do not have to also abandon GraphQL.

Update from 25 September 2017

Facebook has chosen to re-license React to MIT. This could be due to WordPress considering options other than React.js for their web frontend.

As some developers on reddit have pointed out, the removal of the PATENTS grant is a good step forward but switching to the MIT license with an implicit patents grant does nothing to protect developers from patent infringement claims:

Facebook will have to provide more information on patents and what developers using their free/open source software such as React and GraphQL are protected from:

My opinion is that if Facebook has the money to buy “defensive” patents, then they also have the money to start lobbying to #EndSoftwarePatents

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s