和MIT有些类似的BSD同样是鼓励代码重用,但需尊重代码作者的著作权
消息一出,国内外开源界议论纷纷,关于开源生态如何自立,做到在无法与国际接轨的情况下能健康发展的措施也被提上议程。
华为在加快国产开源操作系统鸿蒙的开发,看到国内第一个开源软件基金会从紧急筹备到建立,也看到第一个国产开源协议木兰的诞生。
自由软件是一个比开源软件更严格的概念,因此所有自由软件都是开放源代码的,但不是所有的开源软件都能被称为“自由”。
MIT,GPLv2,Apachev2,BSD都算是自由软件的许可证类型。
“开放源代码软件运动”是一个主要由程序工程师及其它电脑用户参与的声势浩大的运动。它是自由软件运动的一个分支,但两者差别并不明显。一般而言,自由软件运动是基于政治及哲学思想(有时被称为所谓黑客文化)的理想主义运动,而开放源代码运动则主要注重程序本身的质量提升。为了避免这些对于「自由」的探讨,而只专注于技术,在自己的领域做得更好,有人把「开源」这个概念分离了出来。
软件协议可分为开源和商业
开源,是指公开源代码,但也并不代表就是免费。有时,开源也可以作为一种商业模式存在。
gantttitle开源的非经济利益认定(基于53份问卷)dateFormatSSSaxisFormat%L个人声望:000,043产品可见性:000,031建立行业标准:000,017挑战的乐趣:000,038职业发展:000,028扩大用户基础:000,022社区中开发者支持:000,031其它:000,002开源流派的理念比喻开源组织是共产主义社会,商业公司联盟则是资本主义世界。
共产主义靠共产国际的会议决议来协作行动,商业公司则凭无数的商务协议组成利益共同体。理论上共产主义更先进,现实中总是输给一盘散沙,各怀鬼胎的资本主义世界。
Apache&GPL是两种加入共产主义社会的方式
从编程语言开源许可证分布进行统计
静态链接至LGPL的代码/库,还是有一些衍生品行为要求的
许可证权利、义务、限制、案例对照表
这三种版本都在使用理念上高度接近MIT许可证。可以将2句版BSD许可证=MIT许可证
与MIT类似,但版本太多,条款不够清晰简洁
Apache软件基金会起始于1999年,由一群在网上协作为网络服务器打源码补丁的人创建,源码最终被称为ApacheHttpd项目。在2004年,开发了成熟的Apache2.0许可证,成为世界上最受欢迎的开源许可证之一,授予用户使用,修改和分发等权限,且拥有非常明确的专利权,使得开发者能轻松使用和重用代码许可。
Apache软件基金会是一个公共慈善机构,服务于广大公众的最大利益,使命是为公众免费提供软件。使用邮件列表来作为讨论和决策的常规工具,因为其他人要一直往回翻阅去了解整个经过。
与MIT许可证下前端项目扎堆的情况不同,采用Apache许可证的项目涵盖的前后端,DevOps,大数据处理,深度学习等各种类型的系统,框架和工具。
虽然有各种类型的许可证,但不得不说MIT和Apache两个许可证加起来,就囊括很大一部分(66%)我们耳熟能详的项目了。
Apache与MIT的区别:
MPL是Netscape的Mozilla小组为其开源软件项目设计的软件许可证,其出现的重要原因是,Netscape公司认为GPL许可证没有很好平衡开发者对源码的需求和他们利用源码获得的利益。相比GPL而言,MPL有如下不同之处:
CreativeCommons(CC)许可协议并不能说是真正的开源协议,大多被用于设计项目/文档项目上,一个CC许可协议具有四个基本部分,这几个部分可以单独起作用,也可以组合起来。下面是这几部分的简介:
GPL全称是GNUGeneralPublicLicense协议,核心是只要在一个软件中使用(类库引用,修改代码即衍生代码)GPL协议的产品,则该软件产品必须也采用GPL协议,即开源。这就是所谓GPL协议的传染性,商业软件或开发者对代码进行集成及作为类库进行二次开发,在进行再发布时需伴随GPL协议。
在GPL下,你通过物理媒介分发软件,必须将源码一起分发,告知用户以发行成本费用提供源码CD是被允许的,CD上给源码链接,放在网站上免费下载源码倒是不行的。
Tivo中包含了带有GPL许可证的软件,按照copyleft原则,这些软件应允许用户随意修改使用。Tivo也的确允许用户修改,只是修改后的软件不能直接在原有硬件上运行了。此种做法被称为Tivoization,指通过硬件限制或DRM使用户无法在原有硬件上运行修改过的代码的现象
Linux的GPLv2哲学:我们给你源码,你给我你的修改,扯平了[源码可见并确保持续改进]。
自由软件基金会认为Tivo的做法在剥夺自由,应该允许用户”刷机“绕开DRM。linus不这么认为:
分歧导致开源(opensource)这个词从自由软件中分裂了出去。linus代表的开源阵营并不反对专有软件,其本人自比奥本海默(因成果被用来制造原子弹而深切自责),拒绝涉猎政治。且GPLv3条款自然会限制linux在嵌入式或消费类电子产品的发展,这显然是linus不能接受的
云服务(SAAS)是否构成”分发“呢?答案是不构成,此种情况不必提供源码。AGPL打击的就是这种钻空子行为,它规定云服务也必须提供源码。
使用LGPL的一般都是库,以API的形式向用户提供某些功能(facility),动静态库都有,且都提供源码
GPL的发明人Stallman,是自由软件的死忠,为何还允许别人用了自己的东西还能闭源?
他并不喜欢LGPL,但这是争取用户的办法,自由软件库要和其他库竞争。如果其它库允许别人闭源,而他不允许,显然占下风啊。这就是为何对GNUC库使用LGPL的心理动机,毕竟世界上有那么多C函数库。
本质上已隐含了GPL,LGPLv3=GPLv3+补充条款,与GPL不一致的地方以补充部分为准,相当于override了
但这个世界是一个商业利益占主导的世界,大公司可能先免费利用,然后在推出取代的私有产品,你以为自己风险了爱心,实质上变成了为大公司无偿打工。
像Oracle拥有mysql这类事情就是很有风险的事情
从这个角度,GPL是更好的开源许可证,它保证了自由无法被剥夺,也不是一种圈套或陷阱
Linux效率更佳,FreeBSD架构优美但效率低,此为宏内核和混合内核的区别
许可证是Linux成功的决定性因素之一,因为它强制你必须回馈,如果你真的想创造更大的东西,如果你想围绕它创建一个社区,BSD/MIT许可证不一定是很好的许可证,会让开发人员觉得大公司在利用他们的工作
GPL的传染性,最具话题性。公开修改后的源码,这就是所谓的强制执行GPL。被告多为大企业,索赔数额巨大,大部分是庭外和解,但让GPL名声多少粘上污点,令人敬而远之。
07年代表BusyBox走着向MonsoonMultimedia公司发起GPL侵权诉讼
BusyBox作为GNUCoreUtil的替代品(提供流行的Linux命令,但仅包含这些命令的常用选项,相当于极简主义),能运行于linux、hurd、freebsd等,常用于嵌入式设备,用户大部分是linux用户
BusyBox的主要维护者曾寄希望于诉讼:“我只是希望人们尊重GPL”,他最后放弃了诉讼,也放弃了BusyBox。投身ToyBox的开发,那是一个没有GPL约束的替代品,以BSD许可证发布.
按其写的简要自传记录,也有代码作者群体在GPLv3协议升级方面看法冲突,导致其主或被动退出
ToyBox没有BusyBox功能覆盖广,但又比ToolBox强
诉讼让更多人远离BusyBox及GPL,而不是产生有用的代码
“摧毁”项目的人是声称要“拯救”这些项目的律师–Linus
诉讼是激怒企业,并与之树敌的最快方式,而企业是社区很重要的一部分。
Linus并不买诉讼的账,称SFC是传播恶疾的“伤寒玛丽”,引发了无休止的诉讼与争吵:除了律师和疯子,我不知道有谁对BusyBox的结局感到高兴。SFC闪耀了,开发者在法庭获胜,真正发生的是个人和企业开发者及用户都成群结队的逃离,因为用户也不喜欢大量的争吵。
诉讼毁了社区,而不是保护。破坏了多年通过友好建立起来的所有善意,把朋友变敌人。FSF尝试过对抗模式,这就是为什么从自由软件中分离出了开源概念。
Linux内核开源项目在GPL的庇佑之下,十多年来在服务器、PC端以及各种嵌入式设备上成绩斐然,是当之无愧的当代计算机软件的基石。GPL开源乌托邦和商业社会的丛林法则之间存在剧烈的冲突。有这么几个颇有争论的核心问题:
第一个问题内核开发人员多次澄清普通系统调用为非GPL的作用范围,甚至固化在Linux内核的源码COPYING文档中。
第二个问题的答案:是,除非能证明主程序与GPL模块之间具有“独立性和可区分性”(SeparateandIndependent),官方的FAQ如此释疑:任何使用非LGPL类库的软件必须以GPL或者GPL兼容的许可证下进行发布?
是,因为软件包含了该类库才能运作。
第三个问题是硬件厂商和Linux内核开发社区之间一场旷日持久的争论的中心。如AMD/ATI、NVidia出自硬件规格保密以及知识产权的考虑,长期以二进制软件包的方式独立发布图形驱动。答案:是。
说到此处,NVidia不会因侵权被起诉主要原因是,N家已经与Linux社区达成协议,根据协议,N家不开放其驱动的源代码,但会按linux内核版本更新,发布对应的驱动二进制文件,方便用户更新自己的驱动程序。此外,N还发布了CUDA变成平台,为linux用户提供强大的GPU计算力支持,为社区开发者和用户提供了重要的贡献。
硬件厂商有自己的商业模式和技术优势需要保护,不撕破脸对双方都好(高性能和专业级别的显示驱动用户需求能得到满足,更别说AI世代来临)。只是从GPL社区的理念上,闭源驱动这事不道德。
在早年的一份嵌入式操作系统选型的研究报告指出,Linux相对于其它BSD的Unixlike操作系统,由于GPL的约束限制,不具有商业优势,一言以蔽之,业界有GPL的恐惧症。
把GPL局限在内核空间,用Adapter模式来处理Android和Linux的关系
AndroidOpenSourceProject,简称ASOP(不包含设备驱动程序及Google移动服务)
Android被收购前,是准备做一个智能相机平台(可联网的相机,核心功能是一个基于云的照片存储系统,为了吸引投资人兴趣,为相机加上键盘,无线通讯等模块,做成了可上网的智能手机Sidekick,一种侧滑盖全键盘手机),公司的运营很不理想。受到Sidekick的启发,佩奇有了开发手机和一个移动操作系统的想法,旋即Android被收购。
X86采用CISC(复杂指令集计算机,指令多,电路设计复杂,功耗大,但对应编译器设计简单)
ARM(进阶精简指令集机器-AdvancedRISCMachine)采用RISC精简指令集(指令少,功耗小,但编译器设计很复杂,其关键在于流水线操作能在一个时钟周期完成多条指令),是一个32位精简指令集处理器架构,ARM单核面积仅为X86的1/7,同样芯片尺寸下可以集成更多核心数。通过”堆核“的方式,使得ARM架构处理器在性能快速提升下,也能保持较低的功耗。
Android设计的多层软件栈中,采用Adapter模式处理Android和Linux的关系
内核的用户空间ABI(应用二进制接口)就是一种GPL的作用边界,能让开发者意识到用户空间的代码,不被定性为内核的衍生产品,如果GPL的界线清晰而易懂,可以帮助大家消除对GPL的恐惧。
Linux作为宏内核操作系统(Macrokernel),优点是驱动与系统内核共生在相同的地址空间,运作的效率比较高,缺点是当驱动有问题的时候,容易危及内核的工作安全。用户区间驱动的思路是将驱动的主要业务逻辑剥离出来放到用户空间的主驱动模块中,内核中的驱动是个“影子”驱动,只有透传控制命令和数据的功能。
调试内核空间的程序比调试用户空间复杂得多,内核空间的bug引起的后果也严重的多。devicedriver是内核空间占比较大的代码。
用户空间程序与设备通信的方法,主要有以下几种方式
简单来说,HAL就是一个设备数据库,管理当前系统中所有设备,你可以以多种灵活方式去查询这些设备,获取指定设备的特性,注册设备变化事件。Window下和Linux下的HAL所指并非相同之物。
开源是每个人都参与其中,共享责任和所有权。这意味着利用该软件谋利的公司需要做一些回馈,无论是代码,文档,社区工作还是金钱。在可持续的开源中,参与者应该感到做贡献的必要性和道德义务。
开源的早期大部分工作都是由热情的开发人员在深夜和周末完成的,这一切的动力源于他们对编程的热爱和在社区大家一起工作的乐趣。但在过去10到15年间,情况发生了巨大变化。
许多开源数据库对云服务都有限制。这完全是由Amazon的aws云服务引起的。aws一直提供数据库服务,2009年推出RDSMySQL服务,2013年推出PostgreSQL服务,2015年推出AmazonElasticsearch服务。大量企业购买这些服务,使得收入都向Amazon集中。如上面Elastisearch的例子。
“BSL的目的是为客户、开发人员、用户和供应商提升软件行业整体的自由度和创新性。最后,我希望BSL将为新的商业模式铺平道路,这种新模式可以在不主要依赖捐赠的情况下维持软件开发。”,创造者如是说,希望BSL能带来新的增长模式,表达了开源需要支持的观点。
BusinessSourceLicense1.1不是开源许可证,BSL不符合OSI所提出的OSD开源定义。原因在于OSD不允许对特定类型的行为做限制,如生产用途。
放眼MariaDB之外,BSL的使用者并不多,并且,从其他使用者的附加条款来看,BSL更多地是作为一种防御云厂商“白嫖”的方式。
CockroachDB:变更日期3年;变更为Apache2.0;附加规定允许将CockroachDB用于任何目的(例如生产),只要不将其作为商业DBaaS(数据库即服务)提供即可。另几个软件也有类似禁止SAAS化的附加设定。
木兰系列许可证包含”木兰宽松许可证“和”木兰公共许可证“(后续可能更多),均由北京大学作为牵头单位,依托全国信标委云计算标准工作组和中国开源云联盟,联合多方起草,修订并发布
BSD,MIT类宽松许可证兼容MulanPSLV2许可证;
MulanPSLV2兼容ApacheLicenseV2.0,L/GPLv2,L/GPLv3等许可证。即,许可在BSD,MIT类许可证下的代码可贡献到MulanPSLV2项目中,许可在MulanPSLV2下的代码可贡献到ApacheLicenseV2.0,L/GPLv2,L/GPLv3等项目中。
《木兰辞》有言:万里赴戎机,关山度若飞。像飞一般翻越关隘和山岭,或许这是木兰协议团队取名的由来。
木兰辞作为北朝民歌,按歌中所写,花家应该是北魏鲜卑军户,并不是汉人,参与的是北魏太武帝(第三位皇帝)拓跋焘对抗柔然之战,先后十三次,木兰参加的应是429年这场胜果最大的一次。可汗这个名称也是最早由鲜卑人使用。
柔然,是鲜卑和东胡的混合。也算是蒙古族的祖先构成之一。据传柔然的祖先是鲜卑家的奴隶,两家打了长达超百年的战争(391~523),跟15世纪英法百年战争有一拼,还都出了女将军,木兰vs贞德,不过木兰胜利凯旋,贞德19岁火刑而死。公元552年,突厥人崛起,柔然国灭,几乎同时,北魏也分裂灭亡。
当然可以,但要注意许可证冲突的问题
以ApacheV2.0为例,看看冲突情况
把两个程序合成一个较大的程序,你就会碰到此类问题。当无论如何都不能同时满足两个许可证,那么它们就是不兼容的。有些许可证允许把两个模块连接在一起,但是不允许把两个代码合成一个模块。
例如你只是想把两个程序安装到同一系统中,那么它们的许可证是没必要兼容的,因为安装并不是把它们合成一个大的程序。
发布C时,你要显著地在文档或代码里体现以下内容
这样做,不违背MIT,也不违背GPL。别人看了,如果想用C,就遵循GPL;如果只想用A,遵循MIT就可以了
这样Linus想要在不同的许可下发布Linux内核,他可能首先需要成千上万的贡献者同意该项目,o( ̄︶ ̄)o
mindmaproot((开源风险))合规风险(违反许可,导致侵权)安全风险(安全漏洞,被攻击风险)技术风险(专业技能不足或错误应用,导致故障)管理风险(台账不请,难紧急应对`台账:原指摆放在台上供人翻阅的账簿,也就是明细记录表
timelinetitle开源风险治理建设锚点section战略目标感知+治理:合规使用:供应链安全:安全使用section过程能力引入管控:引入台账:软件测评:漏洞分析问题管控:专家支持:漏洞跟踪:风险跟踪退出管理:存量治理:退出台账section工具能力托管平台:制品仓库:知识库:DevOps集成组成分析:制品成分分析:许可证扫描:漏洞扫描:黑名单:报告清单供应链安全23年以来,部分公司也收到Qt公司的律师函,被指控使用其开源软件但未遵守开源许可证义务。QT公司现在主要靠卖license活,有LGPL和商用license两种协议,在桌面开发方面一般用LGPL没问题,但其就想在嵌入式上挣点钱。例如其在IOS上官方只提供静态库,你开发闭源软件就容易中招。
现在流行的组件扫描和漏洞发现工具,是美国的Synopsys(新思科技)的BlackDuck,但其只在国内销售不带库的版本,要把安全漏洞对应到开源组件上,需要把代码特征值传到国外网站上,才能对比
SynopsysDetect扫描项目并计算项目文件的特征值信息,这些特征值信息会加密传至BlackDuck应用服务;BlackDuck应用服务器再将项目文件特征值信息加密上传至BlackDuck服务进行匹配对比,并将识别出的项目开源组件版本及安全漏洞信息展示给用户
2023.11月工行就因为思杰软件的漏洞,被黑客侵入勒索,交了赎金(也难怪思杰最近也退出中国了)
究其根因,还是开展维护活动的贡献者缺乏激励
各团队依赖关系管理实践差异极大,保护软件供应链的第一步是管理应用程序中的开源代码和第三方代码
依赖管理是一项大规模的努力,仅在生产应用程序中的25%的库上实施