开源软件不等于免费软件(弄清开放源代码许可证很重要)

2023-10-27

转载:https://www.ramostear.com/blog/2020/04/09/xfz464y9.html  树下魅狐 

似乎提到开源软件,往往给人一种错觉——我拿到了软件源代码,接下来我是不是可以大刀阔斧为所欲为?其实非也!开源软件不等于免费软件,开源也不等于免费。“Ctrl+C/V 撸起键盘就是干,开源协议要先看”,在你决定使用开源软件之前,请花几分钟,了解一下开源许可(Open Source License)的具体限制条件,对你将大有裨益。

通常,我们接触到的开源软件(Open Source Software简称OSS)都有对应的开源许可证(Open Source License)对软件的使用,复制,修改和再发布进行限制。开源协议是确定一个开源软件版权的法律合同,所以,在使用开源软件之前,了解各开源协议的特点对一名程序员来说尤为重要。

一、 Open Source License(OSL)

提到开源软件或开源协议,首先我们会想到大名鼎鼎的Linux操作系统。Linux是最著名的开源项目之一,它是在GUN操作系统之上构建的免费操作系统内核。虽说Linux操作系统是免费的,但Linux使用了GPL 2.0许可协议对其自身的源代码进行了限制。通常,所有的开源许可(准确描述是:开放源代码许可)都旨在控制软件的使用方式,例如:

  • 个人使用:出于非商业目的情况下使用和修改软件
  • 发行:用于商业或非商业行为用途的软件共享
  • 链接:链接到免费或专有资源
  • 专利授予:政府授予的知识产权权利
  • 分包许可:软件所有者允许其他人使用其软件进行二次创新的限制条件
  • 商标:对代表组织或产品的符号或文字的使用进行限制

二、许可证分类

在开源软件的世界里,协议分为两类:Copyleft和Permissive。在介绍Copyleft和Permissive之前,先了解一下Copyright这个词语。Copyright意为版权,我们在很多网站的页脚都能看到这个标识。Copyright(版权)是授予创作作品的所有者的专有权利,通常是指在有限时间内对作品进行复制。创作作品可以以文学,艺术,教育或音乐的形式出现。版权旨在以创意作品的形式保护思想的原始表达,而不是思想本身。

Copyright(版权)可以通过法律的形式授予,在这种情况下,版权因国家/地区的法律不同而有不同的限制条件;通常情况下,Copyright(版权)的公共法律期限在创作作品所有者去世后50年到100年内到期,具体取决于司法管辖区。

2.1 Copyleft

Copyleft(著作权或著佐权),源自自由软件运动,是一种利用现有Copyright(版权)体制来保障用户软件自用使用权利的许可方式,可以理解为允许他人使用,传播创作作品,但会附件一些限制条件。在自由软件许可中增加Copyleft条款后,该自由软件除了允许用户自由使用,修改,发布以外,Copyleft条款还要求作者所许可的人对修改后的派生作品要求使用相同的许可条件授予作者,以保障其后续所有派生作品都能被任何人自由使用,而不违背第一作者的初衷。

2.2 Permissive

Permissive free software licence (宽松自由软件许可协议),是一种对软件的使用,修改,传播等方式采用最低要求的自由软件许可协议条款类型。因此,这种类型的软件许可协议将不保证被使用软件的派生软件会继续保持原生作品的相关限制条件。怎么来理解这句话呢?你可以简单的理解为使用这种类型条款的软件,在你拿到源码后,基本上可以为所欲为。

Copyleft是在有限空间内的自由使用,修改和传播,且不得违背原始作品的限制条款;而Permissive则可以最大限度的使用,修改和传播软件,而不用严格按照原始软件所提出的条款执行。简单来理解就是:如果一款软件使用Copyleft类型许可协议规定软件不得用于商业性质的活动,且不得闭源,那么后续的衍生子软件也得遵循该条款,如果是采用Permissive类型的许可协议,则后续衍生的子软件可以用于商业用途,也可以闭源。

三、通用的开源协议

我们任何人都可以创建适合自己软件作品的开源许可协议,并附带在自己创作作品的源代码中,但这样会导致一个问题,因作者个人喜好和所在地区法律的不同,协议的种类和数量将变得庞大和难以维护;另外对于那些不熟悉法律并且未对开放源代码许可协议有过详细了解的人,面对格式各样的许可协议时,将是一件很头疼的事情。

面对这样的问题,最好的解决办法就是大家都遵循统一的且具有公信力的开放源代码许可协议,这样事情就变得简单得多。在接下来的内容中,我将整理并列举一些比较好且受欢迎的开放源代码许可协议。

受个人学习能力和经验的限制,在此仅列举一些常见的和使用最多的开放源代码许可协议。

3.1 GNU通用公共许可证(GPL)

GNU的通用公共许可证是最受欢迎的开放源代码许证可之一。该许可证由理查德·斯托曼(Richard Stallman)所创建,用于保护GUN软件的自由使用。GPL是Copyleft类型的许可协议,者意味着基于GPL组件编写的任何软件都必须以开源的方式进行发布。

GPL允许自由地“使用、复制、修改和发布”,但修改和发布后的软件也必须是可以自由“使用、复制、修改和发布”的。因此 GPL 大大限制了商业软件使用GPL授权的软件,如果非法使用,将面临起诉的风险。目前 GPL 授权的项目有:Linux、Gnome、KDE、Emacs、GCC。
GPL 的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售,即必须也是开源和免费,这就是所谓的”传染性”。

由于 GPL 严格要求使用了 GPL 类库的软件产品必须使用 GPL 协议,对于使用 GPL 协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

3.2 Apache 许可证

Apache许可证是由Apache软件基金会(ASF)发布的开源软件许可证。这是一个由强大社区支持的流行且广泛部署的许可证。Apache许可证允许您自由使用,修改和分发任何Apache许可产品。但是,在这样做时,您需要遵循Apache许可的条款。

Apache许可证和 BSD许可证类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和 BSD 许可证类似:
(1)需要给代码的用户一份 Apache Licence。
(2)如果你修改了代码,需要再被修改的文件中说明。
(3)在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
(4)如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
(5)Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

3.3 BSD许可证

BSD(全称:Berkeley Software Distribution),1970年代由伯克利加州大学的学生比尔·乔伊创建。BSD许可证非常宽松,它允许无限制地重用全部或部分软件,以集成到自由软件或所有者中。

一般情况下,GPL的条款尊重BSD许可的所有政策,因此BSD许可的代码可以根据GPL许可发布,而无需原始作者授权许可。但反过来,未经原始作者许可,不得将GPL许可的代码发布到BSD许可的代码中,因为BSD许可证不完全遵循GPL施加的所有限制。

通常,BSD许可证将给使用者很大的自由度,基本上可以理解为”我可以为所欲为”。你可以自由使用源代码,尽情的修改并再次发布,或者作为专有软件再发布。但这种“为所欲为”的行为也是有前提条件的,当你发布使用了 BSD 协议的代码,或则以 BSD 协议代码为基础做二次开发自己的产品时,需要满足三个条件:
(1)如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。
(2)如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的 BSD 协议。
(3)不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD 由于允许使用者修改和重新发布代码,也允许使用或在 BSD 代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

3.4 MIT许可证

MIT是最宽松的自由软件许可证之一。基本上,只要您添加了原始MIT许可证和版权声明的副本,就可以和BSD许可证那样,对原始软件进行许可范围内的任何操作,也相当于可以”为所欲为”。如果你在开放源代码时,只想保留版权,而无需其他任何的限制,那么你可以选择MIT许可证。

3.5 CDDL许可证

CDDL(Common Development and Distribution License)通用开发和发行许可证,是由Sun Microsystems发布的开源许可证,用来替代Sun Public License(SPL)。Sun公司将CDDL视为SPL的第二个版本,CDDL受到Mozilla公共许可证(MPL)的启发,对SPL进行了修订,所有CDDL通常被成为MPL的简化版,旨在促进代码的可复用性。

你可以自由复制和分发CDDL许可的任何软件的任何原始或衍生作品。但是,你不得删除或更改软件中包含的任何版权,专利或商标声明。你还必须保留许可声明或任何描述性文字,以及任何贡献者或初始开发者的信息。

3.6 Eclipse公共许可证

EPL(Eclipse Public License)是由Eclipse Foundation开发的开源许可证。它源自通用公共许可证(CPL),EPL许可证是Copyleft类型的许可证,如果你修改了基于EPL许可证的组件并将其作为程序的一部分,然后发布程序源代码,则需要在EPL下公开所有修改过的源代码。如果公司或者组织在其产品中使用EPL许可证,则该协议可以保护作者免受可能的诉讼或损害,此外,EPL还提供了专利授权。

以上就是常见且比较流行的开源许可证介绍信息,通过上述的讲解我们可以了解到,并非所有的开源软件都是免费的,基本上所有开放源代码的软件作品都附带有软件在使用,修改和二次发布过程中需要履行的条款以及需要承担的责任。因此,万不可简单的将开源等同于免费,且开源的精神和目的也不是免费使用或者对作者源代码”为所欲为”。

开源的精神在于尊重用户的自由以及知识传播的自由,是为了让优秀的软件获得更大的进步和发展。可能Copyleft是一种非常理想化的思想,现实总会与其精神出现偏差,但这种理想主义思想是具有现实意义的,只有不断的提倡和传播这种思想,社会才会聚集更多的正能量。开源可以让人们自由享受软件所带来的便利以及思想的交流和创新,但在我们享受别人带来的福利时,也请尊重别人的劳动成果。自由传播和使用,不等于免费使用和无偿使用,在打破壁垒,敢于创新的同时,也要遵循基本的开源精神。

四、补充

如果你还想了解更多的许可协议内容,可以通过查找下方列表中的目录,点击对应的链接地址,查看更详细的内容:

名称 地址
Academic Free License https://opensource.org/licenses/AFL-3.0
Adaptive Public License https://opensource.org/licenses/APL-1.0
Apache Software License https://www.apache.org/licenses/LICENSE-1.0
Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0
Apache Public Source License https://opensource.org/licenses/APSL-2.0
Artistic License http://www.perlfoundation.org/artistic_license_2_0
Attribution Assurance License https://opensource.org/licenses/AAL
BSD License https://en.wikipedia.org/wiki/BSD_licenses
New BSD License http://self.gutenberg.org/articles/eng/New_BSD_license
CCO https://creativecommons.org/publicdomain/zero/1.0/
Computer Associates Trusted Open Source License https://opensource.org/licenses/CATOSL-1.1
Common Development and Distribution License https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License
Common Public License https://www.ibm.com/developerworks/library/os-cplfaq/
Eclipse Public License https://www.eclipse.org/legal/epl-v10.html
Educational Community License https://en.wikipedia.org/wiki/Educational_Community_License
Eiffel Forum License V2 http://directory.fsf.org/wiki/License:EFLv2
EU DataGrid Software License http://openseal.sourceforge.net/epl/index.html
Fair License https://opensource.org/licenses/Fair
Frameworx License https://opensource.org/licenses/Frameworx-1.0
GNU Affero General Public License https://www.gnu.org/licenses/agpl-3.0.en.html
GNU General Public License https://www.gnu.org/licenses/old-licenses/old-licenses.html#GPL
GNU Library or ‘Lesser’ General Public License https://www.gnu.org/licenses/lgpl-3.0.en.html
IBM Public License http://www.opensource.org/licenses/ibmpl.php
Microsoft Public License https://opensource.org/licenses/MS-PL
MIT License https://opensource.org/licenses/MIT
Motosoto License https://opensource.org/licenses/motosoto.php
Mozilla Public License https://www.mozilla.org/en-US/MPL/2.0/
NASA Open Source Agreement https://fedoraproject.org/wiki/Licensing/NASA_Open_Source_Agreement
Naumen Public License https://opensource.org/licenses/naumen.php
NetHack General Public License http://www.nethack.org/common/license.html
Nokia Open Source License http://opensource.org/licenses/nokia.html
OCLC Research Public License 2.0 http://www.oclc.org/research/themes/data-science/license.html
OpenContent License http://www.ibiblio.org/fosphost/opl.htm
Open Group Test Suite License https://opensource.org/licenses/OGTSL
Open Software License https://opensource.org/licenses/OSL-3.0
PHP License http://php.net/license/3_01.txt
Python License https://www.python.org/download/releases/3.3.0/license/
Python Software Foundation License https://docs.python.org/3/license.html
Qt Public License http://doc.qt.io/qt-5/opensourcelicense.html
RealNetworks Public Source License https://opensource.org/licenses/RPSL-1.0
Reciprocal Public License https://opensource.org/licenses/RPL-1.5
Ruby License http://www.ruby-lang.org/en/LICENSE.txt
The Sleepycat License https://opensource.org/licenses/Sleepycat
Sun Industry Standards Source License http://www.openoffice.org/licenses/sissl_license.html
Sun Public License https://opensource.org/licenses/SPL-1.0
NCSA Open Source License https://opensource.org/licenses/NCSA
W3C License https://opensource.org/licenses/W3C
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源软件不等于免费软件(弄清开放源代码许可证很重要) 的相关文章

  • adworld-pwn-level2

    必要知识点 32位系统函数调用使用堆栈传参 其调用时栈的结构如下 返回地址 gt 参数n gt 参数n 1 gt gt 参数1 将elf文件扔到IDA中 跟进到vulnerable函数 里面有输入函数 可以用来做栈溢出 再看到有system
  • 物联网LoRa系列-19:LoRa终端--射频芯片SX1261 SX1262的6种操作模式及其设置

    本文根据SX1261 2芯片手册 阐述SX161 2射频芯片的8种操作模式及其设置 目录 一 MCU与射频芯片之间的操作接口 二 SX1261 2射频芯片的6种工作模式的含义 三 SX1261 2射频芯片工作模式的设置 四 SX1261 2
  • 数组对象找重复值

    对象内容 let empListData lastName lin phone 154393456 lastName lin phone 154393456 lastName lin phone 154393456 找重方法 let new
  • linux-kali利用BeEF 执行 XSS 攻击

    一 配置靶机环境 1 登录win7靶机 2 访问https www xp cn 下载phpstudy软件 下载最新版的就可以 phpstudy软件可以用来进行站点搭建 3 解压后开始安装phpstudy 4 点击启动Apache服务与MyS
  • 关于 QML Tumbler 自定义日历在响应onWheel事件后,其他原有mouse事件无法响应

    程序是在QWidget窗体上嵌套QML 响应触屏和非触屏上面的一些鼠标滚动 滑动功能 在Tumbler下面的MouseArea中 onWheel响应了鼠标滚轮事件后 原来的其他鼠标事件没响应 help 求指点 工程上传到了百度云 链接 ht
  • 修改JAVA环境变量切换JAVA版本不生效问题

    最近因为项目原因 需要在java8和java11环境来回切换 windows切换环境变量没有Linux简单 通过shell脚本操作也会受到环境变量配置的影响 在修改环境变量来切换java版本时也会时不时出现没有生效的问题 一般出现这种问题
  • 2022年浙江省中职组“网络空间安全”赛项模块B--Linux渗透测试

    2022年中职组浙江省 网络空间安全 赛项 B 2 Linux渗透测试 漏洞原理解析 一 竞赛时间 420分钟 共计7小时 吃饭一小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第 阶段 单兵模式系统渗透测试 任务一 Wi
  • 万一 Github不让用了,Gitee同步指南请收好

    大家好 我是秋风 最近很多开源项目让一个本该纯粹的地方混入了政治色彩 例如 Node 还有 React 这些超明星级的项目 目前来看 React 的issues 已经沦陷了 大家都在反对一个原本纯粹的地方为什么会有了政治 如果说开源项目涉及
  • 相机 (2)旋转

    1 1 LookAt矩阵 用这3个轴外加一个平移向量来创建一个矩阵 并且你可以用这个矩阵乘以任何向量来将其变换到那个坐标空间 R是右向量 U是上向量 D是方向向量 P是摄像机位置向量 glm LookAt函数需要一个位置 目标和上向量以得到
  • CUDA unknown error - this may be due to an incorrectly set up environment

    运行mmaction2时报错 builtins RuntimeError CUDA unknown error this may be due to an incorrectly set up environment e g changin
  • 最全Arduino控制电机教程说明和资料分享

    1 电机介绍 1 1 作用 电机 gt 电磁感应 电能转化为动能 1 2 电机分类 工作电源 直流电机 DC 交流电机 AC 和交直流两用电机 直流电机分类 有刷直流电机和无刷直流电机 1 3 有刷直流电机模型及工作原理 左手定则 这种情况
  • 一篇文章教会你利用Python网络爬虫实现豆瓣电影采集

    一 项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务 可以记录想看 在看和看过的电影电视剧 顺便打分 写影评 极大地方便了人们的生活 今天以电视剧 美剧 为例 批量爬取对应的电影 写入csv文档 用户可以通过评分
  • (Matlab实现)K-means算法及最佳聚类数目的确定

    目录 摘要 1 K means算法 2 Calinski Harabasz Criterion 卡林斯基 哈拉巴斯指标 CH值 3 Davies Bouldin Criterion 戴维斯 博尔丁指标 DB值 4 Gap Value Gap
  • ChatGPT大流行的思考-设想篇

    在ChatGPT火热当下 我们不妨设想一下它可以应用到我们生活和工作的哪些方面 作者在对ChatGPT有所了解后 从行业 宏观及微观的角度进行设想 积累灵感 并投身到模型建设中 希望对你也有所启发 一 宏观及微观角度的设想 1 宏观角度 行
  • SQL Server远程连接的设置

    SQL Server正常连接时 若不需要远程操控其他电脑 可以用Windows身份验证模式 但是涉及到远程处理时 需要通过SQL Server身份验证登录 具体操作如下 首先 我们在登录时 选择Windows身份验证 然后连接到服务器 图1
  • pip 下载慢——解决方法

    国内源 新版ubuntu要求使用https源 要注意 清华 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun com pypi simple 中国科技大学 http

随机推荐

  • 手把手教你10分钟快速部署Kubernetes集群

    本文介绍的部署过程主要是为了让读者能够理解 K8S 的运行原理 为了简化流程 这里不涉及高可用 高性能等解决方案 安装说明 本文仅仅是在两个节点上部署所有的组件 如图所示包括 MASTER 和 NODE 所有的组件都安装在 opt comp
  • Java程序开发学习之组件及事件处理

    学习参考书 Java2实用教程第5版 一 GUI编程 容器类 Container 和组件类 Component javax swing包中JComponent类是java awt包中Container类的一个直接子类 java awt包中C
  • 虚拟机环境搭建-CentOS篇

    文章目录 VMware Workstation软件安装 略 Linux环境安装 使用CentOS7 环境配置 基本配置 用 Xshell 访问虚拟机 参考文档 VMware Workstation软件安装 略 VMware Workstat
  • kmalloc分配大小的限制

    kmalloc是通过cache来实现的 只不过每次kmalloc的大小不同 因此是从不同的cache中分配 include linux slab h 注意kmalloc是在头文件中定义的 static inline void kmalloc
  • C语言--浮点数的比较

    先说结论 浮点数不能直接用 进行比较 观察代码 看如下代码 分析输出 void testDoubleCompare float a float 0 1 float b float 0 1 float c float 0 1 double d
  • 超炫酷的 Docker 终端 UI lazydocker,想看哪里点哪里

    有开发者开源了一个用于 Docker 和 docker compose 的简单终端 UI lazydocker 才短短几天目前已经收获了 2k star 作者表示记住 Docker 命令很难 并且在多个终端窗口中跟踪容器几乎是不可能的 la
  • loadrunner error:27796解决方法

    使用loadrunner进行web性能测试时 高并发场景以及高性能的服务器 负载机可能导致压测出现大量Error 27796 Failed to connect to server 10 2 9 147 80 10048 服务器ip和端口
  • 树莓派交叉编译(PS交叉编译链下载安装、配置永久环境变量、带WiringPi库交叉编译、软链接)

    目录 一 本章概述 二 交叉编译工具链的下载安装 下载 安装 交叉编译链临时有效 交叉编译链永久有效 三 交叉编译的使用 对比gcc与armgcc PC端交叉编译发送到树莓派运行 四 带WiringPi库的交叉编译如何处理 复制树莓派上的W
  • 解决pytorch中执行图像不显示报错的问题

    num epochs 10 d2l train ch3 net train iter test iter loss num epochs trainer 在图像识别之前改变matplotlib的版本 pip3 uninstall matpl
  • oppo笔试印象

    选择 20道考察了计算机组成中 最先存储 最优存储 最小桶排序 平衡二叉树成功比较次数 检索方法r tree b tree数组 哈希 计算机网络 传输层 第0层 操作系统死锁等 笔试第一题 忘记了 笔试第二题 找规律 第一层循环宏观上遍历6
  • 跟我一起写 Makefile(七)

    跟我一起写 Makefile 七 本文来自于CSDN 陈皓博主 网址http blog csdn net haoel article details 2892 详细内容请参考其经典文章 跟我一起写makefile 陈皓
  • Unity使用c#开发HoloLens2项目(十八)(使用MRTK后点击 Holographic Remoting For Play Mode无反应或Remote Host Port是多少)

    文章目录 成品展示 前言 问题 在unity中Play项目无反应 点击瞬间跳出 1 选择MRTK并进入Holographic Remoting For Play Mode 2 进入远程编辑界面 3 检查IP及端口状态 4 参考GitHub内
  • jquery修改display属性

    jquery修改display属性
  • Spring AOP 详解

    Spring AOP 详解 一 什么是 Spring AOP 二 为何要用 AOP 三 Spring AOP 3 1 AOP 组成 3 1 1 切面 Aspect 3 1 2 连接点 Join Point 3 1 3 切点 Pointcut
  • 初学者使用MyBatis开发步骤详解

    MyBatis开发步骤 1 建表 create table t users id int primary key auto increment name varchar 50 password varchar 50 sex varchar
  • 请谈谈你对Hadoop的理解

    一 请谈谈你对Hadoop的理解 1 Hadoop是什么 What is Hadoop Hadoop是Apache软件基金会的一个开源项目 是一个分布式处理海量数据的软件框架 它为开发者提供了一个分布式系统的基础架构 用户可以在不了解分布式
  • 怎么在局域网中设置共享文件夹?

    在工作中 我们经常会使用到共享文件夹 它能很好的提高我们的工作效率 但是有些小伙伴却并不会设置 下面小编就来用图文为大家讲解一下如何设置共享文件夹 共享文件夹设置方法 1 在需要共享的文件夹上单击鼠标右键 选择 属性 2 在上方选项栏选择共
  • 蓝牙Bluetooth模块介绍

    1 蓝牙模块 基础知识介绍 https blog csdn net wwt18811707971 article details 77833602 2 常见蓝牙模块介绍和AT指令 https blog csdn net qlexcel ar
  • java logback.xml详解

    一 java日志输出演进 0 控制台输出 System out println 1 java标准库内置日志包 java util logging Logger logger Logger getGlobal logger info 局限性
  • 开源软件不等于免费软件(弄清开放源代码许可证很重要)

    转载 https www ramostear com blog 2020 04 09 xfz464y9 html 树下魅狐 似乎提到开源软件 往往给人一种错觉 我拿到了软件源代码 接下来我是不是可以大刀阔斧为所欲为 其实非也 开源软件不等于