Proprietary Python, PyInstaller apps using libraries licensed under LGPL

The LGPL lets your proprietary app use LGPL libraries as long as you (among other things) let users ‘recombine your software with modified libraries.’  The LGPL says you must provide ‘object code’ for your app.  (So users can keep using your proprietary software even as the libraries are improved, by bug fixes and other improvements.  So your proprietariness is not impeding progress in the libraries: users won’t be motivated to improve the libraries if they can’t use the improvements in their context.)

What if your app is interpreted Python, packaged with PyInstaller (or other freeze tool?)

PyInstaller bundles:

  • a bootstrap loader (dynamic)
  • the Python interpreter (executable, compiled to platform’s machine code)
  • executable  LGPL libraries (say, Qt and PySide)
  • other LGPL .pyc modules
  • your app’s .pyc files ( ! it doesn’t use the .py, this is a gotcha for naive PyInstaller users)

(What follows is supposition…)

Then you meet the terms of the LGPL since the way that PyInstaller bundles is well documented.  A motivated user could ‘recombine’ your software with modified libraries, by punching the libraries out of the PyInstaller bundle and filling the hole with new libraries. Or equivalently, extracting your proprietary object code and relinking (re-PyInstaller-ing) it with updated LGPL libraries.  I’m not sure what tools are available to do it, or whether the LGPL requires a tool to be available.  It might be that the LGPL requires you to ‘convey’ your app’s proprietary code as a directory tree of .pyc files?

In this case, both the executable LGPL libraries and the LGPL .pyc modules are ‘object’ files as defined by the LGPL.

Your proprietary code in the bundle is .pyc, which can be reverse engineered (but so can proprietary object code that is compiled real machine code.)  Distributing a directory tree of .pyc goes a long way in revealing your proprietary object model.  About the only ‘information’ omitted from they object .pyc code are the docstrings and other comments, which probably include your tests (which are a redundant specification of your program.)


One thought on “Proprietary Python, PyInstaller apps using libraries licensed under LGPL

  1. Pingback: Converting from PySide to PyQt | plashless

Leave a Reply

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

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

Google+ photo

You are commenting using your Google+ 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 )


Connecting to %s