Mozilla Chromeless 0.2
mozillalabs.com
mozillalabs.com
^ I think Mozilla called their thing Chrome for a long while.
But we still liked 'Chrome' more than the other names, and our motto is "content, not Chrome", which neatly works with either capitalization.
Mozilla's actively opposed to any form of JS/native code integration, undoubtedly because that would dilute the effective proprietary control over the Web platform that it shares with a small group of fellow browser vendors. (And maybe because it would wound the personal vanity of its senior developers.) It's already briefing friendly journalists against Google NaCl http://www.theregister.co.uk/2010/06/25/mozilla_on_jaegermon... http://www.theregister.co.uk/2011/02/18/google_releases_firs... , using comically disingenuous arguments: oh, it's just too bad that NaCl hasn't been blessed by the web standards process that we ourselves control! Opera is behaving similarly: http://www.theregister.co.uk/2010/10/01/opera_on_google_nati... .
Of course, it's another thing to extend this attitude to the desktop, where developers have plenty of alternatives to drinking the JS kool-aid. But presumably Mozilla is hoping that the accelerated-Javascript/"contemporary HTML" juggernaut will be powerful enough to sweep a good number of desktop developers along anyhow. Next Big Language and all that, after all.
As a user, I don't want to see NaCl's compile-once-per-each-architecture model become part of the web. It's true browsers oppose it out of self interest, but NaCl has its own problems that haven't been solved.
PNaCl is a good start and much more in the vein of an open web that isn't tied to a particular platform. And whatever benefits an Open Web, Mozilla will inevitably support, as it sustains their business model. NaCl doesn't do anything for browser makers, but it also doesn't help me as a user.
> And whatever benefits an Open Web, Mozilla will inevitably support, as it sustains their business model.
Mozilla inevitably supports and benefits from an Open Web only to the extent that you accept Mozilla's rather Newspeak definition of the Open Web as "a Web whose client API and runtime is under the shared control of a small group of browser vendors". If you have a less Orwellian kind of openness in mind, then it's clearly not true: Mozilla benefits from its shared control over the Web platform in largely the same way that MS benefits from its control over the Windows platform, and just like MS it has a strong self-interest in not seeing its platform "commoditised". As if that weren't perfectly clear already, then Chromeless underlines it. I assume you accept that Mozilla has a self-interest in seeing Chromeless succeed? The reason that Chromeless has a chance of hitting the big-time on the desktop is almost solely because Javascript and friends are popular on the Web client, and the ultimate reason for that is because JS and friends are bolted in and difficult to avoid on the web client.
It looks like PNaCl aims to "solve" this problem by using 32-bit-targeted LLVM... including 32-bit pointer alignment. It's not immediately obvious how portable this would be to some hardware, and more importantly I'm not aware of any plans to support anything other than x86 and ARM initially (well, and x86-64 using its ability to run 32-bit code as far as I can tell). Am I just missing something on this front?
If I'm not missing anything, then this project's main impact if it caught on would be to restrict the set of hardware on which you can access web content, which is NOT a good thing.
LLVM bytecode is 100% architecture and platform independent, unless you call into platform-specific bits or into blobs of machine code.
And if I read http://llvm.org/docs/LangRef.html correctly, some bitcode is "not supported by all targets". How is that reconciled with "100% platform and architecture independent"?
The idea is not to produce a single cross-platform binary using LLVM - let alone using GCC! - but to produce a set of NaCl binaries for common archs from your portable HLL code using a cross-platform compiler - like LLVM, or GCC - plus PNaCl (or whatever) as the wildcard. Content negotiation is your friend.
> It looks like PNaCl aims to "solve" this problem by using 32-bit-targeted LLVM... including 32-bit pointer alignment. It's not immediately obvious how portable this would be to some hardware,
shrug I haven't heard of any major problems in converting LLVM IR to decently-performing assembler in various archs, so I presume that PNaCl will be able to do okay, especially since the bar is not set very high: consistently world-beating performance is not a necessity in a backstop solution. And if you're on a new or obscure platform (or, er, IE/Windows/x86-64) you're not guaranteed the swiftest Javascript speeds either. The likely worst is that PNaCl will need a redesign: see below.
> and more importantly I'm not aware of any plans to support anything other than x86 and ARM initially (well, and x86-64 using its ability to run 32-bit code as far as I can tell). Am I just missing something on this front?
As I said in my previous post "Obviously the implementation is incomplete and immature, but Mozilla and Opera aren't even pretending that their opposition to NaCl is based on the immaturity of the implementation." Seriously, if the problem with NaCl is that it's not mature and widely ported enough yet, then there's an obvious solution to that.
But normally when you create LLVM IR you can choose what your pointer-size representation is, as I understand. Again, I could be completely off base here; I've just read some of the docs and talked to people who have worked with LLVM, not worked with it myself. Please tell me if I'm wrong!
The problem with PNaCl is not that it's not widely ported enough "yet", but rather that there are no plans for a way to run it on platforms what PNaCl hasn't been ported to. Compare this to JS, where you can get JS working on a new platform in fairly short order (e.g. by just compiling Spidermonkey, which is largely fairly portable C code and has a platform-independent interpreter). Now your new platform won't have a JIT yet at that point, so performance may not be great, but at least you'll have a fighting chance at using the web. You won't have that without a pretty large porting job if NaCl is in wide use.
I hacked up a trivial proof of concept on this branch: https://github.com/mozilla/chromeless/tree/jsctypes_play
Basically: Both can solve the same problem, but Chromeless is more powerful.
Ideally, Chromeless would allow you to take your webapp and (with minor modifications) turn it into a desktop app or vice versa.
If you want real HTML, you'll need to work out how to interact with your page from your non-JavaScript code. Two easy ways to do that: plugins and compilers.
IronPython allows you to embed Python in HTML [1] just like you would JavaScript. (A small Silverlight applet does the real work.) I haven't used this myself, so I can't vouch for how well it works in practice.
You can also write code in a language that compiles to JavaScript. [2] CoffeeScript is a popular choice, but there are quite a few others, including several compilers each for Python and Ruby. Some caveats:
* This can have performance implications if the compiler produces poorly-optimized JavaScript or compiles on the fly in the browser.
* Many of these compilers are toys, so make sure whatever you pick has seen real-world use.
* You still need to deal with JavaScript when you debug.
[0]: http://msdn.microsoft.com/en-us/library/aa970268.aspx
[1]: http://ironpython.net/browser/
[2]: https://github.com/jashkenas/coffee-script/wiki/List-of-lang...
databases, IndexedDB should "just work", and thinking exposing SQLlite is worthwhile.
only the most basic network libraries at the moment.
(yes - I remember XULRunner and Adobe AIR - but the first didn't have any usable documentation, and the later is just Flash with webkit web view + AS<->JS bridge)
I've used it in the past, but I think Mozilla has a big opportunity here as Adobe has pretty much abandoned the web desktop aspect of AIR to focus on flash/flex for mobile.
Also, Adobe removes some of the best parts of webkit like web workers and I recently found a giant performance bug in their javascript engine that only exists in AIR.
Correct me if Im wrong, can you deploy your client side web app as a desktop application without using the Titanium framework stuff?
The Titanium mobile API is basically JS bindings for Cocoa, but the desktop API is mostly OS agnostic.
In my opinion, Titanium was smart to make one version for mobile and one for desktops. Adobe should have done the same.
Looks like Air is similar to Java in that respect (or in my more cynical view, Visual Basic - but multiplatform).
Up until Craig's lawyers killed my app, I was using the flash installer that was seamless. Same sort of installation process can be seen on TweetDeck which uses AIR.