Gtk3 on a HTML5 backend
blogs.gnome.org
blogs.gnome.org
There's a guide to getting it set up still alive at http://www.csn.ul.ie/~caolan/TechTexts/Broadway.html
This was in 1996, in the X11R6.3 release ("Broadway"), the same release they came out with LBX, the low-bandwidth extension to X, so that you could run your X11 apps over a modem with reasonable throughput.
It never got much adoption. I don't really know why. My guess, though, is that it didn't address the real reasons people were moving from X11 to browser apps: server load, security, ease of administration, latency-tolerance, and ease of development.
Today, server load and latency tolerance are a lot less important than they were in 1996, because computers are a hundred times faster and hundreds of millions of people have ping times under 20 milliseconds, ten times faster than you'd get on a modem.
But security, ease of administration, and ease of development are a lot more important now than they were in 1996.
So, I suspect this won't get widely adopted, but it could go either way. I hope it does!
Perhaps you were suggesting that remotely displaying a window of, say, FrameMaker in your browser would be better done by rasterizing the application window on the same machine where FrameMaker was running, as with Xvnc, only as a browser plugin.
That is indeed a workable and fairly simple solution, but it usually uses a lot more bandwidth on the network and memory on the machine running FrameMaker than just running X11, particularly with LBX or ssh compressing the X11 protocol.
I find it perfectly readable anyway, but I'm quite sure the comment is technically right.
This is extremely useful for getting apps written for the desktop to run on the browser for remote access and virtualization.
I don’t know if there are any companies with GTK3 desktop apps that need this right now, but for the past six months I’ve been working on doing exactly the same thing for JazzScheme (http://jazzscheme.org/). JazzScheme has its own widget set and UI library that runs on top of Cairo. Instead of sending bitmap data across I’m providing a thin indirection layer on top of Cairo surface and HTML 5 canvas (they’re almost identical in terms of drawing commands).
We’re using it for a pretty involved business app that needs a desktop version. Doing a web version any other way would have been a complete nightmare.
Each toplevel window is mapped to a canvas element, and the content in the windows is updated by streaming commands over a multipart/x-mixed-replace XMLHttpRequest that uses gzip Content-Encoding to compress the data. Window data is pushed as region copies (for scrolling) and image diffs. Images are sent as data: uris of uncompressed png data.
Input is gathered via dom events and sent to the server using websockets.
This doesn't really sound that impressive. It's kind of cool and you could also do the same and port some RDP or VNC client over which would be even cooler. But I don't really feel that this is the way to go. It would be much nicer if the native HTML widgets would be used.
http://labs.qt.nokia.com/2010/06/25/qt-for-google-native-cli...
There's also the QWebClient which does not need a plugin, but also does not look very beautiful or native.
http://labs.qt.nokia.com/2009/09/18/qt-in-the-cloud-with-qwe...
You can, in theory, use the higher-level hints given at the toolkit level to optimize the bits sent for each toolkit API invocation.
Isn't this the sort of thing X was built for? Client rendering, but the underlying app in a remote server? How is rendering this in the browser more useful/cool?
(edit: typo)
* The client/server thing is reversed * X expects everything to be fully asynchronous (WebSockets get a lot of hype but they're pretty useless at this stage IMO) * XRender is a big mismatch to canvas drawing API (the old X drawing protocol is in some ways better, in many ways (esp. color) much worse)
Check out http://280atlas.com/
Additionally, I don't believe there is any good way to crawl the contents of a canvas element - the best you can get from it is an image representation as a data uri, so no text or html elements with semantic meaning.
What if the browser exposed the GTK resources and allowed web applications to render using the same visual components as native applications on the platform. That'd be sweeet.