On Github nickdesaulniers / Convergence
Open Source Zealot at Mozilla
Have you ever looked at your desktop and thought all of this can be done in JavaScript?
Is the browser the first application you find yourself launching on boot?
Can I trust an executable that I've downloaded from the Internet?
Can I trust that this game is not mining bitcoins without my consent ? (Denial of Service)
Can I trust that I'm downloading what you say I'm downloading?
If your software depends on bundling for distribution, then it is not legitimate software.
Key design goal of Chrome.
Coming to Firefox Nightly. Try it out File > New e10s Window or set the browser.tabs.remote preference to true in about:config.
Trust needs to be revocable when broken.
Ideally, we want informed consent.
End User License Agreements, Terms and Conditions, and Privacy Policies mean well, but ultimately are failures.
What kind of nefarious things does the OS let my applications do? With great power comes great responsibility.
We should be empowering users to provide informed consent.
Should we allow any application permission to touch the filesystem?
Should we allow any application to establish connections to hosts other than the one I navigated to?
Unixes implement user based permissions.
HTML5 implements application based permissions.
What we're looking for are API's that empower us as developers, but protect users from malice.
Wont this additional layer of abstraction affect performance?
Why do we have virtual memory?
Why do we have CPU modes?
Why do we have pointers?
There will always be tradeoffs between additional layers of abstraction and performace.
As computing power increases, the disadvantages of additional abstraction decrease.
JavaScript engines have gotten over 100x times faster since 2006.
Are we fast yet?My existing C/C++ codebase is pretty fast, can I run that in the browser?
Very low overhead: 5-10% slowdown.
Compile to a subset of LLVM IR which is translated on the client to a NaCl executable.
LLVM IR is a compiler IR [not a VM]
Easy to support if you ship an existing browser engine with Pepper API support, otherwise it requires duplication of lots of undocumented Chrome behavior.
Indeed JavaScript is a weird language, but most other languages can be compiled to it.
Swap out LLVM's codegen with our JS codegen!
Without OS support for allocating exectuable memory, it's not possible to have a competive JavaScript engine (no JIT).
Most APIs are in the Stable draft (Last Call) of W3C standardization process.
Browser API
Bluetooth API
Calendar API
Network Interface API
Media Storage API
Secure Elements API
Device Capabilities API
System Settings API
Idle API
Execution Model
Security Model
Alarm API
Contacts API
Messaging API
Telephony API
Raw Sockets API
Bluetooth API
The next forefront of competition between browser vendors.
We haven't won yet, but we're showing viability for a novel concept.
What would a computing environment encapsulated within a browser look like?
Nick Desaulniers
@LostOracle on Twitter
\n on irc.mozilla.org
nickdesaulniers on GitHub
nickdesaulniers.github.io -> blog