蘭陵N梓記

一指流沙,程序年华


  • 首页

  • 归档

  • 关于

  • 搜索
close

开源软件知识

时间: 2019-10-13   |   分类: 技术     |   阅读: 3804 字 ~8分钟

什么是开源软件

开放源代码促进会(OSI:Open Source Initiative),是一个致力于推动开源软件发展的非盈利组织。

开源软件(OSS:Open Source Softwar)即开放源代码软件,其定义首先起源于自由软件(FS:Free Software)。OSI将开放源码定义为:“开放源码,通过支持源代码的独立同行评议和快速发展演变,提高了软件的可靠性和质量。要通过 OSI 认证,软件必须在获得许可证的情况下发布,该许可证可保证免费读取、重新发布、修改和使用该软件的权利。

开源软件的特点:可自由使用、无任何担保、无许可费、可获得源代码、享有版本、有特定License

开源软件的三大组成要素;

  • License:是游戏规则 ,有严密的组织监管
  • 社区是组织方式:是其发展的核心学问所在,主要特征:无明确路标、子项目充分竞争、充分的对等评审、用户充分参与、源码发布、经常发布,Internet发布。
  • 商业模式是本质:模式并不是其独有的,主要包括:捐赠、技术服务、广告、增值产品,双重授权、软硬件结合等。

自由软件VS开源软件VS免费软件

“自由软件运动”是一项倡导软件这种知识产品应该免费共享的社会运动,它主要是从社会伦理学,道德的高度,强调我们每个人都有自由使用软件的权利。自由软件反对软件私有,首先反对的就是软件的知识产权、版权,所以自由软件运动明确反对以申请专利的形式将软件产品据为私有。为了表达对Copyright(知识产权)的憎恶,Stallman甚至生造了一个单词Copyleft。

自由软件运动有点太极端、太理想化了,生活在这么一个商品化社会,要完全如此的反商业,还是很有难度。自由软件和商业软件之间的折中—-开源软件就此诞生了,它既继承了自由软件所提倡的知识共享的理念,同时又允许人们以专利的形式从知识产品中谋取利益,从而保护了人们生产、创造知识产品的积极性。

免费软件就是免费提供给用户使用的软件,但是其免费的时候,通常都会有其他的限制,比如其源码不一定会公开,而且使用者也并没有使用、复制、研究、修改和再散布的权利。

开源License

License是游戏规则,是开源软件许可证。在开源软件代码仓/包中,通常在NOTICE,COPYRIGHT,AUTHOR,README,COPYING,LICENSE说明其采用的开源许可证。

开源软件使用遵从义务:按照开源软件软件许可证规定开源软件使用者需要覆行的义务

  • 开源使用声明义务:在产品发布时,随产品附上一份文档Open Source Softwre Note,在该文档中写明产品所有使用的开源软件及其版权和许可证信息,并附上免责声明。
  • 代码对外开源义务:按照开源许可证要求,将一定范围内的代码对外开源,开源范围视具体许可证的要求和使用方式而定。
  • 修改声明义务:做出对修改的开源软件就修改时间,修改的代码以及修改过的文件做出具体的声明。

BSD类

BSD许可证原先是用在加州大学柏克利分校发表的各个BSD4.4/BSD4.4-Lite版本上面(BSD:Berkly Software Distribution)的,后来也就逐渐沿用下来。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。

BSD授权许可证没有实现"通透性"自由,也就是其不保证软件源代码开放的连续性。这样如果你希望采用别人开发的BSD软件,进行一些修改,然后作为产品卖,或者仅仅保密自己做的一些除了软件开发以外的工作,那么你就可以从中得利。

  • Apache V2.0:如ACE,Tomcat
  • BSD:Berkly Software Distribution,如FreeBSD
  • MIT:Massachusetts Institute of Technology,X License,如X Windows,ASN.1

许可说明:

  • 允许各种链接,无开源义务
  • 允许修改,无开源义务
  • 软件所有人授予专利许可(Apache)、无专利规定(BSD、MIT)

推荐使用,商业友好许可证。

MPL类

MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对 源代码的需求和他们利用源代码获得的利益。

  • CPL V1.0:Common Public License,如Junit
  • EPL V1.0:Eclipse Public License,如Eclipse
  • MPL V1.0:Mozilla Public License,如Firefox
  • CDDL V1.0: Common Development and Distribution License,如OpenSolaris

许可说明:

  • 允许各种链接,无开源义务
  • 允许修改,但修改部分需要开源
  • 部分源码使用,或全部源使用与私有代码混合使用,会被视为对原有软件使用,则混用私有代码需要开源
  • 软件所有人授予专利许可

可以使用,但关注修改后对应的开源义务。

GPL类

1980年美国人Richard Stallman因为无法容忍软件私有化,而建立了GPL许可证。他认为,软件的源代码是全人类的财富,应该允许程序员自由共享。

GPL许可证的核心含义是,允许任何人观看、修改,并散播程序软件里的原始程序码,条件是如果你要发布修改后的版本就要连源代码一起公布。

LGPL V2:

  • 许可说明
    • 允许各种链接,动态链接无开源义务,静态链接需要开放与之链接私有软件的.o文件与makefile
    • 允许修改再链接到私有软件,但是个性增加的功能实现不能依赖私有软件的数据功能
    • 允许不受限制的使用头文件中数值参数,数据结构布局,存取,小宏,内联参数,十行以内的模板
    • 仅原则性声明专利应免费许可,无详细规定
  • 慎重使用,只允许动态链接方式使用

GPL V2:

  • 许可说明
    • 允许各种链接,但被链接的整个产品需要开源
    • 允许修改,但被修改的部分及整个产品均需要开源
    • 通过pipes, sockets的命令行参数与GPL软件进行通讯,不会导致私有软件被传染
    • 仅原则性声明专利应免费许可,无详细规定
  • 慎重使用,由于可能导致产品整个负有开源义务,不建议使用

社区

社区是松散的组织方式,人人都可参与

  • 正式或非正式的网络支持
  • 软件代码公开、共享
  • 由志愿者运作管理
  • 有多样性的可用资源
  • 任何人可参与
  • 非盈利组织

开源维权组织

  • OSI(开源促进委员会)定义所有开源License
  • FSF(自由软件基金会)是业界软件最大的开源软件维权组织
  • Software Freedom Law Center(软件自由律师联盟)

社区两种组织方式:

  • 会员制:如Liunx社区
  • 集市:如Apache社区

区分社区可采用如下开放性原则:

  • Open Code:只提供源码
  • Open Release:提供源码+软件包
  • Open Dev:透明的开发过程
  • Community:透明的管理

Apache社区的组织架构:

  • Contributor:任何人都可参是Contributor,但无代码库写权限,提交的内容需要Committer审核通过后才能合入代码库
  • Committer:相比Contributor增加代码库写权限
  • PMCer:社区项目有相关的决策权,能够影响项目的发展方向。有权提议将Contributor提升为Committer
  • VP:项目的VP,领域专家
  • 董事会:负责管理赞助,法务,品牌,公共事务,提议创建新项目,不参与具体项目管理

商业模式

  • 捐赠模式:将项目捐赠给开源社区,达到打击竞争对手,或占领市场的目的
  • 增值产品:在开源软件基础上开发增值产品
  • 广告模式:在软件中植入广告,赚取广告投放费用
  • 服务模式:提供开源相应的专业服务
  • 双重授权:同时使用开源软件与商业授权模式
  • 软硬件结合:通过对开源软件的支持,促进硬件的销售
  • 社区模式:指那些并非为营利而存在的开源组织的运营模式,通过宣传,合作和开发、编写更好软件提供更好的技术支持,领导业界发展趋势。

使用开源

使用开源软件可能存在风险

  • 使用的开源软件可能没有维护
  • 不可捉摸,未来没有固定的路标计划
  • 发现Bug没有管,提交修改没有人理会
  • …

用好开源软件基本要求

  • 来源可靠:来源正规社区官方网站,供应商或合作商提供,软件有明确的许可性或签订有相关使用协议
  • 合法合规:按许可性要求使用,避免知识产权;履行开源义务;获取授权
  • 网络安全:选型与评估,漏洞闭环管理,安全问题处理
  • 可追溯:统一管理,先申请后使用,变更受控,修改记录可控
  • 优选归一:建立优选库,给出优选版本与禁用版本等
  • 生命周期管理:生命周期与产品版本配套

用好开源软件的秘决:

  • 生态选型:关键看是否可持续发展
  • 架构解耦:架构上要适应开源软件频繁更迭
  • 社区协同开发:影响力不是重点,关键是达成产品商用生态要求
  • 同步社区特性及测试套:建立测试基线,构建验证的防护网
  • 回馈社区:根据使用开源软件的重要程序,主导或参与社区实践,及明回馈社区。

开源软件声明的范围与内容

  • 范围:只需要声明开源软件,其它采购软件,免费软件,技术合作等非开源软件不在使用声明文档中声明
  • 内容:使用声明文档、不担保声明,软件版本声明,软件许可证声明,书面邀约(GPL,LGPL需要开源义务的软件)

产品发布时,开源软件包的要求:

  • 完整性:开源范围满足License要求,如须包含所有GPL与LGPL代码,以及传染部分
  • 可编译性:开源代码必须能够编译通过,提供详细的编译指导文档,不能含有.git等文件夹等冗余信息
  • 一致性:开源代码包编译结果与产品发布中使用的开源部分一致;不得包含不涉及开源义务履行的二进制文件(若源始开源包含了,则要相应提供)

修改声明义务:

  • 修改时间
  • 修改内容,简要说明修改内容
  • 修改人及邮箱
  • 若新增文件,则需要在文件头附上版本声明与免责声明
#软件开发# #OpenSource#
软件工程文化
跟我一起复习Java-10:工具体系
微信扫一扫交流

标题:开源软件知识
作者:兰陵子
关注:lanlingthink(览聆时刻)
声明:自由转载-非商用-非衍生-保持署名(创作共享3.0许可证)

  • 文章目录
  • 站点概览
兰陵子

兰陵子

Programmer & Architect

164 日志
4 分类
57 标签
GitHub 知乎
  • 什么是开源软件
  • 开源License
    • BSD类
    • MPL类
    • GPL类
  • 社区
  • 商业模式
  • 使用开源
© 2009 - 2022 蘭陵N梓記
Powered by - Hugo v0.101.0
Theme by - NexT
0%