PyAV icon indicating copy to clipboard operation
PyAV copied to clipboard

Clarification about PyAV license?

Open bjuncek opened this issue 4 years ago • 4 comments

Overview

License file of PyAV is advertised as BSD3; however, as in conda-forge it is packaged directly with (non-free) version of FFMPEG, shouldn't the binaries should be advertised as GPL license as well?

Expected behavior

Whilst the codebase is and can be BSD3 licensed, it should be noted for the user that installation of the binaries makes the entire package GPL-licensed. For example, conda-forge FFMPEG is clearly marked as being GPL as a binary in their feedstock. OpenCV on another hand has a note in their license file that user takes responsibility for non-free FFMPEG as it's redistributed with it's packages.

Actual behavior

Licensing is at the moment mentioned in the license file linked above, in the docs, and conda-forge/pypi feedstocks respectively. There is no mentioning of a usage of non-free FFMPEG, or GPL license.

When submitting bug report, I found the mention in the collection script (see output bellow), but I think it should be clearly marked in the repo/feedstocks as well.

PyAV v8.0.3
git origin: [email protected]:PyAV-Org/PyAV
git commit: unknown-commit
[ ... ]
library license: GPL version 2 or later
libavcodec     58. 54.100
[ ... ]

Investigation

FFMPEG the is mostly, LGPL (thus allowing dynamic linking without license change), but FFMPEG built in conda-forge (and the one that is installed by default when one installs pyav from the conda-forge), is built with --enable-gpl flag set, making it GPL license (see here for details) that does not allow dynamic linking.

As PyAV links to the GPL version of FFMPEG, unless I misunderstand the way PyAV links to FFMPEG, that the binaries should be advertised as such, either in the repository directly (see opencv example above as an option) or in the pypi/conda-forge directly.

I have done the following:

bjuncek avatar Sep 01 '21 16:09 bjuncek

I also like what opencv does in its PyPI README (https://pypi.org/project/opencv-python/):

## Licensing

Opencv-python package (scripts in this repository) is available under MIT license.

OpenCV itself is available under Apache 2 license.

Third party package licenses are at LICENSE-3RD-PARTY.txt.

All wheels ship with FFmpeg licensed under the LGPLv2.1.

Non-headless Linux and MacOS wheels ship with Qt 5 licensed under the LGPLv3.

The packages include also other binaries. Full list of licenses can be found from LICENSE-3RD-PARTY.txt.

Unpacking a PyAV wheel shows that lots of third-party libraries are included, but there's no license info for them in the wheel or in the README:

% unzip av-8.0.3-cp39-cp39-manylinux2010_i686.whl 
Archive:  av-8.0.3-cp39-cp39-manylinux2010_i686.whl
  inflating: av/__main__.py          
  inflating: av/stream.cpython-39-i386-linux-gnu.so  
  inflating: av/descriptor.cpython-39-i386-linux-gnu.so  
  inflating: av/packet.cpython-39-i386-linux-gnu.so  
  inflating: av/dictionary.cpython-39-i386-linux-gnu.so  
  inflating: av/error.cpython-39-i386-linux-gnu.so  
  inflating: av/plane.cpython-39-i386-linux-gnu.so  
  inflating: av/option.cpython-39-i386-linux-gnu.so  
  inflating: av/frame.cpython-39-i386-linux-gnu.so  
  inflating: av/format.cpython-39-i386-linux-gnu.so  
  inflating: av/_core.cpython-39-i386-linux-gnu.so  
  inflating: av/buffer.cpython-39-i386-linux-gnu.so  
  inflating: av/utils.cpython-39-i386-linux-gnu.so  
  inflating: av/deprecation.py       
  inflating: av/logging.cpython-39-i386-linux-gnu.so  
  inflating: av/bytesource.cpython-39-i386-linux-gnu.so  
  inflating: av/__init__.py          
  inflating: av/enum.cpython-39-i386-linux-gnu.so  
  inflating: av/datasets.py          
  inflating: av/subtitles/stream.cpython-39-i386-linux-gnu.so  
  inflating: av/subtitles/subtitle.cpython-39-i386-linux-gnu.so  
  inflating: av/subtitles/codeccontext.cpython-39-i386-linux-gnu.so  
  inflating: av/subtitles/__init__.py  
  inflating: av/data/stream.cpython-39-i386-linux-gnu.so  
  inflating: av/data/__init__.py     
  inflating: av/filter/context.cpython-39-i386-linux-gnu.so  
  inflating: av/filter/pad.cpython-39-i386-linux-gnu.so  
  inflating: av/filter/filter.cpython-39-i386-linux-gnu.so  
  inflating: av/filter/graph.cpython-39-i386-linux-gnu.so  
  inflating: av/filter/link.cpython-39-i386-linux-gnu.so  
  inflating: av/filter/__init__.py   
  inflating: av/sidedata/motionvectors.cpython-39-i386-linux-gnu.so  
  inflating: av/sidedata/sidedata.cpython-39-i386-linux-gnu.so  
  inflating: av/sidedata/__init__.py  
  inflating: av/codec/codec.cpython-39-i386-linux-gnu.so  
  inflating: av/codec/context.cpython-39-i386-linux-gnu.so  
  inflating: av/codec/__init__.py    
  inflating: av/video/reformatter.cpython-39-i386-linux-gnu.so  
  inflating: av/video/stream.cpython-39-i386-linux-gnu.so  
  inflating: av/video/plane.cpython-39-i386-linux-gnu.so  
  inflating: av/video/frame.cpython-39-i386-linux-gnu.so  
  inflating: av/video/format.cpython-39-i386-linux-gnu.so  
  inflating: av/video/codeccontext.cpython-39-i386-linux-gnu.so  
  inflating: av/video/__init__.py    
  inflating: av/audio/stream.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/plane.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/frame.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/fifo.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/format.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/layout.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/codeccontext.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/resampler.cpython-39-i386-linux-gnu.so  
  inflating: av/audio/__init__.py    
  inflating: av/container/streams.cpython-39-i386-linux-gnu.so  
  inflating: av/container/core.cpython-39-i386-linux-gnu.so  
  inflating: av/container/output.cpython-39-i386-linux-gnu.so  
  inflating: av/container/pyio.cpython-39-i386-linux-gnu.so  
  inflating: av/container/__init__.py  
  inflating: av/container/input.cpython-39-i386-linux-gnu.so  
  inflating: av-8.0.3.dist-info/AUTHORS.rst  
  inflating: av-8.0.3.dist-info/AUTHORS.py  
  inflating: av-8.0.3.dist-info/WHEEL  
  inflating: av-8.0.3.dist-info/METADATA  
  inflating: av-8.0.3.dist-info/top_level.txt  
  inflating: av-8.0.3.dist-info/entry_points.txt  
  inflating: av-8.0.3.dist-info/RECORD  
  inflating: av-8.0.3.dist-info/LICENSE.txt  
  inflating: av.libs/libopus-87ffc4ed.so.0.8.0  
  inflating: av.libs/libavcodec-f806ffdf.so.58.91.100  
  inflating: av.libs/libavdevice-e87569b9.so.58.10.100  
  inflating: av.libs/libnettle-e4fc5f31.so.8.0  
  inflating: av.libs/libvorbis-92f01e97.so.0.4.8  
  inflating: av.libs/libmp3lame-233526a7.so.0.0.0  
  inflating: av.libs/libxcb-1d343cf2.so.1.1.0  
  inflating: av.libs/libfontconfig-42f938cb.so.1.12.0  
  inflating: av.libs/libwavpack-500ac1a5.so.1.2.2  
  inflating: av.libs/libavutil-c7a17312.so.56.51.100  
  inflating: av.libs/libtwolame-8efe7d43.so.0.0.0  
  inflating: av.libs/libpng16-4dd41ebc.so.16.37.0  
  inflating: av.libs/libbluray-2055902f.so.2.1.2  
  inflating: av.libs/libuuid-cb567fd4.so.1.3.0  
  inflating: av.libs/libopencore-amrnb-fcdb16d4.so.0.0.3  
  inflating: av.libs/libfreetype-7926def1.so.6.17.1  
  inflating: av.libs/libxml2-306772f1.so.2.9.10  
  inflating: av.libs/libz-8589071d.so.1.2.11  
  inflating: av.libs/libXau-ddba53a6.so.6.0.0  
  inflating: av.libs/libopenjp2-a6ae8f36.so.2.3.1  
  inflating: av.libs/liblzma-ea420d9f.so.5.2.5  
  inflating: av.libs/libgnutls-02936458.so.30.27.0  
  inflating: av.libs/libass-404a6c3a.so.9.0.2  
  inflating: av.libs/libxcb-xfixes-6e1b3b9c.so.0.0.0  
  inflating: av.libs/libogg-d5fe6797.so.0.8.4  
  inflating: av.libs/libxcb-shm-7d8441d4.so.0.0.0  
  inflating: av.libs/libhogweed-172f4210.so.6.0  
  inflating: av.libs/libpostproc-39bb583e.so.55.7.100  
  inflating: av.libs/libopencore-amrwb-556bb03f.so.0.0.3  
  inflating: av.libs/libswscale-bb3551d5.so.5.7.100  
  inflating: av.libs/libvorbisenc-c5e741ca.so.2.0.11  
  inflating: av.libs/libxcb-shape-53904167.so.0.0.0  
  inflating: av.libs/libavfilter-c4304e6c.so.7.85.100  
  inflating: av.libs/libdav1d-bfb07d4d.so.5.0.0  
  inflating: av.libs/libtheoraenc-c230ffa5.so.1.1.2  
  inflating: av.libs/libx264-f186cfe9.so.161  
  inflating: av.libs/libunistring-8f6e4b23.so.2.1.0  
  inflating: av.libs/libaom-cc3bbb84.so.1.0.0  
  inflating: av.libs/libspeex-b3692605.so.1.5.1  
  inflating: av.libs/libxvidcore-c069e549.so.4.3  
  inflating: av.libs/libswresample-b6e24c9a.so.3.7.100  
  inflating: av.libs/libgmp-7f11e5b1.so.10.4.0  
  inflating: av.libs/libx265-4feea3a3.so.179  
  inflating: av.libs/libavformat-6ffdc7ea.so.58.45.100  
  inflating: av.libs/libtheoradec-6f380291.so.1.1.4  
  inflating: av.libs/libfribidi-8ebafbbb.so.0.4.0  

rgommers avatar Sep 02 '21 11:09 rgommers

A pull request is welcome.

jlaine avatar Mar 25 '22 15:03 jlaine

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Jul 24 '22 03:07 github-actions[bot]

there's an open PR for this, so the bot is a bit too eager (this comment will keep it from closing)

rgommers avatar Jul 24 '22 07:07 rgommers

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Nov 23 '22 02:11 github-actions[bot]