横浜Androidプラットフォーム部 第40回勉強会に参加してきた #yapf

初参加だったけれど良い雰囲気の勉強会でよかった。いろいろ聞けたのでまとめる。



「横浜Androidプラットフォーム部」とは

公式サイトより。
横浜 Android プラットフォーム部 (通称:横浜PF部) は、Androidのポーティングや、Native側のFrameworkについてコードリーディングを行ってプラットフォームへの理解を深め研鑽を積む物好きのためのコミュニティーです。
Android含め、モバイルOSプラットフォームについての情報交換や勉強会をしているようです。約3年ぶりに再開するとのことでしたので、初参加してきました。今日はその勉強会のメモと感想。



1. OreoのHIDL


Oreoから入ってきたTrebleという仕組みの要であるHIDL(HAL Interface Definition Language)について、実際の商品開発でハマった実例(?)を示しつつ、HIDLとはどういうものかを発表されていました。ちょうど同じタイミングで似たようなことをやっていたので、共感しつつも大変参考になりました。

  • HIDL
    • HAL Interface Definition Language
    • Treble(AOSPだけ独立してOTAで書き換えたいやつ)を実現する要の1つ
    • OreoからTreble準拠が必須、GSI(Generic System Image)でCTS通すことが必要
    • /system と /vendor のプロセス間通信
    • SELinux的には、coredmainと非coredomainの間のプロセス間通信
  • Oreoで直面した課題
    • coredomaiからも非coredmainからも参照されるようなモジュールはとても大変
    • (詳しい図がスライドにある)
  • 今後の課題
    • HIDLサーバとVendorモジュールはどっちかに寄せられそう
    • HIDLをつかむコンテキストとSELinuxとの兼ね合いのためのProxyサービスが必要そう


2. webOS Open Source Edition を試してみた


「webOSのオープンソース版が出てきたのでラズパイ3で動かして観察してみた」というテーマでした。webOS自体はじめて聞く単語だったので、全部新鮮でいろいろ聞くだけで面白かった。家にラズパイ転がってたのでぜひ試してみたいところ。あとGCEも。

  • webOS
    • オープンソース版が出てきた
    • ラズパイ3があれば動かせる
    • webosose.org
    • Enact: Reactベースのjsフレームワークでアプリが動く
    • Qt(きゅーと)が動いているっぽいがまだドキュメントが無い
    • ビルド環境がUbuntu 14.04。4時間半ほど。
  • ラズパイで動かす
    • USBマウス・キーボード、HDMIディスプレイ、Ethernet
    • WndowsKeyを押すと出てくるメニューが分かりづらい
    • Forumを見ると気づきが多い
  • 観察
    • 32bitカーネル、initはsystemd、busyboxベース、opensshではなくdropbear
    • YouTubeを再生しているtopの状況から、HWデコーダは使ってなさそう
    • WebAppMgr:chromiumを含む主要なUIプロセス
    • --type=zygote でzygote方式でforkしていく
    • UIクライアントとレンダラのライブラリのバージョンミスマッチを防ぐ目的


3. CMake


マルチプラットフォーム対応する上で面倒な「それぞれの環境向けのMakefiles」をサクッと作れちゃう素敵ツール、CMake。お仕事で触ったことがないので疎いのですが、様々なプラットフォームで動くライブラリを提供したりする上ではめちゃくちゃ便利なツールなんだなと理解しました。その場での実践付きで、論より証拠という感じで説得力も強かったです。

  • CMake
    • https://cmake.org/
    • プラットフォームの幅が増えて、それぞれの環境にmakeツールがあり、Makefileがある
    • 各環境でメンテナンスしなければならない
    • メンテナンスの面倒くささはプロジェクトの死
    • CMakeで解決しましょう
  • チュートリアル
    • 導入がとても楽
    • CMake自身がビルドするわけではなく、それぞれに合わせたmakefileを生成してくれる
    • ビルドはそれぞれのプラットフォームのビルドツールで
    • CTest:CMakeのテストランナーもある、CIに組み込める
  • 課題
    • 情報が少ない
    • CMakeを使いこなしているプロジェクトを参考にするのが近道:OpenCV


4. Fuchsia概略 (1)


Googleが突如公開した、どこ向けかもよく分からないFuchsia(ふくしあ)というOSについて、ドキュメントや実挙動からいろいろ探っていく感じのお話でした。Fuchsia自体は名前は知っててたまーに話題になってるな、という程度の認識でしたが、話を聞くと実に面白い。特にNamespaceの考え方は個人的には予想外で、めちゃ新鮮な感じ。Linuxコンテナがプロセスごとにできてるイメージ? これもビルドしてEmulatorが動くみたいなので、あとで試してみたい。

  • Fuchsia
    • ふくしあ
    • https://fuchsia.googlesource.com/
    • Linuxカーネルを使っていないオープンソースOS
    • GUIやアプリケーションフレームワークは持っているので、いろいろ使えそう
    • メインはDartVM、アプリとしてはGoとRustとC/C++, Javascriptで書けそう
    • repo ライクな jiri を使ってソースを取得
    • fx runでソースツリー上に含まれるQUME上で動く、GUIはエラー出てて見れない
  • Layer
    • Zircon    : OS基盤、カーネルやデバイスマネージャ
    • Garnet    : システムサービス、パッケージ管理、メディア、グラフィックスなど
    • Peridot   : マルチデバイスユーザーエクスペリエンス
    • Topaz     : Module, Agent, Shell, Runnerの4つの主要なソフトウェアカテゴリが含まれる
  • Zircon
    • マイクロカーネルとユーザー空間のシステムサービス、ドライバ、ライブラリ
    • 元になったのはLittle kernel(LK)
    • Zirconは携帯電話やPCが対象、LKにはないプロセスの概念などが追加されている
    • ZirconはCapability-based securityが採用されている
  • Fuchsia Interface Definition Language (FIDL)
    • プロセス間通信ライブラリ
  • Namespace
    • ファイルアクセスとサービス発見のための機能
    • 名前付きオブジェクトの複合階層を指す
    • "ls /" で、シェルのNamepspaceからアクセス可能なオブジェクトのリストが表示される
    • globalなrootは存在しない
    • オブジェクト名はオブジェクトをコンテナ内に配置するためのローカルで一意なラベル
    • アクセス制御もこれベース?
  • Block device
    • IPC経由でアクセス可能なユーザー空間サービス
  • File system
    • ユーザ空間に存在知る。Kernelはファイル等に関する情報を持たない
  • Ledger
    • 各コンポーネント(アプリケーション)に個別提供されるデータストア
    • ContentProvider的なあれ
    • クラウドプラバイダを介して透過的に同期される
  • Fuchsiaは20%プロジェクトではない
  • 製品発売に期待(RILがないのでモバイルからスタートではなさそう…?)


飛び込み:Qt

最後、お時間がちょっと余っていた関係で何名か飛び込みでお話されていました。その中で、「Qtってどういうものか」を中の人から説明がありました。Qtとはクロスプラットフォームで動くアプリケーションフレームワーク。最近お仕事で少し名前を聞いてたので認識はありましたが、歴史あるソフトウェアで1992年初版とのこと。「ほぼタメやんけ!!」って少しズレたところで驚いてました。「趣味Qt」なる単語が聞こえてきたので、ちょっと触ってみたい。


その他

Togetterを見つけました。



懇親会も楽しく、みなさんフレンドリーでとても良い雰囲気でした。もっと質疑とかで発言しておけばよかったなー、とか思ったり。次回は何か喋れるようにがんばりたいですね。あと名刺的なサムシングがあればよかった!

コメント