There are probably several important caveats to this research, but I'm guessing Smash Bros. deep learning papers are going to be extremely common on arXiv from now on.
For the inaugural Tech Specs Podcast, I'm joined by Brandon Chester, former Mobile Editor at AnandTech. Topics include: Google's Fuchsia, the Samsung Galaxy S8, the LG G6, a tiny bit about the iPhone 8, OLED design considerations, CES, and Apple going UHD.
You can download the Tech Specs Podcast on iTunes and Google Play Music.
1) License Dolby Vision for HDR. (This is optional, but I imagine Apple will push DV when all is said and done if they care about quality.)
2) Re-enable HEVC decode in future shipping silicon (likely in an existing SoC).*
3) Support HDCP 2.2 output.
4) Launch UHD iTunes. Apple would certainly have been working on encoding a UHD library and providing the necessary infrastructure around that for a long time.
*It's unclear if Apple has gotten any further with its licensing negotiations around the HEVC Advance issue. Perhaps there is finally licensing progress? Otherwise, AVC it is. I'm not sure, but I don't believe the UHD Alliance mandates HEVC encoding. AVC encoding would certainly be quite burdensome on bandwidth, and Apple has waited.
I will amend this post if I find any further information.
Since writing my last piece, some Googlers reached out and said my assessment was largely correct. The Andromeda part specifically (what the name entails) was fairly inaccurate, though, so I will try to rectify that.
Based on code like this, it looks like Andromeda might be tied to free-form window mode for laptops/2-in-1s and possibly tablets. Thus, as I wrote in my initial article, Andromeda + Fuchsia might launch initially only as a laptop platform. I think the app “chrome” will probably look like Android (because they will be Android or eventually Flutter apps), but with floating windows and elements of or even an overall UI similar to Chrome OS. Supported inputs would be mouse or trackpad and keyboard, and possibly touch. Not wildly different from Chrome OS today, in other words. This may also explain the “Chrome OS will merge into Android” claim originally made by the Wall Street Journal. The underlying OS will still be Fuchsia, though.
For those wondering about ARC, it was kind of a failed experiment. It sort of worked, but didn’t prove to really be a workable solution. I really don’t want to get into this any further here. And as stated before, NaCl looks dead.
Instead, I think for all Fuchsia devices, the Android API and runtime will continue to function as before, except now the underlying OS will be Fuchsia, and the kernel will be Magenta, not Linux. And then there would also be Mojo, Flutter, etc. at least starting on Andromeda devices. It’s hard to imagine pushing both the Mojo and Android APIs forever, though. Android will likely gradually have to fade away (over many, many years).
Back to the more important point: yes, Fuchsia will be Google’s new OS underpinning all its consumer devices eventually. I think both a “Pixel 3” laptop (or whatever this hypothetical product would be called) and the Pixel 2 smartphone will probably run on Fuchsia, but I make zero promises as to anything shipping at any particular point in time, because I have no idea. Still, that is my suspicion based on public commits.
And again, if Google doesn’t break compatibility with the Linux user space, yes, it really can swap out the Android kernel (Linux) for Magenta/Fuchsia, and leave the Android API in its place. Standards like POSIX do exist, after all. Here is some code pointing to exactly that.
And here as well is some “proof” about Fuchsia replacing Linux (in extremely deliberate scare quotes):
Sure sounds like Fuchsia will run Android apps on smartphones to me! (Yes, engineers working on ambitious special projects love to make witty references, and I think these Apple-related ones are really classy and ace.) Andromeda also happens to be a type of Fuchsia plant, which may be a coincidence. I remember the Purple reference from last year, but didn’t know what Pink referred to at the time. And I never thought to connect these references to Fuchsia running Android apps on a phone. Major kudos to Zargh for connecting the dots! (Click the links for his explanation of the references in greater detail, but I don't really want to draw even more attention to the engineers for the sake of their privacy.)
And as someone on Hacker News once again commented: “ANDROid + chROME + DArt = ANDROMEDA?”
Lastly, I will again note efforts such as A/B (seamless) updates that Google added in Nougat, which may help out with the Fuchsia transition. Crazier things have happened. Samsung once migrated Galaxy Gear owners from Android to Tizen, for one.
To clarify: I unfortunately used Andromeda equivalently with Fuchsia in this article. Andromeda could refer to combining Android and Chrome OS in general, but it will be built on top of the same OS for phones, laptops, etc. - Fuchsia. I make no claims about what the final marketing names will be. Andromeda could simply be the first version of Fuchsia, and conveniently starts with "A." Google could also market the PC OS with a different name than for the mobile OS, or any number of alternatives. I have no idea. We'll see. Please replace Andromeda with Fuchsia in your head while reading this article.
I decided to dig through open source to examine the state of Google’s upcoming Andromeda OS. For anyone unfamiliar, Andromeda seems to be the replacement for both Android and Chrome OS (cue endless debates over the semantics of that, and what it all entails). Fuchsia is the actual name of the operating system, while Magenta is the name of the kernel, or more correctly, the microkernel. Many of the architectural design decisions appear to have unsurprisingly been focused on creating a highly scalable platform.
It goes without saying that Google isn’t trying to hide Fuchsia. People have clearly discovered that Google is replacing Android’s Linux kernel. Still, I thought it would be interesting for people to get a better sense of what the OS actually is. This article is only intended to be an overview of the basics, as far as I can comment reasonably competently. (I certainly never took an operating systems class!)
To my naive eyes, rather than saying Chrome OS is being merged into Android, it looks more like Android and Chrome OS are both being merged into Fuchsia. It’s worth noting that these operating systems had previously already begun to merge together to an extent, such as when the Android team worked with the Chrome OS team in order to bring Update Engine to Nougat, which introduced A/B updates to the platform.
Google is unsurprisingly bringing up Andromeda on a number of platforms, including the humble Intel NUC. ARM, x86, and MIPS bring-up is exactly what you would expect for an Android successor, and it also seems clear that this platform will run on Intel laptops. More on this later.
My best guess is that Android as an API and runtime will live on as a legacy environment within Andromeda. That’s not to say that all development of Android would immediately stop, which seems extremely unlikely. But Google can’t push two UI APIs as equal app frameworks over the long term: Mojo is clearly the future.
Ah, but what is Mojo? Well it’s the new API for writing Andromeda apps, and it comes from Chromium. Mojo was originally created to “extract a common platform out of Chrome's renderer and plugin processes that can support multiple types of sandboxed content.” It seems to have enabled Android apps in Chrome OS, and now it will serve an even more extensive role as the developer API for Andromeda. (Sidenote: as far as I can tell, Native Client is well and truly dead. Pour one out for the valiant effort that was NaCl.)
Mojo in Fuchsia features intriguingly extensive language support. C/C++, Dart, Go, Java, Python, and Rust all have bindings to Mojo. I am guessing that C/C++ is for native development, Go is for networking, Java is for Android, Python is for scripting, and Rust is for writing portions of the kernel. (Or perhaps Rust's usage is minimal, suggests a commenter on Hacker News.) Mixing and matching languages aside, the main UI API is based on, yes, Dart.
Flutter is an existing Google widget framework for apps written in Dart, and it has been repurposed to become the UI framework for Andromeda. Flutter includes a series of Material Design widgets and was engineered to render apps up to 120fps.* I imagine Andromeda’s standard UI components will look similar if not identical to those of Android. A physically based renderer, Escher, is apparently being used to render, well, material elements and shadows in a high quality manner.
I have very strong reservations about Dart as the language of the primary platform API, but it’s best to wait for the fully revealed details before forming an opinion. The reason for Dart is obvious, however: to enable a cross-platform app framework. The pitch will clearly be that developers can write a Flutter app once and have it run on Andromeda, Android, and iOS with minimal extra work, in theory. (Flutter does not target the web.) Even if Andromeda is its full replacement, Android will be a separate developer target for many years given its gigantic installed base.
Andromeda's actual app runtime is called Modular, “a post-API programming model that allows applications to cooperate in a shared context without the need to call each other's APIs directly." To do this it uses Mojo inter-process communication (IPC) messages, which are exchanged via low-level primitives in the form of message pipes (small amounts of data), data pipes (large amounts of data), and shared buffers.
I'm not technically knowledgeable enough to understand how the various languages interface over these IPC calls, and what exactly that enables. The IDL used is the Fuchsia Interface Description Language (FIDL), “an encoding format used to describe [Mojo] interfaces to be used on top of Magenta message pipes. They are the standard way applications talk to each other in Fuchsia.” Right now at least, only C/C++, Dart, and Go have supported bindings. Dart is thus the main platform language. (My understanding is that Go is not exactly ideal for writing UI apps.)
Observers have naturally wondered for years if Google would ever unify Android and Chrome OS, in line with Sundar's obvious desires. Despite some questionable half-measures along the way, this will now finally take place. Andromeda will immensely help Google bring together and unify a broad array of in-house technologies, beyond just its two consumer OSes.
Andromeda clearly serves Google’s own purposes. The only platforms that the company really supports are the web, Android, and iOS, in that order. I think Windows support is effectively limited to Chrome at this point. Flutter exactly exemplifies this strategy. Google will no longer have to field separate Android and iOS apps and teams, and can now greatly focus its app development efforts. "More wood behind fewer arrows," in other words.
Interestingly web rendering is currently based on WebKit, but this is simply “meant as a stopgap until Chromium is ported to Fuchsia.”
There is a machine learning/context framework baked into Fuchsia, which seems conceptually similar to the existing Google Awareness API.
What happens to the Android Open Source Project and its huge ecosystem of partners?
Does this platform only ship on laptops for its initial release?
Will Android Studio be the basis for Andromeda’s IDE? If so, ouch. IDEs written in Java are wildly slow…
How do you replace the enormous contributions of the Linux kernel and Linaro? It seems like Google will preserve compatibility with the Linux user space to make its new OS a tractable effort in the first place, such as by supporting ELF binaries. But what about existing massive projects, like an Energy Aware Scheduler? Or will Google continue to utilize much of its existing Linux code for now?
Progressing the PC
I can think of more than a few (read: one hundred) reasons why you would want to replace Android. I will highlight only one: to completely rewrite the rendering pipeline. The market for Chrome OS meanwhile is of course mostly limited to education, not to diminish it. Andromeda, however, will provide a laptop OS with native apps and backwards compatibility with Android. The general UI could very well look much the same visually as Chrome OS does now. I also have to imagine the Android update problem (a symptom of the monolithic Linux kernel, in addition to market entry conditions) will at last be solved by Andromeda (minus the carriers), but one can never be too sure.
The promise of a laptop platform that can bring all the advances of mobile, bereft of the vestiges of PC legacy, while also embracing proven input and interface paradigms is extremely appealing. And since Apple has only inched macOS along in recent years despite its decades of cruft and legacy, I welcome Google’s efforts wholeheartedly. Hopefully 2017 will finally be the beginning of the new PC.
Since I've gotten a ton of questions about Andromeda being the same as Fuchsia, here are a couple clues as examples:
Via the Magenta repository: "Magenta targets modern phones and modern personal computers with fast processors, non-trivial amounts of ram with arbitrary peripherals doing open ended computation."
And here is Google working on Fuchsia bring-up on Snapdragon 835 (MSM8998), which doesn't really fit the IoT segment since mobile SoCs stipulate virtual memory and a memory management unit (MMU). If this is for tablets, why not just use Android?
A commenter on Hacker News has also pointed out an Atheros Wi-Fi driver and an Intel GPU driver. There are tons of similar examples in the Fuchsia source.
- I am not a programmer, so if anything stated above is incorrect, please, please send me corrections. I would also greatly appreciate any clarifying comments, which were one of my primary motivations for writing this piece.
- For anyone interested, I intend to write quite often about consumer technology on this blog. Topics will include hardware, software, design, and more. You can follow via RSS or Twitter, and possibly through other platforms soon.
*At least in trivial cases. I don’t see the average garbage-collected language using a virtual machine allowing for a target higher than 60fps realistically. (Yes, I know it is JIT'ed, and that the Dart team is working on Ahead-of-Time compilation.)