The Null Device

Google Native Client

The latest experimental technology to emerge from Google's labs is something called Native Client. This is an experimental means of running web content in native machine code in a web browser. It's X86-specific (so users of PowerPC Macs and the numerous ARM-based portable devices are out of luck here), though other than that, completely portable; the binaries are in a special format, and get a limited number of system calls standardised across Linux, OSX and Windows. There is even a version of Quake which will run in a browser, in any of these systems, should you have the plugin enabled.

Of course, by now, you're probably thinking "Are they crazy? That's the worst idea since nuclear-powered airliners". Google, though, claim that they have a robust security model. The instruction set available is restricted, with constraints placed on the format of the code, allowing a code inspection process to detect any dangerous instructions. Google argue their case in a research paper; I'm not sufficiently familiar with recent x86 assembly language to verify their claims, but it looks like they certainly put some thought into it. Of course, there are a lot of very bright people in places like Russia, Romania and China who would also put a lot of thought into it, to entirely different ends, so there are reasons to be concerned.

Why are Google doing this? Well, firstly, it must be said that this is an experimental project, and not a finished product. However, I doubt that this is to allow better animated web ads. For most user interface content (video, animation, &c.), Flash and such are sufficient. Where this is a big win is in CPU-intensive processing tasks, which are too expensive to do in JavaScript (even if compiled to native code through Google Chrome's V8 just-in-time compiler) or Flash. (At the moment, with fast machines, one can just about do audio synthesis/processing like Hobnox Audiotool in ActionScript; however, this is quite expensive in terms of resources.)

Where something like Native Client would really come in useful would be for coding web-based applications that do real heavy lifting without handing tasks off to a well-resourced server or relying on them being coded into Flash; for example, image editing or video editing as a web service. Google's paper presents a diagram of how such services would look; the front end would be written in JavaScript and/or Flash, whilst the native x86 code would sit in a separate, sandboxed Native Client process, performing the gruntwork on demand: rendering graphics, processing video, synthesising sound, animating the exploding heads of zombies or whatever is required. C/C++, in this case, is kept firmly under the stairs, with the UI code being left to higher-level languages.

Of course, such an idea opens all sorts of strategic possibilities for Google; if it works, it would reduce the desktop operating system to a commodity. If any kind of application can be used as a web service, why buy a copy of Windows (or a PC with the Microsoft Tax in the price)? In fact, why bother installing a full-scale Linux? They're already starting to make PCs with cut-down instant-on operating systems (typically Linux-based) in the ROM, so that if you can't wait for your Vista box to finish booting, you can boot into the instant OS and get a web browser. Now, imagine a box like this, only with the OS being able to run web apps at native speed, perhaps in an application-oriented browser like Chrome. Could this be the much talked about "Google OS"?

There are 1 comments on "Google Native Client":

Posted by: FLou http://fafbook.com Thu Dec 11 06:35:03 2008

It should be nice to have a working X11 server available for any browser

Want to say something? Do so here.

Post pseudonymously

Display name:
URL:(optional)
To prove that you are not a bot, please enter the text in the image into the field below it.

Your Comment:

Please keep comments on topic and to the point. Inappropriate comments may be deleted.

Note that markup is stripped from comments; URLs will be automatically converted into links.