关于鸿蒙,几个关键问题(转载自我自己的知乎号)

在开头先感谢观察者网的编辑,不仅把我的一些评论精选为新文章,还亲切地提醒我可以在我的文章处对已有文章进行修改。

本人只是计算机科学与技术的准毕业生(课业全部结束,只剩毕业设计),来说华为完全是一腔热血上涌。我从华为闪存门开始关注华为这家企业,若即若离地经历了251,鸿蒙开发者大会等事件,对华为有好感也有恶感。今年上半年,由于决心提升学分,我脱离了很久主流平台(观察者网,乌有之乡,知乎,B站只看vtb和编程课)我本不知道鸿蒙OS,在大概课业的第10周后,由于12周课基本结课,16周课仅有一门,于是终于有了空闲,回到知乎发现鸿蒙OS竟已发布。

鸿蒙OS发布后,我从关注回答,到搜索相关名词与技术,中间经过了很多挫折,也严重意识到自己在学业上的不足(就这还考研那?我直接把今年的考研计划推到明年了,真干不了)。我虽然对华为部分举措感到反感(昨天和今天特别魔怔),但搜索的材料越多,对这个企业的信心也越强。

华为在很早以前就在研发通信技术,在硬件和软件的设计上都有突破。大家现在看到的openHarmony框架,就是华为于2014年发布的LiteOS的开源框架版(开源框架与开源项目不同,项目经过编译可以直接使用,框架需要自己添一些东西)。7年来,华为一直在为这个系统注入新的技术,适配更多的硬件(关于之前锤他用FreeBSD,那个我后来看了一下一个英文开发者给华为开发者社区发的邮件,其实完全不是“基于”这个概念,我对“证据”图片先入为主了)和兼容其他操作系统。如果去了解华为在今天的节奏之前20年所做出的贡献,你会发现这家公司的伟大之处。

但是今天伟大,明天必然也伟大,不代表现在有问题就不能指出。华为官方在宣传方面很令人担心,也许是宣传部门的问题,也有可能就如我所说,是“二次宣传”,也就是华为官方未授权,只为了蹭热度带自己知名度的伪“海军”带的节奏。把将要发射的卫星(官方口径)当成已经上天(民间口径),把已经承认的“基于”(官方口径)硬说成“自研”,把ABCD当作一体,用A去为B挡枪,拿C为D辩护,又用D去攻击质疑B的,这样下去不会有良好的讨论环境,只会一团乱麻。

大家应该都有感觉,2017以后,民众的话语权逐步增强,公知节节败退,爱国主义成为了主流。但是正如公知也有真爱国者,爱国主义中也会混杂假爱国派,也即只用爱国主义恰烂钱恰热度,却未必真正爱国的人(甚至会有原自由派公知)。我们作为人民群众,不光要把亲美自由派公知打倒,也要反过头来对自己内部进行清理,免得假爱国者重新夺取话语权。

爱国的本质是什么?已经定性:“爱国主义的本质就是坚持爱国和爱党、爱社会主义高度统一。”而社会主义,教员活的灵魂,改开思想的核心,正是“实事求是”。所以我一直呼吁大家不要扣帽子(但我已经出现一次扣帽子行为了,气头上真是啥都敢干),讲事实而不是讲立场,讲道理而不是虚空领50W。

本着敢作敢当的原则,有误内容不会删除,而是作增补,并对原内容以删除线标签为提醒(不知道观网的富文本编辑器支不支持[del]删除标签[/del],这里先试试,就算没有起效,见到[del][/del]包起来的块知道是删除掉的就行。现在是在实训基地,等回去以后还会再改第二遍,之后如果有更新的资料,会改第三遍,第四遍,直到整篇没有错误为止。

没法私信观察者网的编辑,估计我这个文章还会被光临,所以在这说了,可以在未来版本加一下下面这种分割线的快捷方式吗?分页符不能解决大分段问题,没有大段落分割符,我这种破碎的发言只会把人绕晕(

--------------------------------------------------------------------------------------------

这几年讨论最多的就是华为和它的鸿蒙,但是绝大多数参与讨论的人都并没有计算机领域的知识,结果被公知和民粹媒体刷得团团转,我觉得趁这个机会科普点东西,指出点问题是可以的,也是危险的.

首先表明立场,支持华为,支持鸿蒙,但不支持过分吹捧以及"偷换概念"的海军营销.如果将鸿蒙抬到一个不可及的高度,最后伤害的会是整个国内安卓市场,以及潜在的对开源精神的二次伤害.如果不想"红芯"重演,就请一起抵制这些炒作营销号.当然,如果不想在某一段之后继续看下去,也可以把我当成行走的50W,个人欢迎揭发检举,但不欢迎谣言.

首先要弄清楚的一个东西,是什么是Unix,什么是Linux,什么是安卓.

在操作系统领域,我们如果不讨论最早的单道批处理和多道批处理系统,那么现代意义上的第一个广为人知的操作系统,是贝尔实验室的Unix.这个操作系统的开发目的是运行一款研究员自行编写的游戏<Space Travel>,这款游戏现在在Steam可以通过输入代码的方式下载.Unix之后,C语言被贝尔实验室开发出来,一定程度上终结了汇编语言的统治地位(但汇编语言依旧非常重要),Unix系统也用C语言重写了一遍.再加上美国国防部开发的TCP/IP网络协议,这一套计算机软件体系(暂且这么叫),被分发给美国的各大学作非商业用途.而Unix是闭源系统,并且大多与计算机硬件挂钩(这意味着你的电脑换个牌子,可能装的就不是上一个电脑用的系统了),这使得Unix的普及变得困难.

Unix虽然是闭源的,但有很多的"分支",这些分支由不同组织和个人开发.有一些是授权二次开发,有一些是另起炉灶.其中就有现在的几种主流开源操作系统家族,比如FreeBSD,[del]比如Linux[/del].(删除原因见下行)

del原因:知乎评论区指出,由于Unix收费使用,荷兰有人写出了不适用at&t代码的posix兼容的mimix,林纳斯认为minix不实用(因为minix更多用于教学),就在minix的基础上做了linux。至于有人说这是林纳斯写的玩具,这就很难说。

Linux是林纳斯出于个人爱好编写的,随后他公开了Linux源代码,邀请其他人一同完善,正是由于这个决定,Linux系操作系统的基础-Linux才变得越来越好.事实上Linux现在的核心代码,只有大约2%是由林纳斯编写,他目前的工作也主要是对提交的代码进行裁定.由于代码开源,所以任何人都可以将代码下载下来进行修改,为自己定制一套系统,并且在不侵犯开源协议的前提下发布改造过的系统.

接下来要讨论的是Linux使用的GPL协议,其所属的"自由软件"概念,与"开源"有很大不同.这也是大家声讨或维护华为时造成误解的根本.实际上,如果你对GOG的反DRM有所了解,那么你会对以下的内容感到熟悉.

自由软件联盟规定了自由软件的四项基本自由(下面的讨论中软件和程序是等价的):

自由度0:无论用户出于何种目的,必须可以按照用户意愿,自由地运行软件

自由度1:用户可以自由地学习并修改该软件,[作为前提,用户必须可以访问到该软件的源代码](访问源代码≠开源)

自由度2,3:用户可以自由地分发该软件及该软件修改后的拷贝

在后续的阐述中,自由软件组织有进一步说明.

若甲程序运行的时候必须使用到乙程序,那么只有在甲乙都是自由程序时,甲程序才是自由的(但即使乙不是自由的,甲依然可以开放源代码供修改).如果修改甲程序成丙程序,丙程序不再依赖乙程序,那么丙程序就不必在意乙是否是自由的,只需做到自己符合原则即可.

自由软件必须可以商用,可以商业开发,可以商业发布.但在自由方面对用户加以限制,或要求付费才能实践这些自由和不赋予自由并无二致.但出售和购买自由软件本身确是自由的.

更多相关解释,可以查看: What is free software?

这里是GPLv3协议的一个简要说明: A Quick Guide to GPLv3

和一个详细使用说明: How to use GNU licenses for your own software

这里是时候引入开源了.在此之前,我们要先说,我们所使用的软件到底是什么.实际上,软件是由"源代码",经过"编译"而得以形成的."源代码"是程序员编写的,在程序员逻辑上能看懂的部分(所以说写代码用的是"语言").而计算机运行程序/软件,相当于用它自己的语言去给你展现一些东西,如果给它看程序员能看懂的"代码",它是无法理解的.所谓"编译",就是将程序员所用的语言,翻译成计算机能看懂的语言的过程.理论上,如果一门计算机语言对编译器的规定足够靠谱(没错,一个计算机语言可以被很多种编译器翻译,就跟一个人可以配好多英文同声传译一样),用相同的源代码,就能编译出同样的软件.

这么说,开源和闭源其实是一样的吗?毕竟如果是"翻译"成计算机语言的文件,那不是也可以进行"反翻译"吗?实际上,编译后形成的文件很难被破解,这不仅是理解问题.很多编译器还会在编译时,对文件进行"加密","加密"后的文件,计算机依然看得懂,但是反着翻译过来就会变成非常杂乱的一堆文字,人是看不懂的.还有一点,就是就算能够"反编译"出源代码,在使用上也会由于"版权"而受到代码原作者的制裁.

首先,与开源相对应的是闭源,我们现在所用到的大多数软件都是闭源的,它的特点就是用户无法接触到软件的代码.这对于软件开发者来说,能够保护他们的知识产权,也能够使他们"掌握核心科技".

而开源,就是开放源代码,并允许任何人自由使用,二次修改,和基于这些代码制作自己的软件.开源对于"自由"的解释,是根据源代码(即作者)所使用开源协议相关的.有的协议规定,使用开源代码制作的程序也必须开源;有些则说,可以将二次开发的软件闭源,但是所引用的开源代码必须标明版权;甚至还有一些协议规定,代码可以随便用,不注明作者也没关系.对于接下来要讨论的GPL协议,如果你从原作者那里购买了源代码,那么将它出售也没有关系.

实际上自由软件联盟是不赞同开源运动的.虽然自由软件中包含对于开源的要求,但是开源并不是从"自由"的角度,而是从"软件质量"的角度出发.虽然我们经常说,如果一个软件要闭源,那么它的最后一个开源版本会被自由复制,并最终诞生它的一个开源版本(想想PostgreSQL).但这是"自由软件"的体现.实际上,Linux开放了自己的很多接口,用于其他软件/操作系统的编写,这种做法主动提供了屏蔽GPL协议的方式,并最终诞生了安卓系统,也造成了安卓与自由软件联盟两方支持者长久的口水战.(安卓系统避开了GPL的传染性,使得硬件厂商可以放心为之开发驱动而不必担心暴露硬件参数,但安卓系统本身是封闭的,用户无法对其进行自由修改和二次分发,这在后来的"刷机"中尤为明显)我们可以说安卓对于Linux底层的引用符合GPL许可证,但安卓绝对不是自由软件/操作系统.

部分内容引自这篇文章: Why Open Source Misses the Point of Free Software

和这篇文章: Android ,在争议中逃离 Linux 内核的 GPL 约束

# 从这里开始,涉及到华为,请随时准备领 50W #

然后我们说说AOSP(Android Open-Source Project 安卓源代码开放项目).

[del]安卓系统之所以拥有如此多的变种,就仰赖于AOSP,它是一个开源项目,但并不是自由软件项目.基于AOSP开发的操作系统,并不是"安卓套壳",而只是"跟安卓像,跟其他安卓系统共用一套生态".但 powered by Android 是对于AOSP的基本尊重,因为如果你使用了AOSP当中的部分关键成分(如Android运行环境),那么这个系统"在实际上"就是基于安卓开发的(powered by),虽然名份上依然是AOSP.华为大大方方承认自己基于AOSP开发,但是在使用了安卓的运行环境后没有显示powered by android,属于掩耳盗铃.其实小米等企业的操作系统,如果按华为的说法,也可以说是自研,因为都是基于AOSP,只是他们都很识趣地写了"powered by".至少在目前阶段,华为还未"掏空安卓"时,他们这么做是"合法不合理"的.[/del](修改版见下一行,用两个--段括起来的部分)

--------------------------------------------------------------------------------------------

安卓系统之所以拥有如此多的“变种”,就仰赖于AOSP,它是一个开源项目,但并不是自由软件项目。基于AOSP开发的操作系统,并不是“套壳”,而只是“相像”,他们共用同一套生态,享受同一套框架所带来的便利(包括不需考虑硬件适配等)。基于AOSP的操作系统都可以说自己是自研的,但当时做系统的人并没有这种自信称自己是自研,除了国内对于“自主”的标准比较高外,他们也可能认为自己只是封装了UI,或者最开始确实也只是封装了UI,算不上什么大的功绩,所以起名诸如MIUI,EMUI。但是随着开发能力的增强,我认为现在大多数国内AOSP操作系统都能达到大家所说的“自研”标准。

至于大家都在讨论的powered by android(简称pba吧,太难打了),这是“谷歌移动服务协议”中提出的要求,谷歌针对pba标语提出了专门规定,新智能手机若要使用Google Play应用商店,就必须呈现这个标语。也就是说,pba是针对要接入GMS体系的手机做出的规定,若不打算接入,可以不使用。国内的一众手机系统之所以有pba,是为了照顾海外用户,因为在海外,接入GMS服务体系是最佳选择。在国内因为用不了GMS服务,所以各家自造服务体系,导致国内系统的各种混乱情况,这是在知乎被无数次提过的。HMS的推出是一个信号,华为把服务体系这件事放到了明面上去说,去引发大家讨论,那么未来中国就有可能进行行业联合,共同推出统一的服务体系,造福国内手机厂商。如果我们绕过GMS单独提供服务的软件,能在国外逐渐得到认可并占有大多数人的手机中的大多数应用(其实很多国产游戏就是绕过GMS的,也算是一波超级输出),那么GMS市场就会被削弱,更好的PMS(假设)就拥有了能够在国外与GMS一战的能力。但如果你要强求其他手机厂商现在就是用HMS,我是坚决反对的,这会入谷歌一样造成垄断,对大家都没好处。

--------------------------------------------------------------------------------------------

至于"西方卡脖子"说,看了前面关于"开源"的描述就明白了,即使谷歌突然宣布安卓完全闭源,AOSP终止,也不存在"卡脖子"问题,国内手机厂,乃至世界手机厂都可以基于闭源前的最后一个开源版本继续开发.顶多无法继续获得后续谷歌公司开发的技术.就算是现在所说的"GMS(谷歌服务)对于AOSP"的侵蚀,国内也早有解决方案.以"鸿蒙"去攻击其他国产安卓系统,说他们"不爱国","技术不行","被卡脖子",是非常反智的表现.

关于华为"自研内核",目前实际上是没做到的,属于虚假宣传,它只存在于未来,我也相信未来它会做到自研,但以未来去夺现在的舆论,有些不太合适.它现在还是基于AOSP,用的是安卓生态.如果它真的是自研,就应该像Linux上的Wine一样,搭建安卓虚拟机来运行安卓软件,但这会带来很大的性能问题.

关于"微内核"和万物互联,实际在宣传上与其本身定义有误,这不能说是华为造成的,他说了实话,但没辟谣,也没有辟谣的义务.微内核是一种设计方式,它将内核集成的系统服务层分离出来,变成根据需要加入的选件,这可以提升扩展性.在升级系统时,只需要用新模块代替旧模块,不需改变整个操作系统.微内核不是"小内核",但确实可以设计在小的组件上.微内核用现有的Linux分支系统就可以实现,实际上现在的物联网,就是各种基于Linux的操作系统,用同一套协议在网络进行信息交换而实现的.现在的一些手机可以操控空调,其实就是物联网的应用.万物互联需要的是统一的协议,并不需要统一的鸿蒙系统,或者说就算用了统一的系统,如果各用各的协议,也无法达成互联.这方面华为在尽力,但是外界如此将"微内核","底层细节"这些概念与"万物互联"绑定,是在造谣,偷换概念.所谓"安卓是宏内核,无法万物互联"也是不存在的,事实是我见过很多微系统都在使用安卓系(也就是AOSP).

对于开源代码贡献率的问题,实际上是有差别认知的,并不是谁贡献的多,项目就归谁.现在的Linux,其创作者林纳斯贡献的代码只有2%左右,但这依然是"林纳斯和Linux社区共同"开发的系统.提交占比高不能占用所属权,因为所有者对开源项目还有管理义务.就算说对AOSP的贡献度,谷歌也是占绝对大头,至少我之前查到的是56%(动态变化),华为最近在用人工智能水Linux内核贡献,说不定在Linux贡献率上有一天会成为世界第一。说华为贡献超过50%的项目,实际上是华为自己的鸿蒙LiteOS,另一套操作系统。

# 至于最后的,最让我有 50W 嫌疑的,就是我对鸿蒙"国产操作系统之光"的严重厌恶. #

国内的优秀操作系统有很多,有些甚至得到了世界的认可,它们的开发都是持续了几年,十几年的.其中最有名的是Linux Deepin/UOS,Ubuntu Kylin(优麒麟),NeoKylin(中标麒麟,国内保密要求高的企业和部分广泛使用).这些系统有的尝试万物互联,有的优化PC体验,有的可以替代安卓,但它们都明确说明了自己从哪来,而且就算美方制裁"卡脖子",它们也能迅速发挥作用.有些系统已经达成了"替代Windows"的能力(指的是操作感,单纯替代Windows现在Wine就能部分实现).

有些国产操作系统,甚至真正达到了脱离谷歌体系,完全避免了卡脖子问题,但在国际市场上被谷歌盯上,反将一军,加之生态跟不上而滑落的。比如阿里的YunOS

华为所谓"不花钱的水军"如此宣传一个"站在巨人肩膀却说自己没站"的操作系统,是对国内开源者信心的重大打击.如果华为方不加干预,未来只会出现更多的"鸿蒙"行为,它们可能是像鸿蒙一样宏自研,也有可能是像"中芯"一样,套个皮打口水战.

况且,华为的虚假宣传不是一天两天,从最开始被诟病的"PPT系统",它就在利用自己当前营造的民粹氛围,漫天撒谎,偷换概念,打压友商,为自己牟利.我对华为的研发能力充满信心,但对那些"没收钱的水军"带来的民粹和反智,以及华为方并未下场辟谣充满失望.

[del]好了,行走的 50W 自暴了,你们可以开搞了.[/del](删除原因:过激言论)

--------------------------------------------------------------------------------------------

在这个文章发布后,我又用了两个月去持续汴京,最后有一个意外收获说一说。某答主指出,谷歌是可以通过派遣间谍等方法,去刷掉硬件层系统的,虽然它跟我们用的操作系统不一样,但破坏性更大。其他有营养的我都填进文章里了,剩下大是大非谈科学的乐子,我也不打算放。

顺便说一下,观网可能在话题按钮上,用了默认设置,我现在用的网页护眼插件会把所有背景色改成绿色,结果就是我不知道选没选话题.

顺便,50℃的两杯水加在一起,热量上可能相当于一杯100℃水,但实际温度是低于50℃的,我硬件领域学的奇差,这方面不多参合。

全部专栏