Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Cassowary – Run Windows Apps on Linux using a VM as if they were native apps (github.com/casualsnek)
336 points by shaicoleman on Feb 4, 2022 | hide | past | favorite | 140 comments


Not to be confused with Cassowary: an incremental constraint solving toolkit that efficiently solves systems of linear equalities and inequalities. ( https://constraints.cs.washington.edu/cassowary/ )


more important not to confuse it with the bird, which will kill you.


People should really invest effort in creating unique names for their tools. Case in point a popular git gui client is called "fork". As in git fork named after the git command. Doing troubleshoot googles for that software is a frickin nightmare.


Try living in the C# ecosystem and figuring out how to migrate from entity framework 6 on .NET 4.8 to entity framework core 3 without switching to .NET 6 or .NET core.


There’s only so many single-word .io, .app, and .ai domains left, and the trend to “tumblr”ize words has fallen out of fashion.


I like that a few video games are multi-words (e.g. Oxygen Not Included) and use a common abbreviation, (ONI) that is google-able - for instance "oni tutorial" is pretty good, or "oxygen not included tutorial" is a sure thing. Maybe more software needs to have more words in the name.


Maybe not a great example, as there is already a game called Oni, thus illustrating the original point of difficulty in finding original names.


Fashion or not, there's a clear advantage to tumblrize words to create names. The name is still recognizable with the association you're looking for, but the spelling is unique and easy to search for.


Almost as bad as the tool by google simply called 'repo', used to manage git repos... Imagine the confusions and difficulties of googling for troubleshooting.


Another case in point: postgrest - a clever play on postgres and rest.

Now try searching for any issue about it or even documentation about it in Google. All results are about postgres.

Even something as popular as rust the language has to compete against solutions to prevent the actual rusting and the game and the movie.

Sometimes I wish most software were given a uuid as a name. Life would be much easier.


That's a bad choice (like go), but you can't expect people to find a unique name. It's best to avoid frequent words, names of popular things, and names in the same domain, for your project's visibility, but the dictionary isn't big enough for all the projects in the world. Github alone has over 200 million repositories.


That should only be an issue if projects have to be named with a preexisting word. But that practice will basically always end up conflicting with the existing meaning of the world. IMO the best names are words which previously didn't exists at all.


Several years ago someone had a bright idea to name a game "N". And then someone decided to call a game console "switch" which made troubleshooting network problems (with this console) hilariously nightmarish.


Issue body: Instructions were unclear, tried to run repo and was instead killed by a bird.


And the bird has the lowest frequency song of all birds


Who doesn’t love colorful five foot tall murder chicken/emus? I keep trying to convince my wife that we should get some but she inexplicably objects.


I saw one few years ago near Melbourne with friends at the nature park and it's unblinking state at me was very, very unsettling. I did not f*ck around with it even though friends were encouraging me to peg it. That hook on the leg is deadly looking...


Can you define "peg" in this circumstance ? Because if your friends wanted you to have sex with the male bird, these people are not your friends.


From UrbanDictionary:

> Australian slang, meaning to throw an object very hard and fast. Generally an object small enough to fit in one hand.


That makes much more sense, in the UK “peg it” means running away, which seemed like entirely rationale advice.


Sorry to say, but your friends sound like nuffies.


MIGHT kill you, if it has its babies with it. But lets hope they don't get a load of Jet Li movies to practice with.


instructions unclear, installed the BIRD Internet Routing Daemon.


isn’t it a plant?


It's basically a dinosaur. https://en.wikipedia.org/wiki/Cassowary


From what I understand, all birds are basically dinosaurs.


Yes, but this one looks like one, in the sense of "show a picture to someone who doesn't know about them and they will not believe that this is a real animal alive today".


>Some New Guinea Highlands societies capture cassowary chicks and raise them as semi-tame poultry

emphasis on the semi!



It shares its name with the cassowary plum - a poisonous fruit that cassowary bird can happily eat, having adapted alongside it.


I've been trying to remember the name of this for ages - I thought it was patented at one stage though, would you know if thats true? I can't seem to find the patent.



Just wanted to say that the getting started docs are really well done and super helpful. I don't think I would have followed through if it was not the screenshots and the detailed instructions you've put in there.

Kudos on this amazing project and all the work you put into making all this!


I don't understand the problem this is solving.

Perhaps it's the sparse explanation from the github page? I dunno.

What I do know is; I have a Windows VM under libvirt/Kvm/Qemu and it's everything this thing claims to be - if I understood the broken English of it - I have passed through my RTX2070super GPU and I am basically running Windows+"apps" - including a few Windows games, and I'm using Looking-Glass to do it all, meaning I have full speed graphical access to Windows I need.

Can somebody please explain to me what this thing is and why it's any different or better than what I have now?


Looking Glass doesn't put windowed applications on your desktop as if they were native apps, and doesn't auto-suspend when no activity is detected?

If these aren't features you need then you could just say that, instead of writing dismissive non-constructive comments.


There is nothing dismissive in GP's comment. Deep breath, mate. Deep breath.


“if I understood the broken English of it”


That's not being dismissive one bit. It's a fact that the project's description isn't very good.


It is a little bit broken, but I think it gets the point across.


Probably because people like me can't be bothered figuring out how to setup libvirt/Kvm/Qemu.


If you use virt-manager (or Gnome Boxes) it doesn't really take any figuring out. You just need the relevant install media and follow the prompts.

https://virt-manager.org/


I went with Gnome boxes and installed windows xp. After 20 minutes of trying to get sound working I found out that the automatic configuration select ‘none’ for audio backend.

Worked fine after selecting ‘spice’, pulse audio didn’t work tho but also didn’t result in an error. Apart from sound everything worked out of the box, tho.

I did all that to run some old music training software that only came in 16 and 32 bit versions.


Can it set up GPU passthru?


It appears to be possible but I've never done it.

https://wiki.debian.org/VGAPassthrough


So is this the same virt-manager that passes clipboard and selection contents to all VMs without any option to turn it off?


Cool I'll give it a try.


is this different from the seamless/unity modes that are available in vmware/virtualbox? i think they behave in the same way, they host guest windows which are painted by an rdp like thing (possibly just rdp) but behave like regular windows in the host operating system. i remember making use of it back in 2013 or so.

i think the vmware one even supports 3d hardware accelerated windows.


At least VirtualBox has stopped working properly for some time now in my distribution without any plans to fix it. Workaround is freerdp remoteapp but this also breaks sometime with overlay menus... It was about time someone took a shot at this. Also, MS hyperv has been doing a lot of improvements to improve desktop user experience (e.g. opengl) whereas VMWare and virtualbox are more geared towards enterprise I think.


Noticed that yesterday with Endeavour OS, I switched over to vmware player for now for windows. Everything just seems to work on qemu on linux though, but I never had much luck with it on windows.


VMware unity hasn't been supported for Linux guest or Linux hosts since around 2015.. and no it wasn't using RDP.

See also: https://planetvm.net/blog/?p=2936


i see now, it's seamless mode for kvm as opposed to virtualbox or vmware.


See also: https://github.com/Fmstrat/winapps - windows apps on linux (vm -> rdp)


How are they different?


There is more after that as well in the linked thread. `It can auto suspend vm automatically when no apps are used. ( i have it set to 30 s ). My college uses a windows only application for tests and assignments. If i was using winapps i would have to install libre office in windows vm just to be able to quickly open document sent to me. With cassowary i can just double click file in guest and it will use linux native libre office to open the document. ( Saves storage space ) Winapps only works with VM cannot connect to Bare metal windows`

Instead of constantly rebooting my dual boot system this seems like an interesting approach for me to try. I need to play games in Windows without having to reboot from Linux.


not exactly sure, but...

"They work in similar way but this this project has features that could not be added easily into winapps.

It also aims to add more features while being easy to setup and use !"

https://www.reddit.com/r/linux/comments/skmh28/i_made_an_app...


Looks very cool, what's the underlying technology that makes it work?

Does it need a licensed windows install in a VM to run the apps?


Yes, it's a VM that's connected to with RDP and configured with to appear seamless. The docs directory on the GitHub specifies exactly the setup needed.


Isn't the preferred solution just to continue hacking at Wine? With Proton going big this year, I'm hopeful that the non-gaming side of Wine is going to start getting more and more development attention soon. The performance is so much better than virtualization. Fingers crossed.


I don't think it's possible for wine to translate everything perfectly the way a VM can even in theory. It's definitely getting better but you can't get rid of the need for VMs for all Windows software.


What program do you have an issue with? Wine has been supporting a lot of non gaming software for a long time better than Windows itself. Proton has similarly been good for a long time, it has been big. The deck wasn’t some magical finished product it was built on the skelton of steam machines.


Oh Wine is still incredibly buggy, but I'm still a big supporter obviously. Even Microsoft and Adobe products work barely with exactly the right versions and winetricks with the occasional tinkering, interface bugs, crashes. These are bugs that haven't been fixed in many years. I think an interesting development target for them would just be to choose the top 25 productivity apps and make the last 3 or 4 versions work smoothly without requiring users to spend time troubleshooting the installation, activation, getting standard app functions to work, etc..

Valve has leverage with game developers who rely on Steam for distribution to work together to get games working in Proton, but the same relationship doesn't exist for other non-native apps and Wine. So the development really needs to happen on the wine side.


Games and basic UI elements work great, but there's still several WinAPIs unsupported. 2D drawing for example: Paint.net, the in my opinion best image editor in existence, is borked.


Only some of my games tend to work on Proton. Anti cheat software is really getting in the way most of the time.


there are just too many libraries out there for windows, best they can do is aim for the big, popular programs and hope for the best with the rest. This is why VM's will probably be your best bet for the next bit.


By the way, on macOS, Crossover (which uses WINE) works pretty well for me for that use case. My main use is for running Micro-Cap[1], a previously expensive circuit simulator with a decades old history, that has been made entirely free when the company seized doing business in 2019. (My guess is that the owner retired.)

[1] http://www.spectrum-soft.com


I always like crossover back in the days when I absolutely had to have photoshop and office. I've managed in the pass few years to get away from that work though so now 100% linux/bsd with a splash of office365 on the web


Thanks. Recognized the name for mixed-signal simulation. You just made my day.


Can you run this on Windows Subsystem for Linux? And if so can you then run Windows Subsystem for Linux on this virtual machine?


AFAIK WSL doesn't support nested virtualization, so you wouldn't be able to run a VM inside WSL. You can probably get it working, though, because Hyper-V definitely does support that.

Hell, it might even be useful! Windows 11 should add desktop shortcuts for Linux applications, so this would be an easy way to run programs inside an older version of Windows (if you install Windows 7 in the VM, for example).


For WSL2, nested virtualisation is enabled nowadays. (shipping at least on Windows 11)


Dependant on CPU, I guess, and not just the hardware. Last time I checked (couple of months back), nested virtualisation wasn't supported on Windows for many (all?) AMD CPUs, even if they had the right hardware instructions.


Nested virtualisation on AMD CPUs is generally available in Windows 11, but not on Windows 10.


Why tho?


for shits an giggles obviously

https://en.wikipedia.org/wiki/Matryoshka_doll


Does this allow to run complex programs that use GPU like Photoshop or Affinity Photo?


3D acceleration should be enabled in the VM, so yes, but likely not very well as virtualization often does.


3d acceleration in what capacity? Only Intel has/had the ability to run virtual graphics natively. Otherwise you have to use passthrough.


There are also unlocker methods for Nvidia vGPU functionality these days or, as the setup guide states, you can use VMware as the backend which has a paravirtual GPU with a Windows driver.


Honestly if you are running gpu tasks on photoshop you have to dual boot as I assume it’s professional.


Yeah it is, and I can already dual boot, but not having native pro graphics application on Linux is what stops me from complete switching over. Affinity Photo (and Designer and Publisher) and Photoshop are the only real options here.


Quote: "Set the CPU cores (2 recommended), Memory (4096 MB recommended)" - this is from setting the Win10 virtual machine.

I'd recommend 6GB instead of 4GB as minimum when dealing with Win10. A typical Win10 on idle, without anything launched in foreground uses around 3GB hence 4GB is kind of at limit.


Windows will use a percentage of available ram. And if you have more than 4GB it will start to unbundle services (each service will get it's own svchost).


How can you call this “native” when it’s just an RDP window, even if made to look native, it’s not really the right description is it?


As an Australian, I insist that anything named "Cassowary" should try to disembowel you if you have anything to do with it.


You probably won't like Kiwi[0] then, either.

[0] https://github.com/nucleic/kiwi


So less of a VM name and more of a chainsaw brand?



Freerdp has had RemoteApp capability for a long time.


And it relies on Windows's built-in RemoteApp server: "We will need Windows 10 Pro, Enterprise or Server to use RDP apps".

I guess it streamlines launching apps?


Is it possible to run a windows driver for an external audio interface?


Does anyone else get confused by "apps" and "executables"? This one uses the term "Windows Apps" for ".exe" files, I wondered why anyone would want to run a Windows App https://www.microsoft.com/en-us/store/apps/windows

I don't understand how its better than VM, it says run them like they're native, but its separate windows for single applications, I thought it would use something like WINE.

It should be called "A Windows VM for executables in Linux with native windowing" unless I didn't understand it.


The word "app" has changed in common usage. Most any program you ran on your computer was called an Application way back when, but now it's come to mean... whatever it's supposed to mean now. Whoever wrote the Github site is probably old like me and is using the old vocabulary.


I am an old fart but I am starting to use "app" for windows executables as this is what many of my clients "understand" better.


Before Apple's App Store popularized a specific meaning of "app", "app" was shorthand for "application", which perfectly fits a .exe file and any number of executable files/formats.


I struggled with this a lot because of experience with Java applets which implied they were "small apps" which implied "app" meant something... and it did; it meant application, which meant program, which meant, I think, something along the lines of "mostly self contained system to accept user input, compute said input, and return a user-friendly result" to oversimplify.

For a long time I boycotted the term "app" once Apple et al. used it as their term for what I considered "programs" and now I'm just done with caring.

App = program = executable = distinct set of actions triggered by user or automated input = interface


I had to shorten it to apps to fit the title length limit


This is basically the inverse of WSL2, which I personally think makes it a much better proposition for the bulk of truly techie WSL users.


It was all fun and games until I couldn't compile a go program using the Windows Linux subsystem, showing it's really just a toy. Too many compatibility issues (go check out their GitHub issues) means I don't want anything to do with it.


- WSL2 will not have problems like that, and I believe they were long fixed in WSL1.

- I love Go but the Go runtime is a pretty big snowflake, its one of the few non-libc users of the Linux syscall interface . Also, I think they fixed it on the Go side as well, for good measure, though I could be wrong.


The important point is, don't "give me Linux" that then can't cover the common trendy tech projects. If it doesn't work, it's not Real Linux, and I ain't got time for that.

<ms-rant> Plus, Microsoft- who needs em? Not a pleasant daily driver. My entire family already accidentally "upgraded" to windows 11. Ever since, they've fallen into a perpetual zombie-like state of confusion with regard to their windows computers and what is happening on them. What is good, better, or worse? *shrug*

</ms-rant>

I'd much rather cast the MS bits off to a lowly second-class Hypervised Cassowary VM.

Long Live CASSOWARY!


WSL2 does give you the real Linux kernel, if you want to have Windows with the real-deal Linux kernel. You’ll miss some things inherent to using a VM, but that’s probably the same for any comparable solution.

That said, I’m certainly not trying to convince anyone to use Windows. By all means, run Linux as your desktop if you want to. I do.


You're ranting about a set of problems that don't exist in WSL2. I don't like Microsoft as much as this next person but please don't strawman things as a target for a rant, which really shouldn't belong here anyway.


WSL2 is real linux.


Yeah but then you have to use Windows. This way you can use Linux and just run windows in a VM. The good way. The privacy respecting way.


Oh yeah, I am not recommending people use Windows. I find it absolutely miserable. Just trying to play a bit of devil’s advocate I suppose.


I run both Linux and Windows. Somehow I manage not to feel miserable. Both have made and keep making me decent money.


I can make money on either. Making money is not the problem here. But if you don’t feel a tinge of misery every time Windows Update “accidentally” makes Edge the default browser and you have to jump through dark patterns to disable it, every time start search lags because it’s contacting Bing even though you just want to launch calc.exe, every time you reinstall and Candy Crush is sitting there waiting for you, or every time you accidentally connect to WiFi during windows setup only to forget that it won’t let you set up a local account if you do, then we can’t be friends.

If it doesn’t feel like I control my computer, it doesn’t matter how polished the UI looks or how fast the games run. It’s a non-starter.


There should be a name for the misery of what you're describing. I call it privacy whack-a-mol, but it needs a better term. Something bleaker.


The death of computer ownership.


I am not sure why but it never happened to me (stealing my default browser). As for search - When I type "c" I immediately see Chrome icon and continuing typing "a" show calc. No delays, everything is instant.

I admit that if I saw web results instead of local apps I'd be mad. But I have gobbles of Windows installations at my house and none of those have this problem, starting from that tiny compute stick hooked up to a large TV that my grandson uses to watch Netflix.


A fun one I ran into is that breakpoints don't work on .NET 5 Blazor apps running in WSL. So Microsoft not having proper support for even their own products, as per usual.

Not sure if it's been fixed yet, this was about 8 months ago.


It's also incredibly slow. It was a pretty neat trick but kind of gobsmacking in its ambition (which eventually caught up with those implementing it).


> It's also incredibly slow. It was a pretty neat trick but kind of gobsmacking in its ambition (which eventually caught up with those implementing it).

Not sure what's slow about it other than accessing windows drives from wsl2 and vice versa.


I'm referring to WSL1. Putting Linux in a nicely integrated VM is not so much a neat trick or as ambitious (and that's good).


Isn't WSL2 literally running the Linux Kernel?


It is.


If you are using wsl because of heavy windows programs typically like games then I guarantee this won't work as well as a wsl setup. It is cool but it doesn't seem like enough for me to move away from wsl (which I'd like to do if there was true and simple 'reverse wsl')


Look into Intel GVT-G... Otherwise your best bet is Wine.


I've used wine (typically via playonlinix in recent years) but it's hit and miss. Online games aren't always happy with it (especially with cheat detection), performance is sometimes worse (especially on older hardware) and sometimes you can make it work but only if you spend a few hours fixing things.

The best way to do it is to have a seperate GPU that you pass through fully to the Windows VM - a friend has that setup - which works perfectly but then you can't use that gpu in Linux and I don't particularly think it's worth it for me to have multiple GPUs when wsl gives me 99% of what I want with minimal setup.


Passthrough-capable video cards aren't cheap or that easy to find and actually get working properly. It's 100% a nice dream, but no single major virtualization vendor supports it for desktop purposes intentionally. It's looking like for the foreseeable future it'll continue to be an expensive and royal pain in the behind.

Of course, YMMV, I recall seeing that linus derp tech guy YouTube make it work one time. Good luck keeping it working properly in the long haul.

I feel I've already learned this the hard way, have several spare Supermicro servers to show for the result of what I consider to be a failed project.

Instead, I maintain a separate windows-only machine for such occasions. Takes up very little extra space or time.

Would love to hear from other folks who use this on the daily.


This all feels either out of date, or just incorrect.

You can use consumer cards for this. Both Nvidia and AMD consumer cards. Nvidia drivers work fine now, and don't require any workarounds (they previously "blocked" VM's with their driver, but was trivial to workaround). AMD have a few hardware quirks, but that can typically be worked around too. Though you're best going with Nvidia as it's more straightforward.

It also seems that a lot of virtualisation software supports it (libvirt/qemu, vmware esxi, proxmox, xen, probably a few others). It's typically also, set and forget. Once it's configured, you're good to go. There's not much of "keeping it working properly in the long haul". I've had my setup for about 4 years or so now. Even through software and hardware changes.


The trick may be in "the workarounds".

It sounds like you're a pro, maybe I'm just not that good at configuring teh vmwares / virsh / xen / qemus.


"The workaround" is to add few lines in VM's XML, which are available in pretty much every VFIO / GPU passthrough guide (in "code 43" sections). Like these ones:

https://mathiashueber.com/windows-virtual-machine-gpu-passth... https://linustechtips.com/topic/978579-guide-linux-pci-gpu-v... https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF

And you don't have to do it for the most of AMD cards and the newest NVIDIA cards.

Unfortunately that's not beginner-friendly, I know, but that's the problem of VFIO in general - you can't really do it without being comfortable with terminal, editing configuration files etc. It would be cool to make it automatic somehow, but that would require making some tool(s) for all the preparatiary work (assigning vfio-pci driver, building united) and adding features to virt-manager (to be able to all the stuff graphically, without modifying XML).

But anyway, in your original comment you said that passthrough is not possible with consumer GPUs, which is simply not true. It's possible with pretty much every consumer card.


Sure but in most cases you still need a second card for your VM and can't use the same as for your host.


Intel included support on all their consumer chips until recently I believe. The mediated passthrough is different than full passthrough like you are probably thinking.


Of course it is. Windows is a proprietary system that only a single company has the keys to. You trade control for convenience.


I find myself wishing SeamlessRDP was a thing on the Mac every couple of years, and yet it has not yet come to pass.

(I do use Parallels, but sometimes I want to use a remote app without a full-screen session)


I've seen other posts here before with similar offerings such as Looking Glass; does this make use of GPU passthrough or does it use GPU virtualisation? I ask because my Linux machine doesn't have onboard graphics on my CPU so I can't use passthrough solutions to achieve good performance (didn't realise I needed this when I bought my parts).


Does anyone know something like this except for running Android apps on Linux with a similar level of integration?




Can you play windows only 3d games in it ?


I've not used it but there are methods of doing GPU passthrough for kmv/libvirt/qemu so I'd assume it might work, though if it's using rdp for showing the Windows applications i'd assume it will likely be terrible.

You might be interested in https://looking-glass.io/


is this just apps remoted individually via rdp rail?


So LWS has landed now?

Great work!


Would be LSW.


Virtualbox already has seemless mode.


Wish name collision was avoided. When I saw the title at first I thought it was going to be about the Cassowary constraint solver used in UI layout (recency bias for me).


They’re not even similar softwares, its really not worth it to spend effort, to find a n unused name from thousands of softwares.


Misleading title on HN (correct in actual github repo)

"Applications" != "Apps"




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: