软件工程2021:第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统 (20分)
- 开发背景:
数字化新时代以及物联网新时代的到来对操作系统提出了新的要求,中国急需续独立自主的研发操作系统,同时网络安全威胁的高发趋势,亟需一个足够安全的系统进行保障。
- 需求:
今年6月4日早间,华为发布徐直军签发的《关于规范HarmonyOS沟通口径的通知》。通知对“鸿蒙操作系统”由于缺乏规范的表述和统一的口径,导致内部理解不一致、对外说法不一致,容易引起混淆,徐直军做出了解释说明。
徐直军称,鸿蒙操作系统是华为研发的面向万物互联时代的全新的、独立的智能终端操作系统,为不同设备的智能化、互联与协同提供统一的语言。
鸿蒙操作系统是一套可以满足大大小小设备需求的操作系统,可以实现设备在系统层面融为一体、形成超级终端,实现设备之间硬件互助、资源共享。对于开发者而言,也可以实现一次开发,多端部署。
此外,徐直军在文件中还表示,未来华为将持续推动发展鸿蒙生态,也将持续加大对全球开发者的支持。
由此可见,此次的鸿蒙操作系统在需求方面可以满足绝大部分设备,这很值得期待。
- 开发历史:
2012年,华为总裁任正非表示:“华为做终端操作系统是处于战略的考虑”,鸿蒙操作系统的概念首次出现在大众视野。
2016年5月,鸿蒙正式在华为公司的软件部内部立项并开始投入研发,吹响了研发鸿蒙操作系统的号角。
2019年8月9号,华为正式发布了HarmonyOS 1.0,该系统率先部署在智慧屏上。
2019年8月10日,(原)荣耀正式发布荣耀智慧屏、荣耀智慧屏Pro,搭载鸿蒙操作系统。华为消费者业务CEO余承东在发布会上宣布鸿蒙将进行开源。
2020年9月10日,华为发布HarmonyOS 2.0。相较于HarmonyOS 1.0,此版本主要包含三个方面做出重大提升:分布式的软总线、分布式的数据管理以及分布式的安全,这三点将HarmonyOS的分布式能力提升到了另一个层次,此版本可用于大屏、手表和车机。
2020年12月,华为发布面向开发者提供的手机版本HarmonyOS 2.0的Beta版本,开发者可以访问华为开发者联盟官网,申请获取 HarmonyOS 2.0手机开发者Beta版升级。
2021年6月2号,华为发布可以覆盖手机等移动终端的HarmonyOS 2.0。
- 应用场景:
余承东成鸿蒙系统在安卓版设备上投入商用,用于支付、人脸识别、指纹这种高安全级别场景”,还有智能家居方面也将广泛应用鸿蒙操作系统。
- 发展趋势:
从目前情况来看,鸿蒙也面临着重大机遇:一是5G的兴起,万物互联时代已然要来,但是旧有的安卓与iOS却没有完全适配,多终端的适应性、连接性、便携性等都无法保证。第二则是美帝不断的制裁,让国产的手机厂商意识到天下没有免费午餐,因此在追求独立自主的系统方面的愿望与诉求格外强烈。
相信随着科技的日益发展与厂商们的精诚合作,鸿蒙系统或将有一天成为新的操作系统。
二、关于鸿蒙是否套壳的争议 (20分)
- 什么是创新:
创新是指以现有的思维模式提出有别于常规或常人思路的见解为导向,利用现有的知识和物质,在特定的环境中,本着理想化需要或为满足社会需求,而改进或创造新的事物、方法、元素、路径、环境,并能获得一定有益效果的行为。
而关于鸿蒙是否套壳的争议问题中,之所以鸿蒙OS系统可以兼容安卓软件,是因为鸿蒙系统的很多代码是基于AOSP的,即安卓开源项目,任何组织和个人都能够从这一社区中使用安卓系统的基础源代码,而这一社区的安卓代码并不全是谷歌写的,而且华为还有意识的在“去谷歌化”,华为鸿蒙OS系统负责人王成录已经表示,今年10月份,鸿蒙OS系统将几乎没有来自AOSP社区的谷歌贡献代码。
而且华为公司的鸿蒙OS系统中还有着自己的Openharmony(开源鸿蒙),人民日报很形象地用“毛坯房”和“精装房”来对鸿蒙OS系统中的开源鸿蒙进行了比喻,将原本许多普通人不好理解的内容通俗易懂的说了出来,而伴随着人民日报所给出的答案,关于鸿蒙OS系统的争议也因此结束,鸿蒙OS系统真的不是套壳安卓。
人民日报关于鸿蒙OS系统的还有一个非常准确的看法,那就是鸿蒙OS系统并非只是在手机上与苹果、安卓一较高下,华为的目标是打造一套能在手机、汽车、家电、智能穿戴等设备上通用的系统,所以鸿蒙OS系统的未来潜力非常大,不得不说人民日报对鸿蒙OS系统的判断确实精准。
所以,鸿蒙操作系统的出现在很大程度上实现了创新。
- 代码复用与创新的关系:
代码复用有两个方式:继承和复合。继承分为public继承和private继承,public继承是继承接口,也就是父类提供的接口,子类承若仍然提供,内部有可能修改实现,子类与父类是IS-A关系。private继承是继承实现,父类提供的接口,子类不再提供,子类与父类不是IS-A的关系,不满足里氏代换,private表示的意义是,根据某物来实现。复合可以分为关联,聚合,组合。关联是一对一的关系,聚合和组合都是多对一的关系,但二者的紧密程度不一样。举例来说,大雁聚合成雁群,翅膀和脚组合成大雁。复合表示的意义也是,根据某物来实现。更合理的说法应该是,委托某物去做某件事。关联与依赖不同,关联是一个对象持有另一个对象的引用,而依赖则是,别人依赖我,我把自己作为实参传递给别人使用。
有人认为鸿蒙操作系统是对安卓系统的套壳,事实上是在安卓的基础上更好的发展并创造一个全新且高效的操作系统,同时对于很多程序员而言,代码复用可以大大减少了创新项目的开发周期和成本,更可以把精力放到创新所需要的其他方面。所以,适量的代码复用可以促进创新的发展,创新也给予了被复用代码的新发展方向,从而给予了旧代码新的“生命”。
三、代码风格分析 (60分)
- 好的代码风格1:
代码示例:
enum hks_init_data_type {//初始化数据类型
/* all zero */
HKS_INIT_DATA_TYPE_ALL_ZERO = 0,
/* all one */
HKS_INIT_DATA_TYPE_ALL_ONE = 1,
/* random */
HKS_INIT_DATA_TYPE_RANDOM = 2,
HKS_INIT_DATA_TYPE_MAX = HKS_INIT_DATA_TYPE_RANDOM
};
分析:用来初始化数据类型的共用体,将不同情况的数据进行初始化。注释很详细代码较为简单易懂。
- 好的代码风格2:
struct hks_aead_operation {
const mbedtls_cipher_info_t *cipher_info; //加密信息
mbedtls_gcm_context gcm; //gcm密文
mbedtls_ccm_context ccm; //ccm加密
uint32_t core_alg; //核心进程
uint8_t full_tag_length; //标记位的最大长度
uint8_t tag_length;//标记位的长度
};
struct hks_aead_data {
uint8_t *nonce; //当前即时数据
size_t nonce_length; //即时数据长度
uint8_t *additional_data; //additional数据
size_t additional_data_length; //额外附加数据的长度
uint8_t *ciphertext; //密文
size_t ciphertext_length; //密文长度
uint8_t *plaintext; //原文
size_t plaintext_length; //原文长度
};
分析:此段代码中用到aead加密模式,aead是一种同时具备保密性,完整性和可认证性的加密形式。 是一种单纯的对称加密算法,需要在单纯的加密算法之上,加上一层验证手段,来确认解密步骤是否正确。此段代码中注释详细,并且代码加密过程完整,安全性较高。
- 不好的代码风格1:
if ((pstZ->pstParent == pstNilT) && (pstZ->pstLeft == pstNilT) && (pstZ->pstRight == pstNilT) && (pstTree->pstRoot != pstZ)) { return; }
分析:此段代码中if语句下的条件较多且放在同一行,读起来不太直观,可以将各个条件分行写。