Please check the status of this specification in Launchpad before editing it. If it is Approved, contact the Assignee or another knowledgeable person before making changes.


Allow users to run Windows apps on an Ubuntu desktop by remotely connecting to a Windows instance running locally in a VM. Most of the bits currently exist; what this spec will provide is an application to integrate the whole process from VM creation to application installation/execution.

For the time being, we will refer to the program produced as "seamless" for lack of a better name.


Despite best efforts, Windows programs are and will continue to be a part of many desktop users lives. Wine, while a fantastic product and an amazing result, simply isn't sufficient for many programs. At the same time, many of the people who need Windows programs already possess Windows licenses, so a virtualization solution is ideal. As multicore CPUs continue to proliferate in the Desktop market, the associated CPU cost of running a VM all of the time will shrink to nothing.

Use cases

  • Raul is a current Windows user who is interested in giving Ubuntu a shot, but has killer app Program X that simply won't run in Wine and doesn't have a Linux equivalent. He uses seamless to install Program X and run it in Ubuntu as if it were a native app.
  • Susan is a web developer who must be sure that her web pages are displayed properly in IE. Unfortunately, wine doesn't yet support the latest release of IE. Fortunately, she can use this product to run IE w/o rebooting into Windows.


This spec covers the program to assist the user in creating/configuring a VM image, installing Windows, installing programs and running programs from a VM.


The design should have the following considerations:

  • Entirely GUI accessible
  • Should include a walk-through for users to install Windows (OEM type preconfiguration possible?)
  • Should wrap the Windows program to handle VM start-up and connection
  • Utilize libvirt for VM agnosticism

Future Functionality

  • P2V Solution to allow users to simply convert an existing Windows install to run all of the apps in Ubuntu?
  • Integrate w/ a solution allowing graphics acceleration in virtualized guests to allow gamers to finally choose Linux as a desktop.
  • Drag/Drop and Cut/Paste forwarding through rdekstop
  • Sound forwarding
  • Accessibility frameworks? Screenreaders?


Virtual Machine

We have several choices for virtual machines. On the OSS side of things, we have qemu, virtualbox, bochs, KVM, and xen. On the closed but free side, we have VMware player. With the exception of Xen, all of the above solutions are full virtualization solutions which allow us to run Windows w/o special HW assistance. Xen requires modifications to Ubuntu itself. In addition, Xen requires HW virtualization support to run Windows, so this isn't an option in general, though it is certainly viable for when we detect such a capability.

For the sake of simplicity, the initial design will only support (k)qemu, with the intention of supporting more VMs in the future.

Windows Installation

Windows XP

We can use a pre-configured winnt.bat/winnt.sif and stick it on an emulated floppy drive to have Windows install automatically. We will still have to have the user mess w/ user accounts and Windows Activation, but that stuff is easy and straightforward.

Windows Vista

Not sure how the equivalent mechanism works in Vista, but I'm sure that there is something similar to the XP solution for us to take advantage of.

Window Forwarding Mechanism

Windows XP Client

A combination of RDP and seamlessrdp enables us to run a single program at a time from a Windows XP Pro client. It is conceivable that a similar solution could be constructed to allow the forwarding of a single program window using simple X forwarding, but such a solution is beyond the scope of this spec.

While Vista is new and sexy, XP is and will remain an important client to support, possibly even more important than Vista. As many organizations are recoiling at the thought of upgrading to Vista, this project offers them an alternative upgrade path that allows them to run their legacy applications interminably while offering a new, open future.

Windows Vista Client

The new version of RDP that ships w/ Vista support running individual programs. The easy solution here is simply to wait until rdesktop supports this feature and use that as the forwarding mechanism.

Program Installation Mechanism

Ideally we want for someone to download a setup.exe or .msi file on the Ubuntu system, run it, and have the final installation show up in the "Applications" menu in Ubuntu, assuming that they've previously setup the VM. This will require us to associate seamless w/ .exe and .msi files (conflict w/ wine?). We will then copy/link the files into a folder shared w/ the host (SMB), and execute them from there using RDP, handling the setup from Ubuntu. Afterwards, we will rip the program from the Windows "Start" menu, and create an entry for them in the Ubuntu "Applications" menu.

This will require us to run some programs from the Windows guest and have them communicate with seamless on the host. A simple shared file will probably be sufficient for our immediate needs. I have no idea how to get the info we want out of the Start menu in a programmatic way, but that should be figured out easily enough.

Unresolved issues

  • As it currently stands, Windows XP only allows a single RDP connection at a time. If we use an implementation similar to SeamlessVirtualization, then we are limited to running a single program at a time.

  • Windows Vista's version of RDP (6.0) supports running individual windows instead of simply viewing the whole desktop. Unfortunately, rdesktop 1.5.0 doesn't appear to support these features yet.
  • There may be licensing issues involved with virtualizing Windows. Vista Home at the least isn't licensed to run in a VM. I believe all of the other versions of Vista are suitably licensed, and that they all support RDP. This needs a little bit of research.
  • Because of theming, it will be quite clear that Windows programs aren't running natively. This may be desirable in some circumstances, and less desirable in others. One work-around is to install the Ubuntu Human theme in Windows, or to install a Windows knock-off theme in Ubuntu.

BoF agenda and discussion

PyQemu Human for Windows

CategorySpec CategorySpec

SeamlessWindowsIntegration (last edited 2008-08-06 16:26:32 by localhost)