In the last few
days Joe Hewitt has
been lamenting the state of client side web development
technologies on twitter. TechCrunch covered the progress in
their The
State Of Web Development Ripped Apart In 25 Tweets By One
Man.
Today Joe followed up with a brilliant point:
joehewitt: If CLI was the ECMA standard baked into browsers instead of
ECMAScript we'd have a much more flexible web: http://bit.ly/sLILI
ECMA CLI would have given the web both strongly typed and
loosely typed programming languages. It would have given
developers a choice between performance and scriptability. A
programming language choice (use the right tool for the right
job) and would have in general made web pages faster just by
moving performance sensitive code to strongly typed languages.
A wide variety of languages would have become first-class
citizens on the web client. Today those languages can run,
but they can run in plugin islands. They can run inside
Flash or they can run inside Silverlight, but they are second
class citizens: they run on separate VMs, and they are
constrained on how they talk to the browser with very limited
APIs (only some 20 or so entry points exist to integrate the
browser with a plugin, and most advance interoperability
scenarios require extensive hacks and knowing about a browser
internal).
Perhaps the time has come to experiment embedding the ECMA
CLI inside the browser. Not as
a separate
plugin, and not as a plugin island, but as a first-class
VM inside the browser. Running side-by-side to the
Javascript engine.
Such an effort would have two goals:
- Access to new languages inside the browser,
optionally statically typed for major performance
boosts.
- A new platform for innovating on the browser
by providing a safe mechanism to extend the browser
APIs.
We could do this by linking Mono directly into the
browser. This would allow developers to write code like this:
<script language="csharp">
from email in documents.ElementsByTag ("email")
email.Style.Font = "bold";
</script>
Or pulling the source from the server:
<script language="csharp" source="ImageGallery.cs"></script>
We could replace `csharp' with any of the existing open
sourced compilers (C#, IronPython, IronRuby and others).
Or alternatively, if users did not want to distribute their
source and instead ship a compact binary to the end users,
they could embed the binary CIL directly:
<script language="cil" source="MailApp.dll"></script>
Pre-emptive answer to the "view-source" crowd: you can use
.NET Reflector to look at the source code of a compiled
binary. If it is obfuscated, you will enjoy reading that as
much as you would enjoy reading any Javascript in the real
web.
Embedding the CIL on the browser would create isolated
execution environments for each page (AppDomain in ECMA
parlance) and sandbox the execution system.
The security model exposed by Silverlight exposes exactly
what is needed to go beyond a language-neutral runtime. The
security model distinguishes between untrusted code which is
subject to verification, strict requirements on what it can do
and limits what they can do from "platform" code that is
trusted.
Trusted platform code is granted special permissions that
untrusted code is not given. The runtime enforces that no
untrusted code can call into any security sensitive and
protected areas.
This would allow browser vendor to expose new APIs that get
full access to the underlying operating system (for example
getting direct access to special hardware on the system like
microphones and camera) while enforcing that the user code
accesses them only through safe gateways.
This is very important to allow developers to try out new
trusted APIs: new UI models, rendering systems and APIs built
entirely on the same core.
I am absolutely fascinated by the idea and I only
regret not having come up with it. We have been too focused
on the Moonlight-as-a-plugin to take a step back and think in
more general terms: how can we use the ECMA CIL engine for
*all* applications without a browser plugin.
Joe like many of us is conflicted between the power of
reach that the web has versus the polish and speed that native
GUI toolkits deliver.
Althought Silverlight provides a nice UI system inside the
plugin, Joe's point is that we need a platform in which we can
more quickly innovate new UI ideas, and probably completely
different new ideas quickly. And with the ECMA sandbox
model we can start testing new ideas without waiting for
browser vendors to add the features themselves and we can make
the integration between these plugins and the browser stronger
than they have ever been.
The plugin model does not provide the necessary tools to
drive more innovation in the web. We need a new model, and
I am ready to start prototyping Joe's idea.
The only question is what browser to target first Firefox
or Chrome.
Gestalt
Gestalt
allows developers to use the CLI inside the browser and it
shows what can be done with other languages in the
browsers. It requires Silverlight to run and the interaction
between the code and the browser is limited in the level of
integration that can be achieved via the browser-plugin
interface.
This solves only the half the problem: multi-languages and
does it in a limited way.
Resources
You can learn more about the security model
in my
previous blog post.
Our open
source Silverlight
implementation.