作者:开源中国(OSCHINA)
内容来源:开源中国(OSCHINA)
最近开源中国(OSCHINA)在庆祝 11 周年生日,编辑部借着这个机会梳理了一下这一年来我们追过的那些开源界/开发界的热点新闻,算作一个阶段性小结。(其实只有 9 个月~)
今年这几个月下来,已经积累了庞大规模的内容,我们按不同方向整理成了数篇文章,接下来会陆续推出,这是第二篇,聊聊在开源上最受关注的几家公司。
上一篇:编程语言这一年:Rust、Kotlin 上位,Python 横行
OSCHINA 今年关注了什么之——公司与开源
前一篇我们梳理了一下编程语言方面的动态,而编程语言之外,今年在开发者中引起最为热烈讨论的可能要数华为相关的信息了。华为与微软、MongoDB 被我们划分在“今年在开源上让人眼前一亮的公司”中,梳理成这第二篇总结文章,下边来看看。
华为
由中美贸易争端引起,华为被美国封杀,并且蔓延到技术领域。在美国政令下,谷歌开始限制华为使用安卓,微软随后停止华为订单,紧接着,SD 卡协会、Wi-Fi 联盟、IEEE 学术委员会等均撤销华为会员资格(后又接连恢复)。
绝地反击,华为宣布将推出自主研发的海思芯片、鸿蒙操作系统与方舟编译器。
一时间引起了剧烈的反响,一方面是一种爱国情怀在刺激着全国人民,不管是不是开发者,大家在关系到国家前途的这件大事上都积极参与了进来;另一方面,华为准备祭出的这几个项目,在国内当前技术环境下并没有前例,它们技术上具体是如何实现的?完成得怎么样?有什么样的突破?……这些与技术相关的期待、疑问与质疑在讲究“talk is cheap, show me the code”的开发者圈子中瞬间爆炸。
这其中有正面的声音,反面的也不少。在华为一次次骚操作中,人们的质疑一再被打脸,真香定律疯狂应验。
拿最近开源的方舟编译器来说,传闻这个编译器华为已经自主研发了 10 年,但是直到开源出来,华为还是被许多人喷只会画饼:
- 2009 年,华为启动 5G 基础技术研究的同时,开始创建编译组,第一批海内外研究人员加入;
- 2013 年,华为推出面向基站领域的自研编译器 HCC,并正式提出编译器框架构想;
- 2014 年,众多海内外专家加入华为,方舟项目正式启动;
- 2016 年,成立编译器与编程语言实验室;
- 2017 年,方舟编译器上第一个 Java 程序“Hello World”跑通;
- 2018 年,方舟编译器跑通安卓系统所有后台服务,并成功移植到手机;
- 2019 年,华为方舟编译器开源。
其实源码目前已经开放,喷的人也开始换了一些角度。目前方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR,Intermediate Representation)与语言编译实现,同时搭配编译器其它二进制组件,实现 Java 程序到 aarch64 汇编指令的编译过程。
据介绍,一方面,方舟编译器首次在 Java 领域将虚拟机干掉了,也是软件史上首次将 Java/C/C++ 等混合代码一次编译成机器码直接在手机上运行,告别了 Java 的 JNI 额外开销,也告别了虚拟机 GC 内存回收带来的应用进程掉线,使操作流畅度大幅提升。
华为没有透露技术细节上的东西,同时官方也并未透彻说明研发方舟编译器的核心难点在哪里。但是根据方舟专家不闲的介绍,我们了解了一些东西。
首先 Java 本身是“动态语言”,如果要能够在服务器侧做到静态编译,又不能动手裁剪语言的动态能力,就需要 IR、运行时、编译器以及编程框架一起修改,同时还要考虑复杂的兼容问题,导致技术方案选型的困难。其次要想提高流畅度,需要提升内存使用效率、提升 JNI 效率,需要想尽办法控制动态绑定对性能的影响,需要 profile 上有更准确的信息,这是系统工程上的困难。而最为关键是如何提升编译后的代码执行效率,做出一个可以工作的工具不难,难在做出世界顶尖性能。此外,我们国内能做 IR 设计和内存模型的人才太少了。
按照华为的说法,方舟编译器的开源打响了鸿蒙 OS 开源的第一枪,方舟编译器之上,鸿蒙 OS 是“第一个适用于所有场景的基于微内核的分布式操作系统”,它可以运行在智能手机、智能扬声器、计算机、智能手表、无线耳塞、汽车与平板电脑上,其支持的 RAM 大小从千字节到千兆字节不等。此外,鸿蒙最终将支持一系列应用,兼容 Linux 与 Android 应用。
同时华为还介绍接下来方舟编译器本身也会继续增量开源。此外,根据一些开发者的分析,华为基于方舟编译器的 IR 层设计,其实上可接入不同编程语言生态、下可接入各种操作系统与硬件平台,而一旦 IR 层生态建成,更可直接推出自己的语言,这样软件王国四大明珠“操作系统、编译器、编程语言与数据库”中三颗都将变成华为的掌上明珠,这在国内还没有先例。
基于这些已经引起的全球性的关注以及开源相关计划与事实,我们认为华为今年在开源上的参与程度与影响值得记录与继续期待。
另外值得一提的是,最近 CNCF 发布的 Kubernetes 历程报告中,我们发现华为高亮出镜:目前在参与贡献 Kubernetes 的公司中,华为贡献量排在第 4 位。
其它引起热议的相关内容
- Android 官方:Google Play 等服务仍然可用
- 华为回应谷歌暂停支持部分业务:中国市场不受影响
- IEEE 主席邮件透露:已与美国商务部展开对话,争取学术活动不受干扰
- IEEE 解除对编辑和同行评审活动的限制
- 谷歌:不能禁止华为手机使用 Android,会威胁国家安全
- 华为考虑与俄罗斯开源操作系统 Aurora 进行深度研发合作
- 华为鸿蒙系统刷屏,到底什么是微内核操作系统呢?
- 这次看到源码了,华为开源了方舟编译器
- 华为宣布方舟编译器将于8月31日开源
微软
微软爱开源!
参与开源,这是近两年来微软在走的路线,并且在 2019 年,它甚至直接在 Windows 中安上了一颗 Linux 内脏。
微软的这颗 Linux 内脏其实是今年 5 月份在 Windows 10 上推出的全新版本 WSL(Windows Subsystem for Linux),新版本 WSL 2 使用了全新的架构,这是一个真正的 Linux 内核,它改变了 Linux 二进制文件与 Windows 和计算机硬件的交互方式。
Linux 二进制文件使用系统调用来执行许多功能,例如访问文件、请求内存与创建进程等。WSL 1 创建了一个转换层,对这些系统调用进行翻译,以允许它们在 Windows NT 内核上工作。但是,实现所有这些系统调用很有挑战性,导致某些应用程序无法在 WSL 1 中运行。WSL 2 包含自己的 Linux 内核,它具有完整的系统调用兼容性。所以像 Docker 等应用都可以正常使用。
同时,微软还开源了全新的终端 Windows Terminal,这是一个全新的、流行的、功能强大的命令行终端工具。包含很多来社区呼声很高的特性,例如:多 Tab 支持、富文本、多语言支持、可配置、主题和样式,支持 emoji 和基于 GPU 运算的文本渲染等。
微软深情拥抱 Linux,不可思议!从此以后,人们是这样描述闭源的 Windows 的:Windows 是世界上最好用的 Linux 桌面发行版。
关于拥抱 Linux,微软今年还做了一件事,它宣布正在将其 exFAT 技术添加到 Linux 内核中。exFAT 文件系统目前在整个电子行业中都得到了广泛应用,你平时使用的 SD 卡和 USB 闪存驱动等电子产品,多半就使用到了 exFAT 技术。
但是这个专利此前是收费的。微软开放了它的 exFAT 技术,并且把技术规范公开,这意味着,往后 Linux 社区可以放心地使用 Linux 内核中包含的 exFAT。另一方面,技术规范文档公开后,开发者可以开发符合要求、可互操作的 exFAT 实现,促进整条技术链的发展。
除了 Linux,微软还把参与开源的手握向了 Chromium,这是开源界的另一个超级明星项目,基于它开发的 Chrome 也是 Web 浏览器的霸主。微软去年年底宣布要给自家的新浏览器 Edge 换个心脏,今年 4 月份它终于正式释出了基于 Chromium 的 Edge 预览版本。
微软在改造自己的 Edge 的过程中,也将其在业内出了名的浏览器特性带到了 Chromium 项目中,比如顺滑滚动体验和快速便捷的 Windows Hello 身份验证、无障碍阅读、高对比度与视频字幕可读性等,俨然成为了 Chromium 的重要贡献者。
而开源编程语言方面,微软也着手深度参与,上一篇讲编程语言的时候我们已经提到了:微软正探索将 Rust 作为 C 和 C++ 的安全替代方案。
什么情况?那个当初把开源视为毒瘤的微软,现在已经成为了开源界的超级巨星!?
这份开源之爱,即是正义!——?
真的是正义吗?有些人不这么认为。
微软想要做什么呢?有人说他要入侵 Linux,还是走“拥抱、扩展再消灭”的老路。在微软宣布开放 exFAT 技术,参与到 Linux 内核的消息出来后,有资深媒体人分析:“微软并非以‘和平姿态’进入 Linux,它采用了敌对姿态。它对雅虎、诺基亚和 Novell 采取了同样的做法。”他指出微软现在进入 Linux 完全是为了将微软的“标准”、API 和专有软件推到 Linux 中,最终目的只是纯粹而简单地要剥削和榨取。
我们甚至觉得事情没这么简单。关于微软与开源,整个故事可以讲得很完美,下边来看看。
Linux 基金会项目 OpenDaylight 执行总监 Neela Jacques 在名为《The shift in open source: A new kind of platform war》(开源的转变,新的平台之战)的文章中写道:在技术主宰着世界的今天,平台创造了市场和生态,创造出巨大的价值。此时,如果哪家公司站错平台,那么不论这家公司的技术有多好,市场有多大,销售团队有多强,最终都会被淘汰,前车之鉴包括 Nokia、Blackberry、Windows phone、Amazon Fire、Websphere 与 Cloudstack 等。
当前开发者领域最大的平台是什么?开源。这是前提。
2016 年,微软以 260 亿美元收购了职业社交网站 LinkedIn。
2018 年,微软以 75 亿美元收购了全球最大源代码托管平台 GitHub。
2018 年,微软开始与自由职业工作平台 Upwork 开展合作,共同向客户提供企业级自由职业解决方案。有消息指出,此举是微软收购 Upwork 工作的第一步。
微软在干什么?
LinkedIn 是全球最大的职场社交平台,用户数已超过 6.1 亿,覆盖全球 200 多个国家和地区,每个《财富》世界 500 强公司均有高管加入。
GitHub 是全球最大的软件源代码托管平台,目前用户 3600 万,托管仓库超过 1 亿。
Upwork 是全球最大的自由职业网站,每年有数百万个职位发布在 Upwork 上,覆盖专业技能超过 5000 种。通俗一点来说,Upwork 就是一个众包平台,人们在上边接单完成任务,赚取回报。
微软收购 LinkedIn,可以看作是对“人际关系网”的收购;收购 GitHub,外界认为微软开始在大规模地聚集开发者人才,其实收购的是“专业开发者”;如果微软真的收购了 Upwork,那它势必将 Upwork 向全体 LinekdIn 与 GitHub 用户开放,形成一整个可持续发展的开发者生态。
现在情况是微软手上已经有了 LinkedIn 这个全球最大的职业社交网络,也有 GitHub 这个专注于软件开发者的全球最大程序员聚集网络,收购 Upwork 或者类似的开发变现平台成为了这两大开发者资源网络的不二去向。
这很明显,微软在抓住当前最具创造力并且最“平价”的创新源泉——自由与热衷开源的开发者——去建设它全新的开发者生态。那么前边梳理的微软今年在开源上的动作,其实也就不言而喻了。
只要把握住了这群开源世界的核心,那么新的开发者生态中“天下英雄皆入吾彀中矣”,到时别说自行车了,微软可以拥有整个软件世界。
微软是不是这样想的呢?我们拭目以待。
对了,最近微软宣布将于明年举办第一届微软 Linux 大会——WSLconf,同样让人大跌眼镜。
不小心给它打了个广告,微软打钱。
其它引起热议的相关内容
- Win 10 更新,Linux 内核的 WSL 2 开始上线
- 新版 Microsoft Edge 使用 Chrome 的路线图来淘汰 Flash
- 新版 Microsoft Edge 有时会假扮成不同浏览器
- 微软发布适用于 Win7/8 的 Microsoft Edge 预览版
- 换芯后的 Edge 浏览器 UI 首曝光,还是熟悉的味道?
- Docker 将推出 Docker Desktop for WSL 2
MongoDB
这一小节讲讲今年在开源界名声似乎不怎么样的 MongoDB。
MongoDB 去年 10 月份宣布将开源 License 从 GNU AGPLv3 切换到 Server Side Public License(SSPL),以此回应 AWS 等云厂商将 MongoDB 以服务的形式(DBaaS)提供给用户而没有回馈开源社区的行为。
SSPL 明确要求托管 MongoDB 实例的云厂商要么获取商业许可证要么向社区开放其服务源码。
但是开源社区对此有不少反对声音,许多人认为 SSPL 是具有针对性的,对特定类别的用户具有严重歧视性,这违反了开源的真谛,所以 Fedora 认定 SSPL 不是一个自由软件许可,红帽和 Debian 也宣布从发行版中删除 MongoDB,甚至 macOS 包管理器 Homebrew 也因为协议问题移除了 MongoDB。
同时被点名的云厂商中的代表 AWS 随后推出了一个与 MongoDB API 兼容的新数据库产品 DocumentDB,并将其描述为“一个快速、可扩展且高度可用的文档数据库,旨在与你现有的 MongoDB 应用和工具兼容”。这摆明了是对 MongoDB 的反击。
为什么单拉 MongoDB 出来讲呢?因为事情发展到今年,MongoDB 其实成为了跑在开源与云厂商斗争最前线的一个卫士,在它的队列中,先后出现了其它知名开源项目的身影:
- 十分流行的图数据库 Neo4j 宣布,从 Neo4j 3.5 版本开始,企业版仅在商业许可下提供,不再提供源代码。
- Confluent 宣布修改其平台部分组件的开源协议,从 Apache 2.0 切换到 Confluent Community License,新的协议不允许将项目源码作为 SaaS 产品提供给用户。其背后是知名的流处理平台 Kafka 的团队,并且此次协议修改影响到 KSQL。
- Redis Labs 的一些模块在半年内相继从 AGPL 变更为 Commons Clause 和 Apache 2.0 组合的开源协议(Apache2 modified with Commons Clause),又变为 Redis 源码可用协议(Redis Source Available License,RSAL),RSAL 要求源码不能集成到数据库产品、缓存引擎、流处理引擎、搜索引擎、索引引擎或者机器学习/深度学习/AI 服务引擎。
- Cockroach 对核心源码的开源协议进行修改,从原本的 Apache-2.0 协议修改为 BSL(Bussiness Source License),该协议要求用户唯一不能做的是在没有取得授权的情况下以商业形式用 CockroachDB 提供数据库即服务(DBaaS)。
- ……
这些项目陆续修改开源协议甚至直接闭源,都直接把原因指向了云厂商将其能力直接作为一种云环境下的服务赚大钱,而不回馈开源社区。它们不愿意眼睁睁看着云厂商坐收渔翁之利。
当前站在这场开源界与云厂商混战中最前线的正是 MongoDB,它成了典型代表。
且不说各个 Linux 发行版与工具将它列入黑名单的“英勇就义”,也不说与 AWS 交锋的几个来回,就看在开源界大佬们也纷纷发声来谴责 MongeDB 等开源项目针对云厂商修改协议的这种行为,许多人认为它是输家时,MongoDB 正面刚了。
MongoDB CEO Dev Ittycheria 认为不必在意这些看法,他说:“从那以后,我们的业务增长得更快。这没有任何影响,它只影响那些可能在考虑使用我们的免费版本,并将其作为托管服务提供给第三方的人。”这似乎就是要与云厂商斗到底的架势。
同时 Dev 还直言 MongoDB 开源并不是为了获得帮助,使产品更好,而是作为免费增值策略,以推动采用。
不管是为了什么,开源最终还是需要有一个可持续的方式来维持,简单来讲,至少需要可以维持项目正常运营的金钱,而一旦开源项目走了商业化发展道路,那么商场自然也有商场的规则,对于项目所赚钱财的多少则会更加看重,这是开源与云厂商斗争中开源这一方的利益关切。(又或者前边提到的开源项目其实也有利益不相关,纯粹看不惯云厂商的操作的?)
另一边,这些被“针对”的云厂商不愿意放弃那一种从开源中得到的精妙的获利方式,不愿意放弃这笔优质的收入。
开源与云厂商利益关切本质上不同,并且看起来目前没有较为理想的解决方案;关于谁是谁非的观点其实也明显地分化成了两派——一方面是因为对协议的理解不同,一方面似乎是协议本身不完备,没有明确处理这种案例的内容;同时在这之间还不断有人加入战局,让局势不断往高潮上发展。
因此我们认为开源与云厂商的混战还将不断恶化下去,最终收场可能需要倒逼到“开源最上游组织”去重新修改相关约定。
注:这里说“开源最上游组织”而不说 OSI(Open Source Initiative,开源促进会,定义“开源”与认证开源协议的组织),其实是因为本身华为的事件让人们开始思考开源国界与本质等相关问题,那么最终我们是否需要、会不会重头来过,重新规划开源的这亩田地呢?我们甚至连最终会不会存在一个“开源组织”形态都不能断言。
其它引起热议的相关内容
小结
不管是华为还是微软,其实公司开源背后的想法都可能不那么“极客”,是不是被动/主动通过开源去建设生态,是不是通过开源最终想要分到一杯什么样的八宝粥只有它们自己知道。MongoDB 或许只是勇于把真实想法说出来而已,这反而能让人敬佩。
在将这几个代表性公司今年在开源方面的情况梳理了一番之后,回过头来看,这一篇咱们从中美贸易摩擦开始讲到了华为的参与开源,而为什么中美贸易可以影响到开源呢?这其实引发了我们很多思考:开源有没有国界?参与开源是可取的吗?开源的法律问题怎么认定……“华为事件”其实代表了我们关于“开源到底该是怎样的?”的迷思。
而勾勒“微软的野望”则是对开源本质的探讨;MongoDB 与云厂商之间的斗争则让我们看到了开源生存的困局和处于商业市场下的冲突。
这些话题全部杂凑成一锅——关于开源的思考,这个话题我们下次再聊。