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污染。
在这里插入图片描述

相信,看到这里,大家心里应该已经清楚了这里面的弯弯绕。总而言之,软件行业发展依然任重而道远。

如果觉得博主写得还不错,欢迎“关注、点赞、收藏”支持博主原创!

posted @ 2022-03-16 23:42  eguid  阅读(378)  评论(0编辑  收藏  举报