JavaCV的gpl v2许可协议排雷,写在TikTok违反GPLv2许可使用OBS源码的当下
TikTok Live Studio 疑似在不遵循 GPL 许可证的情况下使用了 OBS 的源代码。而 OBS 使用的 GPLv2 开源许可证具有很强的传染性:只要一个软件使用过 GPL 协议的产品,则该软件产品必须也采用 GPL 协议,必须也是开源的。但显然,TikTok 并没有将其直播流媒体软件 “TikTok Live Studio” 开源。
目前 TikTok 已删除 TikTok Live Studio 的发布/下载页面,且并未对此事作进一步回应。OBS 团队正在积极联系 TikTok 相关人员,以协商 OBS 的 GPL 许可证相关事宜。
说实话,Tiktok暴雷我一点也不意外。大家似乎已经忘记了暴.风影音、kuai播、迅.雷播放器,ten讯q.q播放器,当然也包括网上很火的韩.国的kmPlayer和potPlayer,这些都是都是违反gpl v2协议,上期上榜ffmpeg耻辱柱上的常客。
这些先不多提,相信很多小伙伴们跟我一样比较关心的问题是,我们正在进行项目中是否包含gpl v2许可,以及javaCV是否也有gpl v2许可协议,毕竟这涉及到已有软件产品和硬件产品的专利授权问题,今天我们就来讲讲openjdk、javafx、openjfx、javacv和ffmpeg的许可协议。
Javacv的许可协议排雷
我们可以从javacv官方看到javacv使用apache和gpl v2 with Classpath exception多许可协议。
从1.5.6开始JavaCV默认已经不包含gpl v2许可的代码库,所以不受gpl v2许可影响,对于JavaCV源码,只要不修改源码的情况下,都不会收到gpl v2许可影响。
如果是之前的版本或者您的代码库中使用到了FFmpeg中的gpl代码库,则受gpl v2影响。
而JavaCV 1.5.6版本之后,如果继续使用gpl v2许可协议的代码库,则需要额外加上这个依赖,所以1.5.6开始默认不受GPL v2许可协议影响:
<!-- Optional GPL builds with (almost) everything enabled -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform-gpl</artifactId>
<version>4.4-1.5.6</version>
</dependency>
使用最新版本JavaCV版本的小伙伴们可以放心了,之前使用老版本的,也就是1.5.6之前的JavaCV则需要注意了,你们的项目都受到了gpl v2许可协议的传染,可以升级到最新版本以规避风险。
JavaCV中gpl v2代码库有哪些?
JavaCV中gpl v2代码库主要集中在ffmpeg中。
上面提到ffmpeg耻辱柱就知道,ffmpeg内部包含大量的gpl v2许可的代码库
ffmpeg许可协议:https://github.com/FFmpeg/FFmpeg/blob/master/LICENSE.md
ffmpeg中使用gpl v2许可协议的代码库列表:
avisynth
frei0r
libcdio
libdavs2
librubberband
libvidstab
libx264
libx265
libxavs
libxavs2
libxvid
另外,除了本次暴雷的OBS之外,我们音视频开发者日常最常使用的VLC播放器也是GPL v2许可协议的播放器软件。
可以这样说,目前市面上找不到任何不是GPL v2许可协议的音视频播放器,除非他不支持h265,不然GPL v2是绕不过去的
关于javacv内部使用到的javafx和openjfx排雷
事实上openjdk和openjfx的gpl同样也不是gpl v2许可,而是gpl v2 with the classpath exception。
所以在不修改openjfx源代码的情况下,也不受gpl v2影响。
FFmpeg如何排除GPL v2许可协议代码库
通过上述分析,我们知道JavaCV中的gpl v2雷区主要集中在FFmpeg音视频这块,也就是FFmpeg中的gpl代码库。当然了,FFmpeg本身也不是gpl许可,而是它内部使用的一些库包含gpl v2许可,这些库我们上面已经全部列举出来了,大家只要逐个排查即可。
FFmpeg本身是LGPL许可,但是部分代码库是GPL v2许可
ffmpeg的license:https://github.com/FFmpeg/FFmpeg/blob/master/LICENSE.md
如何排除FFmpeg中的gpl v2依赖
如果使用FFmpeg,又要排除GPL v2许可协议代码库怎么办呢?
这也是可以做到的,FFmpeg官方已经提供了这种方式,只要在编译的时候,不添加--enable-gpl 就不会把gpl代码库编译进去,则我们使用的FFmpeg就不会收到gpl v2污染。
相信,看到这里,大家心里应该已经清楚了这里面的弯弯绕。总而言之,软件行业发展依然任重而道远。
如果觉得博主写得还不错,欢迎“关注、点赞、收藏”支持博主原创!
本文来自博客园,作者:eguid,没有作者允许禁止转载,取得作者同意后转载需注明作者名和原文链接:https://www.cnblogs.com/eguid/p/16015479.html