ファーウェイのHarmony OSの技術概要

# Harmony OSとは
- ファーウェイが開発した次世代OS
- 複数デバイスを互いに接続しあうことで、リソースを共有し、スーパーデバイスを構築することが理念
- スマホ、タブレット、テレビ、腕時計、スピーカー、車、家電など、様々なデバイスに対応

# Harmony OSとAndroidとの違い

||Harmony OS|Android|
|:---:|:---|:---|
|理念|複数種類のデバイスの同時使用|単独のデバイスの使用|
|OS対象|・スマホ<br>・タブレット<br>・テレビ<br>・腕時計<br>・スピーカー<br>・メガネ<br>・車<br>・カメラ<br>・電子レンジ<br>・エアコン<br>・その他の電子機器|・スマホ<br>・タブレット<br>・テレビ|
|IDE|DevEco Studio|Android Studio|
|開発言語|・Java<br>・JavaScript|・Java<br>・Korlin|
|レイアウト開発言語|・XML<br>・HTML+CSS|・XML|
|カーネル|Linux|Linux|

# Harmony OSのアーキテクチャ
![Harmony OSのアーキテクチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/32a9291a-0ec0-50c4-67f7-2fbc969eb734.png)

Linuxカーネル層、システムサービス層、フレームワーク層、アプリケーション層で構成されます。

## Linuxカーネル層

### カーネルサブシステム
マルチカーネルが採用されます。デバイスのリソースに応じて、適切なカーネルが選ばれます。

### カーネル抽象化層
マルチカーネルをフィルタすることで、上の層にタスク管理、メモリ管理、ファイル管理、ネットワーク管理などのカーネル機能を提供します。

### ドライバサブシステム
HDFはHarmony OSにおけるハードウェアのエコシステム基礎であり、外部デバイスのアクセス機能、ドライバの開発・管理機能を提供します。

## システムサービス層
Harmony OSのメイン機能となる層であり、フレームワーク層を通してサービスを提供します。

### 基本機能サブシステムセット
分散スケジューラ、分散データ管理、分散ソフトウェアバス、アーク多言語ランタイム、ユーティリティ、マルチモデル入力、グラフィックス、セキュリティ、人工知能で構成されており、Harmony OSで動作する分散型アプリケーションに実行、スケジューリング、遷移などの機能を提供します。また、アーク多言語ランタイムはC、C++、JSの基礎ライブラリとJavaの静的コンパイラを提供します。

### 基本サービスサブシステムセット
Harmony OSが提供している基本サービスです。イベント通知、電話、マルチメディア、Design for X、MSDP & DVなどのサービスで構成されます。

### 強化サービスサブシステムセット
様々なデバイスの特有のサービスを提供します。スマートテレビ、ウェアブル端末、IoTなどのサービスで構成されます。

### ハードウェアサービスサブシステムセット
ハードウェアのサービスを提供します。ロケーション、生体認証、ウェアブル端末ハードウェア、IoTハードウェアなどのサービスで構成されます。

## フレームワーク層
アプリケーションを開発するのに必要なUIフレームワーク、アプリケーションフレームワーク、アビリティフレームワーク、各種APIを提供します。デバイスによって提供するAPIが異なります。

## アプリケーション層
システムアプリケーションとサードパーティーアプリケーションで構成されます。Harmony OSのアプリケーションは一つ以上のフィーチャーアプリティ（FA）またはパーティカルアビリティ（PA）で構成されます。

### フィーチャーアプリティ（FA）
UIがあり、ユーザーとやり取りができます。

### パーティカルアビリティ（PA）
UIがないサービスになります。たとえば、バックグラウンドサービスなどです。


# Harmony OSの特徴
## 複数デバイスのリソース共有
Harmony OSの特徴は複数デバイスのリソース共有です。それを実現する主な技術は分散ソフトウェアバス、デバイスの仮想化、分散データ管理、分散スケジューラです。

### 分散ソフトウェアバス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/831ad084-8a74-a09f-43d2-ef9be7b88bac.png)

分散ソフトウェアバスはスマホ、タブレット、ウェアブル端末、スマートテレビ、車などの通信基盤であり、複数デバイス間のアクセスに分散通信機能を提供し、複数デバイス間の瞬時接続を容易にします。開発者はビジネスロジックに集中でき、ネットワーク管理をすべてHarmony OSに任せることができます。

### デバイスの仮想化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/ec0d5e16-cbdb-f2b6-c03b-f4d4f6a1b1ff.png)

分散型デバイスの仮想化は、複数デバイスのリソース統合、デバイス管理、データ処理を実現することができ、一つのスーパー仮想デバイスに融合させます。様々な場面に応じて、最適なデバイスが選ばれ、タスクが複数デバイス間に行き来し、そのデバイスの得意な機能（表示機能、撮影機能、オーディオ機能など）を生かします。

### 分散データ管理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/5c32e4d3-8e99-1f0c-e0ad-5747a985485b.png)

分散データ管理は分散ソフトウェアバスに基いた機能であり、アプリデータとユーザーデータの分散管理を実現します。ユーザーデータが一つのデバイスに依存することがなくなり、ビジネスロジックとデータ保存が分離され、複数デバイス間のデータ処理がまるで単一デバイスのデータ処理のように便利かつ迅速になります。開発者は様々な場面における複数デバイスのデータ保存、共有、アクセスを簡単に取り扱うことができるようになります。

### 分散スケジューラ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/b1adc175-578d-8432-bb0a-eea80ad7f70a.png)

分散スケジューラは分散ソフトウェアバス、分散データ管理、分散型プロフィール等の技術に基いて、分散型サービス管理システム（発見、同期、登録、呼び出し）を構築し、リモート起動、リモート呼び出し、リモート接続、アプリケーションの遷移をサポートします。デバイスのスペックや、場所、システム状況、リソース状況、ユーザーの習慣と意図に応じて、最適なデバイスを選びます。

## 一回のみの開発で多種類のデバイスに対応
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/94ace47c-3078-6e76-b85b-ca65c4899be9.png)

Harmony OSはユーザーアプリケーションフレームワーク、アビリティフレームワーク、UIフレームワークを提供し、アプリケーション開発中における多種類デバイスのビジネスロジックとUIロジックの再利用をサポートし、一回のみの開発で多種類デバイスに対応することを実現し、開発の効率を上げます。

また、UIフレームワークはJavaとJavaScriptをサポートし、様々なUIコンポーネントを提供し、スマホ、タブレット、ウェアブル端末、スマートテレビ、車に多様なUI表示を見せます。業界主流のデザインコンセプトを採用し、様々なレイアウトソリューションを提供します。

## OSが同じなのでデプロイが簡単
Harmony OSはコンポーネント化と小型化を利用し、多種類デバイスに必要な時にデプロイする機能をサポートし、様々なハードウェアリソースと場面に適応できます。また、コンポーネントの依頼関係はコンパイル時に自動的に生成されるので、ハードウェアの性能を気にする必要がなくなり、開発の効率がさらに高くなります。

# 参考
https://developer.harmonyos.com/en/docs/documentation/doc-guides/harmonyos-overview-0000000000011903