该内容已被发布者删除 该内容被自由微信恢复
文章于 2019年12月4日 被检测为删除。
查看原文
被用户删除
其他

鸿蒙之气

格蠹老雷 格友 2019-09-27

    公元2019年8月9日,在中国南部的著名城市东莞,在一年一度的华为开发者大会上,华为发布了一个重磅的信息,宣布了一个名为“鸿蒙”的操作系统。

    因为大家都知道的原因,很多人都认识到了操作系统对中国IT产业的重要性。于是朋友圈立刻被这个鸿蒙OS引爆了。

    坦率说,我刚听到这个消息后,没太往心里去。因为这几年,关于OS的新闻挺多的,不是一个两个。

    过了一些天,一些公众号的文章出来了,很多人开始争论什么是微内核。我草草浏览了一下,立刻不想继续读了,因为很多人根本没搞清微内核的本质。简单来说,微内核的最关键特征是内核运行在独立的地址空间里,即使和驱动程序通信都是跨地址空间的。

    又过了一些天,一位好朋友发了一个链接给我,说是鸿蒙OS的开源代码,想请我看一下,分享一下我的看法。这个是让我心动的,但是因为太忙还是搁置了。

    又过了一些天,格友群里又有朋友希望我分享一下对鸿蒙OS的看法。

    还是莱布尼茨的那句话:“不发生作用的东西是不会存在的”。我终于被影响了,想格一下鸿蒙OS。

    

    按老雷的风格,当然要从代码层面着手,擅于讲PPT的人太多了,何必用老雷啊。

    在GitHub上搜索HarmonyOS,发现65个项目。     

    虽然第一个搜索结果的粉丝最多,但从名字来看不像是官方版本,于是我便选择了第二个。从第二个的路径来看,有点像是huawei-iot部门的官方站点。

huawei-iot/HarmonyOS

    于是我下载了这个项目的master代码,在src子目录下有两个子目录:

    浏览这两个目录里的代码。

    在LiteOS子目录下,里面确实是华为的代码,也确实是个OS,只不过太简陋了,是针对ARM M系列处理器的。所谓ARM M系列处理器,它们的最大特征就是没有虚拟内存支持,就是单一的一个地址空间,所有东西都跑在那一个平坦空间里面。

    LiteOS有多任务支持,但是看起来如此的童年:

/* USER CODE BEGIN 0 */

void task1(void)

{

int count = 1;

while (1)

  {

printf("This is task1,count is %d\r\n",count++);

LOS_TaskDelay(1000);

  }

}

UINT32 creat_task1()

{

    UINT32 uwRet = LOS_OK;

    TSK_INIT_PARAM_S task_init_param;


    task_init_param.usTaskPrio = 0;

    task_init_param.pcName = "task1";

    task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)task1;

    task_init_param.uwStackSize = 0x200;


    uwRet = LOS_TaskCreate(&g_TskHandle, &task_init_param);

    if(LOS_OK != uwRet)

    {

        return uwRet;

    }

    return uwRet;

}

    这就是让万众空巷的鸿蒙OS么?绝对不是啊。

    再看harmony子目录,里面居然是.Net的代码,作者也不是华为。于是这个项目进入了我的黑名单。

    

    再继续看搜索结果中排名第一的吧。它有74次提交,让人感觉有点靠谱。

但是看文件内容,居然还是刚才看到的那个LiteOS。且看目录结构:

继续浏览源代码,还是刚才那么童年,且看Idle线程的工作函数:


LITE_OS_SEC_TEXT VOID osIdleTask(VOID)

{


    while (1)

    {


    }

}


    什么时代了,能这么空转么?不要节能进C state么?


    回过头来看那70多个提交,倒是挺有意思的。

    在8月13日,一位名叫haxianhe的同行把下面的这句话:

鸿蒙OS支持多终端的开发IDE,支持多语言统一编译。也就是开发者可以一次性的生成在不同类型的终端中运行的APP。这个策略是和鸿蒙的跨多终端部署的策略紧密相关,如果相同的应不同的终端都需要重新编译适配,那么这个对开发人员典型是不友好的。

    修改为:

    鸿蒙OS支持多终端的开发IDE,支持多语言统一编译。也就是开发者可以一次性的生成在不同类型的终端中运行的APP。这个策略是和鸿蒙的跨多终端部署的策略紧密相关,如果相同的应不同的终端都需要重新编译适配,那么这个对开发人员典型是不友好的。

    其实只是改了一个错字。可是,改了之后也还很不通顺。特别是最后一句:那么这个对开发人员典型是不友好的。

    有人说,方舟编译器可以把PPT编译为机器码,难道这个文档也是方舟编译出来的么?

    继续浏览其它提交,还有一个很有意思:

    又是改文字,把交通大学的拼写纠正了一下。    

    于是这个项目仓库也进入了我的黑名单。


    搜索互联网,知乎上有同行在讨论鸿蒙开源的问题,一致的意见是GitHub上的代码都是假的。没想到GitHub这样以奉献智慧为主题的地方也有如此多的假冒伪劣,污秽不堪,多么丑陋的世界啊。

    还记得几年前看到有个国内的同行把微软的WRK源代码放到了GitHub上,我还特意联系他,建议他删除。

    

    没有找到源代码,那么只好放弃了源代码这条路,同时也让我开始怀疑有关的报道,不能轻易相信。能相信谁呢?看8月9日当天的录像吧,这是众目睽睽之下的,是可信的。

    于是,特意抽出了时间,看8月9日HDC2019的会议录像。

    录像质量很好,图像绚丽,声音清晰。给我的第一个印象是会场很高大上。


    一点铺垫后,便进入了操作系统这个正题,但是在主角出场之前,先介绍了一下现有OS的问题。比如说安卓使用的Linux内核代码庞大冗余。

    再比如,操作系统与硬件绑的太紧,应用不能共享。

    也介绍了很多厂商都在研发新的OS,但是都困难重重。

    讲到这里,会议系统的“弹幕”发言里有人说“没有说到任何实质内容”。

    于是,主角出场了,Harmony OS。

    

    鸿蒙的意思是混沌初开,Harmony的意思是和谐。

    接下来,讲者介绍了鸿蒙OS的很多优点。主要是围绕微内核展开的,比如内核的安全性更好,不容易被root等,难怪后来朋友圈里展开了一系列关于微内核的讨论。

    还介绍了开发工具,特别强调了多语言支持,也就是前面那段有错别字的文档所描述的,开发者可以使用各种编程语言,最后都可以编译为在鸿蒙OS运行的代码。

坦率说,这个思路一点不新鲜啊,微软当年构建Windows Vista的宏伟蓝图时就说过无数遍了。后来Vista有多惨大家都看到了。

等了许久,终于看到了我希望看到的架构图。

   这个架构图或许是我们今天从华为外部能看到的关于鸿蒙OS的最深入技术资料了,特意放大关键部分。

    最下面的是所谓的微内核,目前列出了三种:Linux、鸿蒙微内核和我们前面提到过的LiteOS。怎么有Linux呢?此处就不加评点了,大家看了后可能心里都明白。

    内核上面是基础服务,应该就是演讲中所谓的外核。如果真的使用微内核架构的话,这一部分应该包含设备驱动程序、文件系统等基础服务的。可是现在没有,因为Linux里提供了。

    演讲的末尾还提到了鸿蒙OS的简要历程。主要的时间点是:

    2017年鸿蒙内核1.0

    2018年鸿蒙内核2.0

    2019年鸿蒙OS 1.0

    2020年鸿蒙OS 2.0

    2021年鸿蒙OS 3.0

    在演讲的末尾,宣布了两个字:开源

    

    但是没有宣布开源的时间,一个多月过去了,GitHub上的假开源项目得到了13K的星星,出尽风头,可是真的开源项目还不知道在哪里。


    开发一个新的内核太难了,尤其是在今天这样的时代。


    鸿蒙让很多人激动不已,甚至令全球瞩目。看到很多国外的媒体也争相报道这件事,说中国有了可以取代安卓的操作系统。可是老外不懂得,在中文里,鸿蒙的本来意思就是一股气,而且是浑浊之气。


***********************************************************

正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生

欢迎访问http://001001.org/gedu/了解软件调试高级研习班的最新信息

或者关注格友公众号

文章已于修改

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存