Combining Apache v2 and GPL v2 Open Source Licenses
TL;DR: Hops is provided as both Apache v2 and GPL v2 licensed code. In order to integrate Apache Hadoop (Apache v2) and MySQL Cluster (GPL v2), we provide a DAL API (similar to the JDBC API). When installing Hops, users can select our MySQL Cluster connector library and the library is subsequently dynamically linked with the Hadoop binaries.
Hops' source code is derived from the Hadoop codebase and, as such, it is available under the Apache version 2.0 open-source licensing model. MySQL Cluster and its connectors, on the other hand, are licensed under the GPL version 2.0 licensing model. Similar to the JDBC model, we have introduced a Data Access Layer (DAL) API to bridge our code licensed under the Apache model with the MySQL Cluster connector libraries, licensed under the GPL v2.0 model. The DAL API is licensed under the Apache v2.0 model. The DAL API is statically linked to both Hops and our client library for MySQL Cluster that implements the DAL API. Our client library that implements the DAL API for MySQL Cluster, however, is licensed under the GPL v2.0 model, but static linking of Apache v2 code to GPL V2 code is allowed, as stated in the MySQL FOSS license exception. The FOSS License Exception permits use of the GPL-licensed MySQL Client Libraries with software applications licensed under certain other FOSS licenses without causing the entire derivative work to be subject to the GPL. However, to comply with the terms of both licensing models, the DAL API needs to generic and different implementations of it for different databases are possible. Although, we only currently support MySQL Cluster, you are free to develop your own DAL API client and run Hops on a different database. The main requirements for the database are support for transactions, read/write locks and at least read-committed isolation.
Linking DAL libraries dynamically
We need to link in DAL libraries at runtime to Hops. As such, in Hops, both Hops and our DAL client library need to be installed separately. We remove this burden, however, by encapsulating both systems in our Chef-based deployment model (called Karamel). When installing Hops, you need to explicitly include support for our default NDB implementation of the DAL API. Karamel then downloads, installs, and configures the binaries for you. Other DAL API implementations for different high performance databases are also possible, including proprietory ones.