I find myself working in a Windows environment due to some temporary problems with my Linux installation. In terms of user experience Windows is not terrible. But more notable, things mostly just feel the same. My computing experience is not very dependent on the operating system… almost. Most of what I do is in a web browser — except programming itself. Probably a lot of you have the same experience: web browser, text editor, and terminal are pretty much all I need. I occasionally play with other tools, but none of them stick. Of course underlying the terminal and text editor UI is a whole host of important software — interpreters, version control tools, checkouts of all my projects, etc. So really there’s two things keeping us from a browser-only world: a few bits of UI, and a whole bunch of tools. Can we bridge this? I’m thinking (more speculatively than as an actual plan): could I stay on Windows without ever having to "use" Windows?
Browsers are clearly capable of implementing a capable UI for a terminal or editor; not a trivial endeavor, but not impossible. We need a way of handling the tools. The obvious answer in that case is a virtual machine. The virtual machine would certainly be using Linux, as there’s clear consensus that if you remove the UI and hardware considerations and just consider tools then Linux is by far the best choice — who uses Mac servers? And Windows is barely worth mentioning. I worked in a Linux VM for a while but found it really unsatisfying — but that was using the Linux UI through a VMWare interface.
So instead imagine: you start up a headless VM (remembering the tools are not about UI, so there’s no reason to have a graphical user interface on the VM), you point your browser at this VM, and you use a browser-based developer environment that mediates all the tools (the lightest kind of mediation is just simulating a terminal and using existing console-based interfaces). Look at your existing setup and just imagine a browser window in place of each not-browser-window app you are using.
I’m intrigued then by the idea of adding more to these interfaces, incrementally. Like HTML in the console, or applications lightly wrapping individual tools. IDEs never stick for me, maybe in part because I can’t commit, and also there’s collaboration issues with these tools (I’m never in a team where we would be able to agree on a single environment). But incremental decentralized improvements seem genuinely workable — improvement more in the style of the web, the browser providing the central metaphor.
I call this a Browser Desktop because it’s a fairly incremental change at this point and other terms (Web OS, Cloud OS) are always presented with unnecessarily hyperbole. What "operating system" you are using in this imagined system is a somewhat uninteresting semantic question; the OS hasn’t disappeared, it’s just boring. "The Cloud" is fine, but too easy to overthink, and there are many technical reasons to use a hybrid of local and remote pieces. "Internet Operating System" is more a framing concept than a thing-that-can-be-built. Chromium OS is essentially the same idea… I’m not really sure how they categorize themselves.
What would be painful right now? Good Javascript terminals exist. Bespin is hard at work on an editor worthy of being used by programmers. The browser needs to be an extremely solid platform. Google Chrome has done a lot in this direction, and Firefox is moving the same direction with the Electrolysis project. It’s okay to punt for now on all the "consumer" issues like music and media handling… and anyway, other people are hard at work on those things. Web sockets will help with some kinds of services that ideally will connect directly to a port; it’s not the same as a raw socket, but I feel like there’s potential for small intermediaries (e.g., imagine a Javascript app that connects to a locally-hosted server-side app that proxies to ssh). Also AddOns can be used when necessary (e.g., ChatZilla <https://addons.mozilla.org/en-US/firefox/addon/16>).
I’d like much better management of all these "apps" aka pages aka windows or tabs — things like split screens and workspaces. Generally I think using such a system heavily will create all sorts of interesting UI tensions. Which might be annoying for the user, but if it’s a constructive annoyance…
On the whole… this seems doable. It’s navel gazing in a sense — programmers thinking about programming — but one good thing about navel gazing is that programmers have traditionally been quite good at navel gazing, and while some results aren’t generally applicable (e.g., VM management) the exercise will certainly create many generally applicable side products. It would encourage interesting itch-scratching. There’s lots of other "web OS" efforts out there, but I’ve never really understood them… they copy desktop metaphors, or have weird filesystem metaphors, or create an unnecessarily cohesive experience. The web is not cohesive, and I’m pretty okay with that; I don’t expect my experiences in this context to be any more cohesive than my tasks are cohesive. In fact it’s exactly the lack of cohesiveness that interests me in this exercise — the browser mostly gives me the level of cohesiveness I want, and I’m open to experimentation on the rest. And maybe the biggest interest for me is that I am entirely convinced that traditional GUI applications are a dead end; they rise and fall (mobile apps being a current rise) but I can’t seriously imagine long term (10 year) viability for any current or upcoming GUI system. I’m certain the browser is going to be along for the long haul. Doing this would let us Live The Future ;)
Automatically generated list of related posts:
- pdb in the browser People have asked me a few times about evalexception and...
Paddy Mullen ported the rxvt terminal emulator to javascript and uses it in the browser for TerminalCast.
This seems like a mighty good starting place for an in-browser front end to a linux VM.
I’ve thought about this a lot too, and even more lately when I wish I could do more with iPad.
I keep wussing out of doing anything about this because it’s still so hard to make web applications with rich interfaces. I think we need some better tools before we really start seeing nice solutions to this problem. And I think we might have to wait a while for the browsers and standards to mature more before good tools are even possible.
Why do we need better tools? I need a respectable editor and a functional terminal; Bespin is close for an editor (and maybe was hard to implement, but so be it), and rxvt-js or some other tool have pretty much done the terminal. Building more stuff is interesting, but I don’t see why it should stop us from making the leap, nor does it seem like a big regression in terms of current UI. And I find the long-term maintainability of HTML UIs to be easier than traditional GUI UIs (but then I would, since I don’t do GUI work). Also in cases like these you can ignore some browser backward compatibility. There’s no need to support IE 6 for instance.
Also, I had forgot about this, but someone ported vi to javascript: http://gpl.internetconnection.net/vi/
Zope2 was trying to move all development to browser. They have failed. I’m not Zope expert so I might be wrong :) What you are offering is slightly different and because of that your idea might succeed. Terminal is good idea: I can still use version control, I can still use my tools (code indexing tools). Editor is problem however. I can still use my editor (Vim) in terminal but that will be slow if used over network and in that case there is no point to use browser: I can use putty from Windows. If we use browser native editor there is no guarantee that editor will satisfy everyone and each editor has its own learning curve and becomes favorite tool for developer (vim, emacs and textmate are only some examples). Again editor in JS will need to be different. E.g. I have mentioned code indexing tools (ctags, gnu id utils or my own pig (http://bitbucket.org/Dalius/pig/wiki/Home)) – there should be way to integrate with those tools. Editor must be extensible in this case.
TL;DR: If I can connect to server using SSH I don’t need dev. env. in browser.
There are two separate issues here: the Linux VM, and the browser-based interface. Both seem reasonable, but it strikes me that a better-than-browser-based interface is possible to be written.
This is in essence my situation as well; chromium, gedit and a shell… Making a web based text-editor with a shell seems like an interesting way of minimizing a “web/remote OS” to something approachable. It’s really all I need, and would leave me with … just a browser :).
This is actually what bespin could en up becoming. What I would like to see is their “terminal” being an interface to a OS level shell with all the richness of tools and control we are used to, and not just some bespin specific thing which is what it seems to be now ( I could be wrong – been a while since I had a look ).
Another important thing to me is the ability to save application states. Typically I’m in gedit with a bunch of files open relevant to a bug on a current project. It would be nice to save that application state and bring it back whenever and wherever I feel like and keep on working. This could be solved by saving browser states ( different file in different tab sort of thing and bringing that back up ), but I’d rather see 1 tab being 1 remote OS – or at least 1 editor with multiple files. Seems cleaner.
A second note would be the ability to work offline. But this can largely be solved with the storage facility being built into browsers these days.
The statement that it’s hard making web applications with rich interfaces I think i fault. With javascript libraries such as jQuery, processingjs and also taking into account the new possibilities with html5, making rich user-interfaces for the web is relatively simple compared to other approaches ( IMHO ).
Interesting stuff, drop me a line if you start up something and would like a hand :)
//Asbjørn
Working in a browser, or simply in Windows for that matter, is mostly an ergonomic issue for me. I miss the window management love from X11 WM, I miss the real command line / terminal and I always need to set up a myriad of things before it works like-it-should (even vim is msim’ified in an horrid way). A bit orthogonal, but interesting approach anyway : http://qubes-os.org/ This project tries to produce an integrated security-by-isolation Xen-VM based distribution, featuring a different VM for any different “class” of activity : web browsing, work, finance, name it.
The orbited project [0] is a server-side proxy that exposes the socket API to javascript in the browser (disclaimer: I’m the current maintainer). It’s been around for a couple of years now so it’s pretty stable and we’re working on making it easier to use. The js.io [1] project is working on javascript implementations of standard protocols that can be used both server-side and in the browser. If we’re willing to say that the right idea is to make network programming in the browser look like it does on the OS, I think this is a good start.
Not too long ago, someone put together a nice proof-of-concept [2] that connected a local browser client to the local Akonadi PIM storage service. In doing so, they hit me in the mind. It’s seems strange to think about a desktop environment implemented entirely in the browser, but it does seem possible. I’m just not sure it’s a good idea.
With regard to the Linux VM, I’m currently maintaining my development machine as a virtual machine, and I’m pretty happy with it. A nice side-effect seems to be that I can more easily separate “user” me from “developer” me. They have very different needs. Developing in a VM has had a stabilizing effect on the rest of my computing environment since I’m much less likely to hose my host OS install while doing strange developer things.
[0] http://orbited.org/
[1] http://js.io/
[2] http://steveire.wordpress.com/2009/10/24/akonadi-goes-web2-0/
Most of your desired digital eco-system can be provided on Windows by Cygwin (http://www.cygwin.org). Cygwin also has an implementation of X-Windows which gives you your connection to a headless machine accessed by network protocols. And X is much more fluid and functional than running things through a browser. It just seems like a lot of people are re-inventing everything just to say it runs through the browser.
I have to agree. I’m also actually currently working technically from Windows, but with a Linux VM. Between the amount of time I spend in a browser, Cygwin-powered X forwarding and VMWare’s Unity features, I barely notice the OS save that the UI is generally more streamlined when I come up from a linux command line.