开源协议履行

开源软件使用

如何查看开源软件所使用的协议

直接通过后文中的开源协议声明插件可查看开源软件协议。

也可直接查看pom.xml里面的license标签,如下为com.alibaba:duid:1.2.5包的license标签,可看出所用开源协议及协议地址。

	<licenses>
		<license>
			<name>Apache 2</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
			<comments>A business-friendly OSS license</comments>
		</license>
	</licenses>

若没对对应标签,可查看源码文件头,一般都会有协议说明;若还没有的话,可以查看对应源码地址,一般会有协议说明。

开源软件使用义务履行

参照spring-*包、spring-boot-*包、apache下交付件(kafaka可执行包、maven可执行包、jemeter可执行包、tomcat可执行包、zookeeper可执行包),需要对发布件中包含三方包的可执行包(即bootapp)进行开源软件协议声明:

上述可执行包中包含各个开源协议的jar,jar对应的开源协议包含宽松协议和非宽松协议:
宽松协议:
Apache 2.0、WTFPL、MIT、BSD 2-Clause、BSD 3-Clause、CC0-1.0 AND Indiana University Extreme! Lab Software License, version 1.1.1、Public Domain
非宽松协议:
EDL、EPL、 CDDL 1.1 + GPLv2 with classpath exception、MPL 2.0 、LGPL 2.1、CDDL 1.0
据此:对于上述协议的包加上声明后直接使用即可。

开源软件协议声明

  • koca-parent pom.xml 3.5.0版本,增加了license-maven-plugin插件配置,可直接通过命令mvn license:add-third-party生成声明文件。生成的NOTICE文件中会按照协议名称进行分类,列举出所有依赖包、对应的协议以及协议链接、不包含协议原文。原理是解析pom中的licenses标签,如果包中没有licenses标签,会出现unkown的情况,这时候需要自行修改下文件。

  • 将生成的NOTICE文件放到可执行包中。(KOCA中直接修改assembly.xml文件,加上NOTICE文件,详情见附录)

后续若要带上协议原文,应该也会直接使用插件或开发对应插件。

附录

assembly.xml配置中增加NOTICE文件

<?xml version='1.0' encoding='UTF-8'?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

    <id>bin</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/src/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>*.bat</include>
            </includes>
            <lineEnding>dos</lineEnding>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/src/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>*.sh</include>
            </includes>
            <lineEnding>unix</lineEnding>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/classes</directory>
            <outputDirectory>conf</outputDirectory>
            <includes>
                <include>config/**</include>
                <include>*.yml</include>
                <include>logback-spring.xml</include>
                <include>banner.txt</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*-assembly.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory>./</outputDirectory>
            <includes>
                <include>NOTICE</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>