Android
ChromeOS

Android NのOS Updateが速く安全になった理由はChromeOSにあった

More than 1 year has passed since last update.

今日18日(日本時間の19日深夜)に行われたGoogle I/O 2016のKeynoteが行なわれました。その中で、Android N のDeveloper Preview 3がすでに公開されていることが言及されていましたが、このDeveloper Preview 3は非常に大きな変更でしかも個人的に非常に興味深い変更が入っていることをKeynoteの中で知りました(実際はPreview 1から入ってたそうです)。それは、

「もうOSの更新やアプリの最適化に時間を使うことがなくなる」

ということです。Keynoteの中の1時間11分57秒付近から説明されていた話になります(下図のSeamless updtes)。

Screen Shot 2016-05-19 at 13.22.29.png

Speakerは、「Androidの更新ダイアログを遂に見ることはなくなった」と言い切っていました。アプリの最適化のダイアログを見なくて良くなる理由は、JITのパフォーマンスチューニングの結果のようです。

Screen Shot 2016-05-19 at 13.23.30.png

Seamless updatesの話の中で、Speakerは「新しいOSイメージをバックグラウンドでダウンロードして、次に電源が入った時にシームレスに新しいイメージに切り替える」ということを話していました。そして、Keynoteを見ていた方は、「Like ChromeOS, ...」と言ってからその説明をしていたのを聞き逃すことなどなったですよね?

実は"Like Chrome OS,"というか、Chrome OSと全く同じ仕組みがAndroid Nで採用されていたことを、以下の記事が説明してくれていました。これは、Keynoteの最中に公開された記事です。

Android N borrows Chrome OS code for “seamless” update installation

部分的にかいつまんでみます。

中の人の証言

まず、この記事の中では、話の裏をとるために、Andriodの中の人と話したことが書かれています。というか、その会話の相手は、KeynoteでAndroid Nパートを担当していた本人です。

Before the show, we chatted with Android VP of Engineering Dave Burke. "We were kind of inspired by how our Chromebooks work," Burke told Ars. "You get a completely seamless update. You don't do anything, you just turn on your Chromebook and it's up to date." Burke clarified that the Android team took a bit more than just "inspiration" from Chrome OS, though, "We're actually using the same code, in some places, and bringing that to mobile."

「僕らは、Chromebookがどのように機能しているか、そこからインスパイアされたんだよ。Chromebookがシームレスに更新することを完璧にやってのけてることをモバイルに持ち込むために、幾つかの場所でChromeOSと同じコードを実際に使ってるからね。」

そう、ChromeOSのコードがAndroidに持ち込まれて使われている、ということのようです。

システムパーティションが2つになった

Android N will now have two system partitions. One will be "online" and used for normal system functions, while the spare one is an "offline" system partition that will sit in the background. With the previous single-partition system, when an OS update came in, the entire phone had to be taken offline for an update. The phone would reboot into recovery mode and apply the update to the system. This can take anywhere from a few minutes to a half hour—Samsung actually quotes "25 minutes" in their update UI. During this time, the user is locked out of their phone calls, texts, notifications, and every other feature of their smartphone.

今までのAndroidでは、システムパーティションは1つしかなく、OSアップデートが来た際には、スマートフォン自体をオフラインにするしか手がありませんでした。そのために、リカバリモードに入るために再起動をかけて、システムに更新を適用していきます。この更新作業の間、電話、テキストメッセージング、通知、その他すべての機能が使えなくなっていたのは、Androidユーザであれば全員知っていることですね。しかも、数分で終わらず、30分近くかかることも珍しいことではなかった、と。

しかし、Android Nからは、システムパーティションが2つになります。これだけで「もう仕組みが分かった!」とピンときた人もいるかもしれません。

バックグラウンドで行われる更新作業

With Android N's new dual partition system, the online partition keeps running while the OS update is applied to the offline partition in the background. The majority of the downtime processing can happen on the offline partition while the user is still using their device via the online partition.

Android Nの2重パーティションシステムでは、オフラインパーティションに対してOSの更新作業がバックグラウンドで行われます。その際、オンラインパーティションは動作したままです。つまり、ダウンタイムのほとんどはオフラインパーティション側で起きることになりますので、ユーザはオンラインパーティションを経由してスマートフォンを使い続けることができる、というわけです。

差し替えるだけ、の適用作業

On the next update, the OS update can be "applied" by just swapping partitions. The updated, offline partition becomes the active one, and since all the processing already happened in the background, there is no recovery mode downtime. The previously active partition becomes the offline one, and it can be brought up to date at the system's leisure (we'd guess in the middle of the night when the phone isn't active).

裏でオフラインパーティションが新しくなっていれば、OSの更新は「パーティションを取り替えるだけ」で適用されます。今までオフラインだったものをオンラインに、オンラインだったものをオフラインにするだけです。更新作業は裏で済んでいますので、リカバリモードでのダウンタイムはありません。これは、デバイスが暇な夜中に行えます。何の通知もされなければ、OSが新しくなったことをユーザは気がつかないかもしれませんね。

新しいJITでさらに速くなる

For end users upgrading from the Android N Developer Preview 3 to something else, the black "Android is updating" screen seen above should be a thing of the past. Previous versions of Android N also added a new compiler that can do JIT (Just In Time) or AOT (Ahead of time) compiling, which allows it to skip the "optimizing apps" dialog after an update and compile the apps later. With both of these changes, applying an update on Android N should be a much faster process than before—it probably won't take much longer than a normal reboot.

Android N Developer Preview 3を適用すれば、背景が黒い"Androidを更新しています"画面はもはや過去のものとなります。新しいJITやAOTコンパイルにより、OS更新後に行われていた”アプリの最適化”も省略することができるようになります。以前のAndroidと比べて、Android Nは通常の再起動と同等の速度でOS更新作業が終わるようになるはずです。

トラブルに強くなる

This dual partition system should also make updating an Android device safer. Today on Android, if something goes wrong during an update, you've ruined your only copy of the system partition. With no working system partition, your device can't boot, rendering it a useless "brick." It's not a very common occurrence, but even on Nexus devices an update goes wrong sometimes. There is no recovery option for novices—resurrecting the device involves diving into a subset of the Android developer tool package and doing some advanced command line work.

僕も経験があるのですが、System Updateをかけたら失敗し、二度とブートしなくなり、端末を交換せざるをえない状況が今まで起きていました。この事故に対処する方法はあるのですが、専門的な知識が必要になる難しい作業となります。これはキャリアがカスタマイズしているAndroid端末だけでなく、Nexusシリーズでも起き得た話です。

Now, like on Chrome OS, the double system partitions give you redundancy in the case of a failed update. While running on system A, Android will apply an update to system B. On reboot, the bootloader will swap partitions and try to boot from system B. If the boot up fails, you can just restart the phone and the bootloader will switch back to the working system A. Android can then connect to the Internet and work on fixing the unbootable partition by applying the update again.

Android Nからは、ChromeOSのように、2重パーティションシステムが冗長性を与えてくれることになります。以下のような流れですね。

  1. オンラインパーティション(System A)が生きている裏で、オフラインパーティション(System B)に更新がかかる。
  2. リブートがかかった時に、Androidはパーティションを交換し、System Bで起動しようと試みる。
  3. もし起動に失敗したら、今まで動作していたSystem Aに戻して再起動する。
  4. AndroidはSystem Aの状態であればネットに繋がった状態になるはずなので、ブートしないパーティション(System B)に対して再び更新作業を行い、問題を解決する。

とても安心感がある手順です。

デメリットもあるけど気にするほどではない?

There is naturally a worry about the storage cost of doubling up on the copies of the system partition on a device. In Android N, system partitions are stored using the highly compressed SquashFS filesystem. SquashFS is designed for an embedded system where space is at a premium, so it should help cut down on some of the storage use. How much storage this all takes in total is definitely something to investigate. We'll have to wait for a working dual-partition build of Android N for exact storage numbers.

システムパーティションを2重でデバイス内に持つために、ストレージの心配が出てきます。今までよりも倍の量が必要になるはずですので、ストレージの使用量が増えるのは当然です。しかし、容量が限定された環境を前提にして設計されたSquashFSファイルシステムの高度な圧縮率によって、それほど心配することはないかもしれません。もちろん、今後調査する必要があるでしょうけど。

まとめ

With Nexus devices and a few other flagship phones now getting updates every month, Android actually updates more frequently than Chrome OS. Borrowing Chrome OS' faster, safer, more seamless update system is nice. We just wish more devices actually had the first world problem of having to wait for an update to apply.

Nexusデバイスや他の幾つかのフラグシップモデルは、毎月更新がかかっています。これは、ChromeOSよりも頻繁です。ChromeOSの「速く、安全で、よりシームレス」な更新システムがAndroidにもたらされたことは、とても良いことですね。

・・・というわけで、簡単に内容を日本語化してみました。更新作業は「ちょっと勇気が必要なこと」でしたが、今後はそんなことはなくなりそうです。僕もChromebookを普段使っていて、OSの更新作業は全く気になっていません。同じような感覚でスマートフォンも使えるようになることに、今からワクワクしています。

もし「翻訳違ってるよ!」とかあれば、編集リクエストを気軽に送ってください!