专有软件使用Linux内核的用户头文件违反GPL吗?| 开源合规场景
问题:专有软件使用Linux内核的用户头文件违反GPL吗?
某芯片客户的研发团队咨询了我们这样一个场景:他们的软件操作系统采购了一家某商用的linux操作系统(商业许可),在构建时,从开源组件kernel-lpae-devel中引入了一个头文件dma-heap.h,这个头文件是GPL-2.0许可,咨询我们这样做是否有合规风险?
律师解答:
一、Linux内核及用户头文件的GPL例外
Linux内核按照GPLv2许可证进行授权,但同时包含系统调用的例外,即:通过正常系统调用使用Linux内核服务的用户程序,不属于GPLv2的“衍生作品”范畴,因此不需要按照GPLv2进行开源,可以按照其它许可证开源,也可以闭源作为专有软件。
一般情况下,如果某软件使用了GPL软件的头文件,该软件即被视为 GPL 软件的“衍生作品”,应当适用GPL。
Linux内核用户空间API(UAPI)头文件属于一种特殊情况——这些文件用于描述用户空间程序与内核之间的交互接口。根据内核COPYING文件中的说明,系统调用接口构成了一个明确的界限:使用该接口与内核进行通信的任何软件,都不需要遵守GPL许可证的相关规定。
由于UAPI头文件必须被包含在所有能够生成可在Linux内核上运行的可执行文件的源代码中,因此,这种例外情况必须通过专门的许可条款来明确说明,一般是在许可证名称后添加“WITH Linux-syscall-note”的字样。
二、dma-heap.h文件适用的许可证
kernel-lpae-devel 组件包含用于编译内核模块和进行内核开发所需的头文件、配置文件和构建脚本,这些文件专门针对启用了 LPAE 的 Linux 内核版本。
dma-heap.h 是一个与 Linux 内核DMA-BUF堆(DMA-BUF Heaps)框架相关的头文件,它为用户空间程序提供了必要的接口,以便从特定的DMA堆中申请和共享缓冲区。
根据github社区中该文件源代码头部的许可证声明,dma-heap.h适用的许可证为“ GPL-2.0 WITH Linux-syscall-note”,属于前述第一条描述的GPL例外情况。
三、律师合规意见
本案中,该企业在构建操作系统时引入dma-heap.h文件,如果目的是方便包含这些文件的用户程序通过正常系统调用使用内核的,则属于上述例外情况,该做法不违反GPL的规定。
如目的是以系统调用以外的其它方式使用内核,则需要结合该头文件的具体使用场景、文件中的代码信息(除结构定义、类型定义、枚举常量,是否还包括内联函数、具有实体的宏),并结合美国最高法院在甲骨文与谷歌案件中关于调用API是否构成合理使用的判决思路综合评估。
「开源合规场景100问」是软安科技联合广东信达律师事务所邹良城律师团队出品的栏目,以解析实际案例来解答开源许可合规的各种需求,以实战角度输出干货。本栏目长期连载,每期问题均来自用户真实案例,欢迎大家参与交流与探讨。
