VMware WSX TP2: Faster, Shinier, and Less Broken

A few months back, I introduced VMware WSX, a new product I’ve been developing at VMware to access virtual machines in any modern web browser without plugins. The response blew me away. News spread to Ars Technica, Engadget, Windows IT Pro, InfoWorld, and many other publications and sites.

I’m happy to announce that we’ve released another build today: WSX Tech Preview 2. You can get it on the Workstation Technology Preview 2012 forum. Just click “Downloads” and download either the Windows or Linux installers.

Like the first Tech Preview, this is a prototype of what’s to come. I’m actively working on a rewrite that will prove much more reliable, with better compatibility and room for future growth. We have a pretty good release, here, though, and I’d like to break down what all has changed.

Windows Installer

The first preview of WSX was only for Linux. I work primarily on Linux, and as such, this was my priority. While we weren’t able to get a proper Windows build ready for TP1, we now have it for TP2. So Windows users, if that’s been holding you back, give it a try now!

Better Performance

We’ve optimized the rendering to the screen. This should result in faster updates, making things much smoother, particularly on iOS. We’ve added some mobile (and specifically iOS) rendering improvements, and they really help. As we continue to evolve WSX, expect the experience on mobile to only get better.

Retina on iOS

When you go to WSX on an iOS device, you’ll see some changes. First of all, the icons will be more crisp and Retina-friendly. Second, there’s a new “Retina” button for switching the  VM into retina mode. I blogged about this a while back, and it’s finally ready to be played with. (Note: There are some occasional rendering bugs to work out.)

But wait! MacBook Pros have Retina displays too!

Speech-to-Text on iOS

You know that little microphone button on the iOS keyboard on the latest iPad/iPhones? Pressing that allows you to “type” with your voice on native applications. Now, we support it as well.

Open up an application in the VM (Word, for example), pop up the keyboard, and hit the microphone. Begin speaking, and your words will appear automatically in your application as if you were typing them. It’s fun!

Beginnings of Android Compatibility

I will warn you, this is not fully baked yet.

The main problem with Android is that most browsers, especially the stock Android browser, do not support the modern web features we need. WebSockets and fast Canvas rendering being a couple of the key issues. Those that do, like Firefox, suffer from other glaring rendering problems that make for a bad experience.

Work is being done here, though, and if you’re running on an Android browser without WebSockets, we now attempt to use a Flash shim that communicates with the server. This makes WSX semi-usable on the Android browser. However, it’s not fast, and there are input problems. In time, I hope to improve this.

Better iOS Compatibility

  • Input is much improved. Capital letters and most special symbols now work. There are issues still with international characters, though. Backspace key repeats now work, too.
  • Various fixes for things like question dialogs not appearing, username fields having auto-capitalize/correct on, and other little issues here and there.

Better Feedback

  • When a login attempt fails, you’ll see an error saying what went wrong, instead of seeing it wait forever.
  • We show a spinner now when attempting to connect to the VM’s display. This provides some feedback, especially over slower connections, and mimics what we do with Workstation.
  • Attempting to change the power state of a VM now shows a spinner on the appropriate power button. So, press Power On, and the button will spin until it begins to power on.
  • If the connection to a server drops, you’ll be notified and taken back to the Home page.

UI Improvements

  • Login pages aren’t so bare anymore.
  • The giant useless margin on the left-hand side of most pages have been removed.
  • Added a logout link! (One of our most heavily requested features.)

Bug Fixes

  • Connecting to vSphere no longer totally fails. Many users were having some problems with that, and I’m happy to say it should work better now. It’s still not meant to handle thousands of VMs, though.
  • Pressing Control-Alt-Delete now actually sends that to the VM. Sorry for all of you who couldn’t log into Windows.
  • WSX no longer disconnects when updating the screen resolution fails.
  • If you connect to multiple servers, the inventories should be correct on each. Previously, they’d sometimes show the wrong server’s inventory.

New Bugs

  • Occasionally, the screen may stop updating. We’re looking into that. In the meantime, there’s a Reload button you can press to re-establish the connection to the VM’s display.

What next?

I can’t give away all my secrets, but we’re looking into better ways of handling input in the guest (especially with touch devices), and making WSX a bit more scalable. We’ll continue to put out Tech Previews of WSX while it matures.

In the meantime, let us know how it’s working for you.

WSX: Virtual Machines in Your Browser

Updated March 13, 2012 at 10:43PM: I have a list of limitations and known bugs toward the end.

Updated March 14, 2012 at 9:30PM: I’ll be on the VMware Community Roundtable podcast at 12:00PM PST today, where I’ll be talking about WSX and jumping into a little more detail.

Updated March 20, 2012 at 10:15PM: A lot of people are confused, so I want to point out that WSX is not AppBlast. That’s a separate project with separate goals. WSX is a remote console built using the same underlying technologies as Workstation and Player. It’s also not a front-end for View. I can’t speak for any of those projects’ goals and plans.

Virtual Machines have always been a great way to work with different operating systems, carry your desktop around with you, and manage lots of servers or configurations. In the past, you’d run the virtual machine on your computer and then use a product like VMware Workstation or Player to interact with them.

In Workstation 8, we introduced the ability to share VMs across a network with other copies of Workstation, and to use VMs running on ESXi/vSphere. You could use any computer in your network to reach any other VM and to manage your servers. I covered this in a previous post, and as I said there, we were very proud of this release.

Still, the world is evolving fast, and more people are moving to tablets and smart phones. It doesn’t mean the end of desktops or servers, but it does change how people are accessing their data and applications. And their VMs.

Get to it already

Alright.

I’ve spent the past few months on a prototype, one I’m proud to say we’re shipping as part of the Workstation Tech Preview. It’s currently called WSX (name may change in time), and it brings your VMs to your tablets, smart phones, and any PC or device with a modern browser.

WSX is installed as a mini web server in your network and serves up an interface for accessing your Workstation Shared VMs and your VMs on vSphere/ESXi 5. You can power your VMs on, off, suspend them, and interact with them. All from a web browser, and all without plugins, with nothing to install on the client end.

This means that you can walk into the Apple store, pick up an iPad right off the shelf, and in less than a minute, start using your desktop back home. (Of course, provided you’ve port forwarded your WSX server so it’s accessible outside your network.)

How does it work?

WSX makes use of some modern web technologies, such as HTML Canvas and Web Sockets, along with a small but powerful server to turn your browser into a full-on remote console. The WSX server talks to your Workstation, ESXi, and vSphere instances and relays the appropriate data up to the client running in the web browser. With that data, the client can stay updated with the latest changes to the VM and offer a full display of the console. We don’t use any plugins, meaning there’s nothing to install.

It’s known to work with the latest versions of Chrome, Firefox, and Safari. It also works with the Internet Explorer 10 preview (though I’m still working on some bugs there). And for tablet users, it works quite well with the iPad running iOS 5+. Android users running Ice Cream Sandwich may get some luck with Google Chrome for Android, but I’m still working on Android compatibility.

A lot of work has gone into making this pretty fast. If you stream a 720p YouTube video inside a VM and access it from Chrome or Firefox on a modern PC, you should see near-native quality and framerates. It’s not as fast streaming to an iPad just yet, but you’ll see some impressive changes there before long.

On some modern browsers, you can even make your desktop go full-screen, just like you can with Workstation.

Note: There’s a bug on the iPad today with the on-screen keyboard where capital letters and punctuation are a bit broken. I’ll fix it!

Tell me some use cases

Sure thing.

  • You can work on your documents from your iPad from anywhere, knowing your data is safe in your network and not on some desktop streaming service company’s VM somewhere in their datacenter, not worrying about what may happen to your data if their service is down.
  • If your server is acting up while you’re at the store, you can connect to your VM from your phone/tablet and deal with it instead of rushing home.
  • Play Windows Solitaire from your iPhone.
  • Confuse people by running a VM from within a browser from within a VM from within a browser from within a VM from within a browser from ……
  • Have your presentation or demo live within a VM so that when your laptop dies at just the wrong time, you can grab anyone else’s laptop or iPad and quickly resume where you left off.
  • Have your iPad set to sync music over the network with a copy of iTunes running in a VM, and then use the same iPad to interact with that same copy of iTunes without ever involving a PC or Mac.
  • Run Windows 8 in your VM full-screen on your iPad, so you can confuse everybody.

As WSX evolves, so too will the use cases. I’m personally very curious to see how people will be using it.

Installing WSX

Right now, WSX ships with the Workstation Tech Preview for Linux installer. You’ll be asked for a port (defaults to 8888), and then it’ll install once Workstation is installed. Make sure you have the python2.6 binary installed on your system, or it won’t run! (This is a temporary limitation.)

Now there is a bug today where the installer won’t start the service for you. You’ll need to do:

    sudo /etc/init.d/vmware-wsx-server start

After that, you should be able to point your browser to http://localhost:8888/. If you want to reach your VM from outside your network, just port forward this one port in your router and you’ll be set.

You’ll log in with your system’s username and password. No need to create a new account.

Windows is another story. We don’t have a build out just yet, but stay tuned on this. I’ll make an announcement when that’s ready.

What’s the plan going forward?

I can’t speak to our long-term plans, but as I continue to work on the WSX tech previews, my main goals are to make it faster, improve browser compatibility, and make it easier to interact with your VM. This means gestures (two-finger scrolling in place of a scroll wheel on tablets), gamepad controls (play Portal 2 on your iPad!), multitouch, and whatever else we can figure out.

These are my goals, and not necessarily those of VMware’s, so don’t hold the company to anything I say here!

Limitations and Bugs

There are some known limitations and bugs in this build of WSX. Please remember, this is a new prototype, and is not a finalized product!

  • You must have the python2.6 binary installed on Linux for this to run.
  • On the iPad, the on-screen keyboard is currently a little broken when it comes to capital letters and punctuation (anything involving Shift, basically).
  • We use the on-screen keyboards on mobile devices, which don’t contain things like Control keys, function keys, etc. So for now, those keys aren’t available. Looking into proper solutions here.
  • There’s no sound. Sorry if I confused some of you! There’s some things we’re waiting for in modern browsers before we implement this. No ETA or promises from me.
  • You can run against Workstation 8 Shared VMs (I think?), but you won’t see as good performance. Same with ESXi VMs.

Feedback?

If you try playing around with WSX, I’d love to hear about it. This has been a pet project of mine for the past few months, and I’m pretty excited about it. Yes, there are rough edges that we know about and will be smoothing out as we go forward, but I think it makes for a great prototype, and certainly one I’m starting to love using.

Designing Unity: The Start Menu

Early on when we began to develop Unity for Workstation, we started to look at ways to give users access to the guest’s start menu. This seemed like an easy thing to solve at first. A month later we realized otherwise. We debated for some time and discussed the pros and cons of many approaches before settling on a design.

We had a number of technical and design restrictions we had to consider:

  • The UI should be roughly the same across Windows and Linux hosts.
  • Start menu contents must always be accessible regardless of the desktop environment on Linux.
  • Need to cleanly support start menus from many VMs at once.

Our chosen design

The design we settled on was to have a separate utility window for representing the start menu. This window can auto-hide and dock to any corner of the screen, or remain free-floating, and provides buttons for each VM. The buttons are color-coded to match the Unity window’s border and badge color. When you first go into Unity, the window briefly shows, indicating where it’s docked.

Unity Start Menu Integration

There are many advantages to this design.

  • You don’t have to re-learn how to use it between platforms or even desktop environments.
  • It’s pretty easy to get to and yet stays out of your way when you don’t need it.
  • All the start menus are easily accessible from one place.
  • The start menu buttons are color-coded to match the Unity windows.
  • Users can control whether the window is docked in a corner or free-floats on the desktop.
  • We have a lot of flexibility for feature expansion down the road.

Why not integrate with the Start Menu?

Since the first Workstation 6.5 beta, I’ve been asked why we chose the design we have instead of integrating the start menu into the notification area or into the existing Applications/Start menus. The idea to do so seems kind of obvious at first, but there are many reason we didn’t go that route.

Let’s start with the host’s Applications/Start menus. This seems the most natural place to put applications, as the user is already used to going there. We began going down this route, until we realized the problems associated:

  • On Linux, not everyone runs GNOME, KDE or another desktop environment with an applications menu supporting the .desktop spec correctly or at all. This means we’d be drastically limiting which desktop environments we could even represent applications in.
  • In the case of GNOME, it would add more clicks to get access to any application (Applications ? Virtual Machines ? VM Name ? Applications). This becomes tedious, quickly. Also, from my tests, adding entries three levels deep doesn’t always appear to work reliably across desktops.
  • In Windows, the situation is just as unclear. People tend to think that Windows only has one Start menu, but in reality, we’d have to support three (Classic, XP, and Vista). For quicker access, we’d need to add something to the root menu, and each of these start menus have slight differences in how we can do this. None of the solutions are even particularly good there, as entries may be hidden from the user to make room for other pinned applications.
  • In summary, where you go to access the start menu contents will be different not just on each OS, but across desktop environments and even different modes of the same environment (on Windows).

What about the notification area/system tray?

Another possibility that has been brought up is to use the notification area and to tie the start menu to an icon there. While this would generally work, it wouldn’t work too well.

  • On Linux, it’s frowned upon to put persistent entries in the notification area. A panel applet could work, but users would have to manually add it, and it would be GNOME or KDE-specific.
  • There’s no guarantee there even is a notification area or even a panel in Linux desktops.
  • On Windows, the icon may be automatically hidden in the system tray to make room for other icons.
  • The icon is such a small area to click on, making it annoying to launch applications quickly.
  • The icon is generally not too discoverable.

Tips and future improvements

While we’ll probably keep our current model, there are definitely improvements I’d personally like to make in some future release. One such possible example is to allow dragging an entry off onto the panel or desktop to create a shortcut/launcher. If you frequently access certain applications, you’d be able to put them wherever you want them for quick access. Clicking them while the VM is powered off would power the VM back on in the background and then run the application.

A lot of this exists already. While there is no automatic launcher creation, you can create your own that run:

vmware-unity-helper --run /path/to/vmx C:pathtoapplication parameters

This is not a supported feature at this time and may have bugs, but in the general case it should work just fine.