Sunday, February 4, 2018

Statically linking xmlrpcpp (L-GPL), how roscpp is licensed as BSD?

DISCLAIMER: This is just a note for my finding, which by no means is guaranteed to be legally correct.

`roscpp` statically links `xmlrpcpp` (see #1).

ROS' xmlrpcpp is licensed as L-GPL.

As long as an application linking statically to an L-GPL library must conform to certain conditions, static linking under certain condition is possible, which `roscpp` qualifies for.

> statically linked:
>
> -  Either you must release both parts as LGPL.
> -  Or provide everything that allow the user to relink the application with a different version of the LGPL source code. In this case the other requirements are the same as if it was dynamically linked.

By being opensource-d, roscpp qualifies the 2nd option.

That said, how can roscpp be licensed under BSD, not L-GPL?

This is what I'm still not entirely sure about, but BSD is GPL-compatible so as long as the above condition is met it can be licensed differently AFAIU.

#1

    $ roscd ros_comm
    $ git log -1
    commit 1b8fe87ccd662b597faf2d6ae0f862096c7d96a3
    Author: Dirk Thomas <dirk-thomas@users.noreply.github.com>
    Date:   Fri Feb 2 16:04:30 2018 -0800
  
        Add process listeners to XML RPC server (#1319)
  
        When a process on a remote machine dies, the `process_died` callback of
            the server is called.  However, the process listeners given to
        `ROSLaunchParent` need to be forwarded to the server, otherwise they
            cannot be called.
  
    $ ack-grep -B 1 -A 2 xmlrpcpp .
    package.xml
    35-  <build_depend>std_msgs</build_depend>
    36:  <build_depend>xmlrpcpp</build_depend>
    37-
    38-  <run_depend version_gte="0.3.17">cpp_common</run_depend>
    --
    45-  <run_depend>std_msgs</run_depend>
    46:  <run_depend>xmlrpcpp</run_depend>
    47-</package>
  
    include/ros/xmlrpc_manager.h
    38-#include "common.h"
    39:#include "xmlrpcpp/XmlRpc.h"
    40-
    41-#include <ros/time.h>
  
    include/ros/publication.h
    33-#include "common.h"
    34:#include "xmlrpcpp/XmlRpc.h"
    35-
    36-#include <boost/thread/mutex.hpp>
  
    include/ros/master.h
    31-#include "forwards.h"
    32:#include "xmlrpcpp/XmlRpcValue.h"
    33-#include "common.h"
    34-
  
    include/ros/node_handle.h
    51-
    52:#include <xmlrpcpp/XmlRpcValue.h>
    53-
    54-namespace ros
  
    include/ros/topic_manager.h
    35-
    36:#include "xmlrpcpp/XmlRpcValue.h"
    37-
    38-#include <boost/thread/mutex.hpp>
  
    include/ros/subscription.h
    37-#include "ros/statistics.h"
    38:#include "xmlrpcpp/XmlRpc.h"
    39-
    40-#include <boost/thread.hpp>
  
    include/ros/param.h
    32-#include "common.h"
    33:#include "xmlrpcpp/XmlRpcValue.h"
    34-
    35-#include <vector>
  
    include/ros/service_publication.h
    32-#include "common.h"
    33:#include "xmlrpcpp/XmlRpc.h"
    34-
    35-#include <boost/thread/mutex.hpp>
  
    src/libros/node_handle.cpp
    46-#include "ros/this_node.h"
    47:#include "xmlrpcpp/XmlRpc.h"
    48-
    49-#include <boost/thread.hpp>
  
    src/libros/service_manager.cpp
    44-
    45:#include "xmlrpcpp/XmlRpc.h"
    46-
    47-#include <ros/console.h>
  
    src/libros/topic_manager.cpp
    43-
    44:#include "xmlrpcpp/XmlRpc.h"
    45-
    46-#include <ros/console.h>
  
    src/libros/master.cpp
    36-
    37:#include "xmlrpcpp/XmlRpc.h"
    38-
    39-namespace ros
  
    src/libros/init.cpp
    50-#include "ros/internal_timer_manager.h"
    51:#include "xmlrpcpp/XmlRpcSocket.h"
    52-
    53-#include "roscpp/GetLoggers.h"
  
    CMakeLists.txt
    8-find_package(catkin REQUIRED COMPONENTS
    9:  cpp_common message_generation rosconsole roscpp_serialization roscpp_traits rosgraph_msgs rostime std_msgs xmlrpcpp
    10-)
    11-
    --
    56-  LIBRARIES roscpp ${PTHREAD_LIB}
    57:  CATKIN_DEPENDS cpp_common message_runtime rosconsole roscpp_serialization roscpp_traits rosgraph_msgs rostime std_msgs xmlrpcpp
    58-  DEPENDS Boost
    59-)
  
    CHANGELOG.rst
    39-* move connection specific log message to new name roscpp_internal.connections (`#980 <https://github.com/ros/ros_comm/pull/980>`_)
    40:* move headers to include/xmlrpcpp (`#962 <https://github.com/ros/ros_comm/issues/962>`_)
    41-* fix UDP block number when EAGAIN or EWOULDBLOCK (`#957 <https://github.com/ros/ros_comm/issues/957>`_)
    42-* fix return code of master execute function (`#938 <https://github.com/ros/ros_comm/pull/938>`_)
    $