なかしょの技術日誌

業務では非MS系のものばかりですが、ここではMS系の技術やサービスを中心に書いていきたいと思います。

Tizenの.NET対応について

5月27日の「JXUGC #23 Xamarin 無料化一周年記念勉強会!」にて、Tizenの.NET対応について登壇してきました。

jxug.connpass.com

発表した資料はこちらです。

docs.com

以下、資料の補足です。

Tizenとは?

Tizenの特徴

f:id:nakasho_dev:20170530012738p:plain

.NET対応する前のTizenはC/C++ベースとHTML5+JavaScriptベースの2つの開発方法が用意されていました。

f:id:nakasho_dev:20170530014233p:plain

TizenにはTizenコンプライアンスというものが定義されており、Device Profileの共通コンポーネントを「Tizen Common」レイヤーで管理することでDevice Profileの依存性を軽減できます。

f:id:nakasho_dev:20170530015107p:plain

アップストリーム・ファーストは素晴らしい考えだと思います。
バグを直した独自のソースを管理するのは非常にコストがかかるものです。
アップストリーム・ファーストによって、常に最新の安定板をOSS側のリポジトリから取得できます。

Tizenの状況

f:id:nakasho_dev:20170530020308p:plain

Linux Foundationの公式プロジェクト

TizenはSamsungの所有物ではなく、Linux Foundationで開発が進められているオープンソースソフトウェアです。

スマートフォン

徐々に展開先を増やしているようです。
ロシアについては断念せざるを得ない事態がありますが後述します。

スマートウォッチ

スマートウォッチはAndroidWearのシェアを上回っており、日本でも展開されているので期待が持てるのではないでしょうか。

スマートTV

スマートTVについては最近のシェアを確認できるものが見つからなかったのですが、Samsungのテレビ販売台数が10年連続世界一なことも考えると期待は持てると思います。ただし、日本はB-CASの仕組みがあり一度撤退しているので、再参入してくるかは疑問です。

車載用OS

TizenにはLiMo Foundationの流れからあるモバイル端末OSとしての役割以外に、Automotive Grade Linux(AGL)の流れからある車載用OSとしての役割も重要でした。
しかし、車載用OSについてはTizenとは異なるUnified Code Base(UCB)へ移行することとなってしまいました。Tizenの車載用OSについては現在は開発が停止しています。

TizenOS誕生までの流れ

f:id:nakasho_dev:20170531235458p:plain

この流れで注意しなくてはいけないのはSailfish OSです。
前述のロシアでTizenの展開が中止となったのはロシア政府がAndroidの代替OSとしてSailfish OSを認可したからです。

jp.techcrunch.com

ロシア以外でも中国、ボリビアなどの、Google主導のAndroidの独占に疑念を持つ国がSailfish OSに興味を持っています。
ひょっとしたら第3のOS第4のOSはTizenではなく、Sailfish OSとなるかもしれません。

weekly.ascii.jp

Tizen Assosiation

f:id:nakasho_dev:20170601002315p:plain

現在のBoard Membersは上図の通りです。 そして、Tizen Assosiationのパートナープログラムに加入している日本企業は、AccessKONAMI、NTT DATA、Panasonicなどがあります。 まだ、日本市場でワンチャンあるかもしれません。

Tizen Mobile App Incentive Program for 2017

f:id:nakasho_dev:20170601002946p:plain

Samsungがスポンサーになっているインセンティブプログラムです。
期間中TOP100を独占すれば900万ドルがゲットできるのですが、そのような状況にはなっていません。

日本での状況

f:id:nakasho_dev:20170601004453p:plain

芳しくない状況です。
特に書籍についてはGOOGLE WAVEの悲劇が思い出されます。

f:id:nakasho_dev:20170601005008p:plain

Tizenちゃん、かわいいよ、Tizenちゃん...

Tizenの初めての.NET対応

f:id:nakasho_dev:20170601005129p:plain

MonoTizen の誕生

f:id:nakasho_dev:20170601005148p:plain

Kitsliano Software社のコーポレートスローガンってカッコいいですよね。
この会社はMono for Sailfish、MonoHTML5にも着手していました。が、完成はしていないようです
MonoHTML5はTizenのHTML5実装にヒントを得ていたようです。

MonoTizen の開発延期

f:id:nakasho_dev:20170601011117p:plain

開発開始からわずか2か月で開発延期となったのは、本当に驚きです。

MonoTizen の開発延期の理由

f:id:nakasho_dev:20170601011228p:plain

Kitsliano SoftwareのメンバーはMonoTizenの開発を延期した今でもEathereumのクライアントライブラリをTizenやSailfish向けに開発しているなんて本当にLinuxが大好きなんでしょうね。

Tizen.NETの誕生

f:id:nakasho_dev:20170601012046p:plain

Tizenの.NET対応について

f:id:nakasho_dev:20170601012111p:plain

2016年11月16日にTizenの.NET対応が発表されてから定期的にPreview版がアップデートされています。

Tizenの.NET対応に最も驚いた人

f:id:nakasho_dev:20170601012757p:plain

MonoTizenのリードプログラマだったDimitar Dobrev氏がTizenの.NET対応に加わりたい旨を表明しています。
CppSharpの貢献者でありQtSharpの開発者である彼が加わることで、Tizenの.NET対応が加速することを期待しています。

なぜ.NET対応をするのか

f:id:nakasho_dev:20170601013417p:plain

Tizen ProjectではC言語ベースとHTML5ベースで開発する際の課題を.NETの採用により解決できると考えています。

Tizen.NET アーキテクチャ

f:id:nakasho_dev:20170601013806p:plain

前述のTizenの特徴で表示した図の左側に.NET関連の機能が追加されました。
TizenではMonoではなく.NET CoreをRuntimeとして選択しています。
.NET Coreを用いてTizen Platform-Specific APIはP/Invoke(プラットフォーム呼び出し)により.NETのコードから、TizenのC/C++APIを呼び出しています。
Xamarin.AndroidやXamarin.iOSと同様にネイティブの機能を呼び出しています。

Tizen Platform-Specific API 構成例

f:id:nakasho_dev:20170601021043p:plain

DevDaysのハンズオンアプリなどでみんな大好きなText-To-Speechの機能についてリポジトリを見てみると、Interopフォルダ内に「Interop.Libraries.cs」と「Interop.Tts.cs」が存在します。ここでP/Invokeの処理を実装しています。
実際にC#でのコーディング時にアプリのコードから呼び出すのはTizen.Uix.Ttsフォルダ内にあるクラスとなります。

Tizen .NET Developer Preview1

f:id:nakasho_dev:20170601022154p:plain

最初にリリースされた際の状況です。 正直、このままでは実用に耐えうるものではありませんでした。

Tizen .NET Developer Preview2

f:id:nakasho_dev:20170601022256p:plain

Preview2ではOpenGLViewが不完全とはいえ、Formsの部品は一通りそろえています。固有のAPIについても31pkgから49pkgに増えました。
SmartTV向けの開発もできるようになりTool類も充実し始めました。

Tizen .NET Developer Preview3

f:id:nakasho_dev:20170601022544p:plain

Preview3では開発環境の充実もさることながら、Tizen固有のForms部品であるTizen.Xamarin.Forms.Extensionとして、ボタン、ポップアップ、グリッド、カレンダービューなどが実装されたことが特徴です。
本来、共通部品を用意することが主目的なはずのFormsで独自部品のみ用意するとはUIをXamarin.Forms頼りにしているTizenならではかと思います。

Tizen .NETのRoadmap

developer.tizen.org

Preview3でほぼ機能は実装したので、Tizen4.0 M1 リリースに向けてブラッシュアップをしていることでしょう。

Tizenの .NET関連のリポジトリ

f:id:nakasho_dev:20170601023621p:plain

定期的にコミットが観測されており、開発は進んでいるようです。

Tizen 関連情報

f:id:nakasho_dev:20170601023814p:plain

Tizen関連のサイトのURLです。
Tizen ExpertはTizenの状況を幅広く知るために良いサイトです。

資料の説明については以上です。