卡卷网
当前位置:卡卷网 / 每日看点 / 正文

Microsoft.Net和OpenJDK目前哪个开源程度更高?

作者:卡卷网发布时间:2025-01-11 16:38浏览数量:74次评论数量:0次

只从协议层面来说的话,OpenJDK使用的GPLv2协议更开源,而Microsoft.Net使用的MIT协议更开放。

MIT协议给了用户最大的自由权,用户几乎可以拿来干任何事——包括闭源;GPL了用户闭源的权力,因此它更开源,但没有那么开放。

不过在“开源程度”这个问题上,尤其是对于商业公司的开源项目,协议其实只是一个小方面,相对而言开源的形式会更重要,如以下几个常见的开源形式的“开源程度”显然有很大的不同:

    公司将自己的商业软件的一部分开源,但依然以商业软件的形式在内部,每隔一段时间从内部代码库同步到开源代码库;公司开源了项目,并把持着对项目的控制权,每个提交都由本公司员工,而本公司可以任意推送提交,内部决定无需和外部进行沟通;公司将项目控制权给一个由自己主导的开源组织。虽然公司依然能把持项目的发展方向,但将部分控制权给社区,所以公司无法做到一言堂,想推动什么都要遵循公开的社区规章,和社区沟通商议;公司想拒绝社区的决定也要有合理的理由;公司将项目捐赠给第三方开源组织,完全放弃特权,由开源社区主导项目发展。

具体的开源程度我对.Net这边了解有限,所以不太好做具体的较。

单纯说OpenJDK这边的话,Ja8时期OpenJDK和OracleJDK还有一些显著的功能差异,如JFR、JMC等都是OracleJDK享的商业功能,所以并没有那么开放。而到OpenJDK11的时候,OracleJDK几乎所有的商业占功能都开源并转交给了OpenJDK社区。

之后OpenJDK16代码从Mercial转移到GitHu,去年OpenJDK从openjdk.ja.net这个域名迁移到openjdk.org,这些都是OpenJDK社区更接近开源社区,降低Oracle影响力的表现。

目前的.Net和OpenJDK应该都是属于第三类,它们分别由.Net基金会和OpenJDK社区控制,但这两个组织又不是完全的开源组织,微软和Oracle依然保持着主导地位,间接控制项目发展方向。

当然只是这样说还是显得太抽象,我拿OpenJDK社区举例说明一下他们的“开源社区”体现在哪,“商业公司主导”又体现在哪。

OpenJDK社区作为开源社区,很多行动都是基于社区章程下的投票进行的。如在OpenJDK社区下属的项目(负责开发JDK的JDK项目,开发JaFX的OpenJFX项目,开发虚拟线程的Loom项目等等)里,通过审核者(Reviewer)的提名和投票就能让一个提交者成为审核者,成为审核者后就有资格批准一些小型PR能否被合并。

同样的,基于OpenJDK成员的提名和投票,贡献者也能成为OpenJDK成员。成为OpenJDK成员后就有资格提议创建新的项目,因此OpenJDK社区中很多项目都不是Oracle主导的,如Shenandoah项目(负责ShenandoahGC)是RedHat主导的,Lilliput项目(减小对象头)是RomanKennke个人主导的。

上面这些都是OpenJDK社区作为“开源社区”的性质,而OpenJDK社区是以“Oracle为主导”的体现是,OpenJDK社区中负责修订社区章程的五人理事会里,理事会和OpenJDK负责人这两个位置由Oracle直接指定,副由IM指定,剩下两个一般成员才是由社区选举,而且Oracle员工也能参加选举(今年这两个位置就是Oracle和RedHat各占一个,去年是RedHat和Amazon各占一个)。

可以看出,这个理事会中Oracle总是占据最大一份话语权,而且理事会除了修订社区章程外,创建组、罢免组负责人都需要他们内部投票同意。除此之外,社区章程中还有兜底条款允许理事会在“特殊情况”下通过内部投票直接解散组或项目。因此,Oracle可以在需要的时候通过理事会组织施加很大的影响。

刚刚说到的理事会中Oracle直接指定的“OpenJDK负责人(OpenJDKLead)”也是个极其重要的位置,负责很多关键事项,如JEP的流程(大部分较大的功能都要走这个流程)中好几步都要都必须经过OpenJDK负责人的同意才能进行。

JEP流程

Oracle把这些关键位置抓在手里,所以他们能确保在OpenJDK社区中有着主导地位,这是商业公司主导的主要体现。

我对.Net基金会的不太熟悉,但从微软在基金会章程中被指定为特殊的“创始成员”以及长期以来社区对基金会“性不足”等指控来看,那边的情况应该也是类似的。

当然,虽然.Net基金会和OpenJDK社区显然还是以微软和Oracle为主导,但由于这样一层中间组织的存在,微软和Oracle要做出任何决定都要和社区沟通,要将决定公开化透明化,因此让项目不会成为一言堂。

而且为了社区(至少表面上)的性,微软和Oracle也不会用太难看的方式干预社区。如Oracle虽然不喜欢ShenandoahGC,来自Oracle的OpenJDK负责人为了维持公正的原则也不会去卡相关的JEP。

因为这些因素,相纯粹商业公司把控的开源项目来说,这样由不太的第三方的开源项目开源程度无疑还是要高得多。

最后我纠正一下@hez2010的说法:

修改协议或者闭源/开源的行为需要获得所有给仓库贡献过代码的作者的准许,然后需要从仓库代码中删除掉未获得准许作者提交过的代码之后才能进行。

他说的这个是正开源社区主导的项目(如Linux)才会出现的情况,不适用于大部分商业公司或者基金会主导的项目。

公司/基金会组织主导的项目基本上会要求贡献者贡献代码之前签署一份CLA(贡献者许可协议),不签署协议的开发者会直接被拒绝向上游提交任何代码。

CLA协议中通常会授予组织一部分权力。如.Net基金会的CLA就授予了.Net基金会版权和专利许可,因此.Net基金会有资格代表全部贡献者修改协议或者直接转向闭源。OpenJDK社区、Apache等组织也有类似的CLA协议。


@油面筋塞肉的回答那就是完全不知所云的乱扯一通了。

而是否开放,最重要的还是对贡献的接受开放程度,net接受了龙芯对其上游大刀阔斧的改动,以后的版本会继承下去,完成了分支到合并的过程,以后就方便了,这不才是开放的体现么?而openjdk的分支,有多少合并回去的?还不是得出一个版本开一个分支改,能开个分支改改又没啥稀奇的。

OpenJDK主线支持不支持LoongArch完全取决于龙芯,龙芯交补丁的时候OpenJDK没给过任何阻力。JDK18龙芯就把对LoongArch64的ZeroSupport推到主线了,华为主导的RC-VPort也已经进了主线了,龙芯现在不想把LoongArch的JIT支持推给主线也能怪社区不开放?

最后一个逻辑,openjdk这么完美了,那为啥还有oraclejdk的存在?甲骨文吃饱了撑的做一个闭源一个开源,开源版本你们拿来吹各种开放,然后闭源版本?

OpenJDK当然不完美,没法提供给用户Oracle工程师团队全天候27种语言的服务支持。

现在OracleJDK就是Oracle全套JaSEUniversalSuscription订阅服务的时候附带的一个OpenJDK发行版,的就是后面打包的商业服务,也不知道提这个是想证明啥,证明微软的为.Net准备的商业支持团队是免费的吗?

至于GPL可以被违反所以不算更开源云云的,懒得回了。

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码