鸿蒙 PC 底层开发技术详解(二):OpenHarmony、HarmonyOS 与 GNU/Linux 的关系
特别说明本文所称 OpenHarmony 均指其“标准系统”HarmonyOS 特指 PC 端版本HarmonyOS 5.0 及以上。所有结论仅代表个人观点不代表任何官方定义。OpenHarmony非 GNU 系的 Linux 发行版从系统架构上看OpenHarmony 属于“Linux 内核 非 GNU 用户态non-GNU userland”的组合。它与传统的 GNU/Linux如 Debain、Red Hat有显著区别C 库使用定制版本的 musl libc而非 GNU 的 glibc。Shell默认提供 mksh而非 bash。工具集内置 toybox而非 GNU coreutils。可以这么说OpenHarmony 与 Android 类似本质上是一个去 GNU 化的广义 Linux 发行版。这从 LLVM 编译器的 Target Triples目标三元组中可以直观体现aarch64-linux-gnu(GNU/Linux)aarch64-linux-musl(musl Linux)aarch64-linux-android(Android)aarch64-linux-ohos(OpenHarmony)由于三元组中都包含linux意味着它们共享相同的内核接口规范。在工程层面为 OpenHarmony 编译程序的过程与其它 Linux 发行版基本一致# 交叉编译显式指定 target 以确保生成正确的 ABI 产物clang--targetaarch64-linux-ohos my_program.c-omy_program# 原生编译target 默认即为 aarch64-linux-ohos此时可省略该参数clang my_program.c-omy_programHarmonyOSOpenHarmony 的商业发行版HarmonyOS 是基于 OpenHarmony 打造的商业发行版。它继承了 OpenHarmony 的用户态架构和应用框架并在底层内核、安全策略以及产品定位上进行了深度定制。主要的几个改变OpenHarmony (社区版)HarmonyOS (商业版)内核Linux 内核鸿蒙内核源码属性开源闭源root 权限提供具有 root 权限的 hdc shell不提供 root 权限系统服务标准社区组件内置厂商特有服务与商业应用在操作系统领域商业发行版通常只会在社区版的基础上增加闭源组件或增强服务。像 HarmonyOS 这样对内核进行替换的做法实属罕见。这种“内核换血、接口兼容”的特殊模式构成了 HarmonyOS 独特的运行环境。从编译器视角来看尽管 HarmonyOS 已不再使用 Linux 内核但 LLVM 编译器并未为其定义独立的目标三元组。因此在为 HarmonyOS 编译程序时仍需沿用 OpenHarmony 的目标三元组即aarch64-linux-ohos。HarmonyOS 对 OpenHarmony 的兼容性尽管内核不同但 HarmonyOS 仍能够顺利运行大多数为 OpenHarmony 开发的软件。这主要基于两个核心前提ABI 兼容性鸿蒙内核在设计上实现了 Linux ABI 兼容允许针对 Linux 系统调用编写的程序直接在鸿蒙内核上运行。C 库解耦应用程序主要通过 libc (musl) 与内核交互。作为中间层libc 可以屏蔽底层内核的部分实现差异从而实现应用层与内核层的逻辑解耦。HarmonyOS 对 OpenHarmony 的不兼容性虽然实现了 ABI 兼容但鸿蒙内核并非 100% 与 Linux 内核表现一致系统标识差异uname系统调用返回的内核名称不同。部分依赖内核名称进行逻辑判断的脚本或程序在两个系统上可能会有不同的表现。安全机制增强鸿蒙内核引入了更为严格的安全特性例如二进制代码签名校验等。这也是用户在鸿蒙 PC 上运行第三方程序时频繁遇到Permission denied的一大原因。