The naming causes some confusion to me. I thought there was WSL and then they released WSL2 quite some time ago. Is this WSL1 version 2 or WSL2 version 2?
Following it from a distance, I think WSL has been a very exciting development on Windows. It's really something I would probably have enjoyed more upclose, had I not, you know... moved to Ubuntu altogether :)
... Not to be confused with WSL 2, the VM-based successor to WSL 1's tighter integration of Linux binary compatibility into NT. Both WSL 1 and WSL 2 seem to still be delivered as part of the package that has just reached version 2.0.0, though it doesn't seem WSL 1 is getting much (if any) work these days as it's considered a technological dead-end.
(And in case anyone's interested, it appears WSL 2 was added before this package reached 1.0)
With WSL 1 there is no Linux involved, it’s a Windows subsystem to handle Linux system calls with the NT kernel. I sort of get the name in that regard.
WSL 2 is just a tightly integrated VM running a real Linux kernel, and the name makes no sense there.
I wonder which is better, WSL with native gaming, or native Linux with virtualized gaming via WINE and Proton. I suspect both solutions will reach parity in the next ten years.
Now if only I could run macOS with full GPU acceleration on Windows or Linux without needing a separate GPU, then I wouldn't need a Mac for the few times I develop and build for iOS.
Honestly, whoever convinced Microsoft to make Linux run in windows was a genius. I would have seriously considered a Mac had they not done this. It just opens so many possibilities in Windows for me and all of it is so easy and simple to setup.
Cygwin was a great tool, and I've released some software which used cygwin, but almost all large programs ended up needing cygwin-specific patches (I maintained quite a few myself), while WSL2 (which is just a fancy VM), in my experience offers 100% linux compatibility, I've never had any issues with it except some VPN-related internet problems.
> I've never had any issues with it except some VPN-related internet problems.
I've had to support a development environment that ran on WSL2, among other things. I regularly had developers attempt to start work in the morning only to find an overnight WSL2 update from Microsoft rendered their WSL2 instance unusable. It typically took a few hours of uninstalling / reinstalling to fix it. But in at least one case after a series of these incidents that cumulated in them spending a day trying to get it going they gave up and switched to Ubuntu.
The only reason I'd use WSL2 over a real Linux install for Linux development is because of ISO 27001 / SOC 2 restrictions pushed from above. I don't have a clue why people would do it voluntarily. It's not only a fragile and incomplete implementation (especially on the networking side), it's also noticeably slower.
While my observation is mostly limited to my laptop and couple of friends, I must day that both of those laptops are on Windows Insider, not even stable branch and I probably can remember couple of minor issues over last 3 years with WSL2, nothing like you described
Cygwin isn't remotely comparable in terms of compatibility. With WSL2 I can train stuff with PyTorch with GPU acceleration without configuring anything. Try doing that with cygwin.
Yes, although that person probably retired long ago since the idea dates back to 1990 or so (NT Posix subsystem). The difference in modern times is someone convinced them to make it usable.
I might be remembering this wrong, but the posix additions to NT were done to fulfill a US defence department condition for bidding on systems[0]. They were never really useful in the same way that WSL is.
I'm going to wait a while to see how the new VPN stuff works out. Previously WSL2 didn't work with a Windows VPN without an extra tool ( https://github.com/sakai135/wsl-vpnkit ), hopefully this might fix things, but not going to risk trying it in case it breaks everything.
This is the most painful aspect of WSL2: if your org forces you to use a VPN your WSL2 is almost totally isolated from the network. Interestingly we have the same problem with our VPN and docker
If you haven't looked at it, look at the wsl-vpnkit (I mentioend above). Your org might not like it of course, but I found it fixed all my VPN-related issues (it's just another linux install you run as part of WSL2, which somehow connects everything together and by magic lets me get on the internet fine).
I do use it and it works. Luckily I also got a full Linux PC for when I work from home, therefore I only need WSl the few times I am going to the office. The main issue now is the VPN messing up with routing and making containers inside WSL inaccessible from outside. Unfortunately wsl-vpnkit couldn't help there...
Please correct me if I'm wrong. This isn't a release but a "re-release" right? So only available to those on Windows insider update train?
Putting that aside. I am quite excited about the mirror network change. My big annoyance when I moved from WSL1 to WSL2 was that a service run inside WSL wasn't available to the my LAN. It made sense why it didn't, WSL2 is a hardware VM so you weren't binding on the hosts networking stack like WSL1, but it was still annoying.
The ability to release memory could be very useful. WSL2 works very well for me in general, but on a Notebook without excessive RAM it can be problematic for some use cases. Anything that has large spikes in memory usage can be seriously annoying as that memory won't be released in the current WSL2.
As others mention, the versioning scheme is confusing. I'd like to add that I found even the name confusing, as I initially thought that this would allow some parts of Windows to run on Linux.
"Linux Subsystem for Windows" would have made a lot more sense to me.
Actually WSL doesn't contain any Linux at all because "Linux" originally refers to the Linux Kernel and usually GNU/Linux refers to a system using Linux as a kernel but GNU software for the userspace. So, the Name should rather have been something like "Windows Subsystem for Posix Programs" which doesn't quite sound so good.
I've been a big fan of WSL, which has kept me on Windows for years more than I otherwise would have. But I'm not a fan of the trend of Windows turning into an adware hosting platform so intend to move to macOS for my primary Desktop after Apple release their next M3 hardware.
As a .NET Developer I bought a new M2 Macbook Air to test the feasibility of moving to ARM/Apple Silicon and was pleasantly surprised that all the software I used daily had native builds that worked OOB [1]. I was also able to run Windows 11, Ubuntu and Fedora ARM OS's with UTM [2], which lets me access Windows should I ever need to.
As nice as WSL is, it's not as nice as having a native Unix terminal as it still feels like your living in 2 different worlds. It's always going to be uncanny valley where you need to install software tools twice per OS (and upgraded in-sync) and the cross-OS file system performance is so unusably slow that it may as well not exist as you're basically forced to check out repos in each filesystem. Also ran into a number of situations where building and using WSL tools isn't as well supported as Linux/macOS.
By contrast everything I tried to install seemed to work on macOS, where I was able to build and try out LadyBird Browser's new native macOS UI [3] and install all the tools I needed run and test out local AI workflows [4], e.g. this command below uses ffmpeg to capture 5s of microphone recording, uses OpenAI's whisper to transcribe the audio to text, uses curl to send it to a remote API to generate an LLM prompt, that gets executed with a local install of Llama2 7B:
WSL1 is what keeps me on Windows - but I don't understand why they keep calling WSL2 "WSL" as it has nothing to do with the traditional "Windows service for XXX" model. For better or worse WSL2 is just a virtual machine, nothing else, while WSL1 actually integrates with the underlying Windows with a single network stack etc.
Been using wsl2 for development for a long time I don't see how it's not integrated enough with windows. For my use case it seems completely transparent to the fact that it's running in a vm.
Separate network stacks? Separate filesystems? Separate processes and memory allocation? With WSL1 processes started from WSL console appear on Windows Task manager and starting a network daemon on WSL1 uses the Windows network stack and firewall. There's no NAT, no bridging and no VPN problems as you truly are running just a single operating system. WSL2 using but not releasing memory? Not a problem with WSL1 as it doesn't allocate any memory, it just runs processes on top of Windows kernel.
Of course WSL1 has it's limitations as it's not Linux but Windows with Linux userland - anything that touches the Linux kernel directly pretty much doesn't work (like loop mounts etc).
69 comments
[ 61.8 ms ] story [ 4042 ms ] threadJoke aside... I am still confused.
This release refers to WSL2 version 2.0.
E.g. .net framework/core, xbox, windows and now WSL
Think of this as, kinda, the userland tools for WSL.
Totally made up conversations about choosing Entity Framework version numbers: https://blog.oneunicorn.com/2020/03/26/numbersarehard/
(And in case anyone's interested, it appears WSL 2 was added before this package reached 1.0)
How are they so bad at naming things?
WSL 2 is just a tightly integrated VM running a real Linux kernel, and the name makes no sense there.
100% agree; I explain the current name to myself as "Windows offering a subsystem to run Linux into".
> How are they so bad at naming things?
See the whole .NET Core
Now if only I could run macOS with full GPU acceleration on Windows or Linux without needing a separate GPU, then I wouldn't need a Mac for the few times I develop and build for iOS.
I've had to support a development environment that ran on WSL2, among other things. I regularly had developers attempt to start work in the morning only to find an overnight WSL2 update from Microsoft rendered their WSL2 instance unusable. It typically took a few hours of uninstalling / reinstalling to fix it. But in at least one case after a series of these incidents that cumulated in them spending a day trying to get it going they gave up and switched to Ubuntu.
The only reason I'd use WSL2 over a real Linux install for Linux development is because of ISO 27001 / SOC 2 restrictions pushed from above. I don't have a clue why people would do it voluntarily. It's not only a fragile and incomplete implementation (especially on the networking side), it's also noticeably slower.
[0] https://en.wikipedia.org/wiki/Microsoft_POSIX_subsystem
One stipulation in NT's subsystem at the time was that fork() needed to be followed by exec().
Embrace.
--user-mode-networking
https://docs.podman.io/en/latest/markdown/podman-machine-ini...
Putting that aside. I am quite excited about the mirror network change. My big annoyance when I moved from WSL1 to WSL2 was that a service run inside WSL wasn't available to the my LAN. It made sense why it didn't, WSL2 is a hardware VM so you weren't binding on the hosts networking stack like WSL1, but it was still annoying.
A real nightmare.
https://github.com/microsoft/WSL/issues/6982
Almost 1000 total comments between both of these and basically no acknowledgement from microsoft.
> experimental.dnsTunneling- Changes how WSL resolves DNS requests to improve network compatibility
> experimental.firewall- Applies Windows firewall rules to WSL, and allows for advanced firewall controls for the WSL VM
> experimental.autoProxy- Makes WSL automatically use the proxy information from Windows to improve network compatibility
Had to work around these back in 2020-ish… finally a way to run WSL2 with Cisco VPN without horrible hacks? Fantastic!
Not sure about other corporate VPN providers, haven’t used them. I wouldn’t be surprised if others have similar issues.
"Linux Subsystem for Windows" would have made a lot more sense to me.
https://github.com/microsoft/WSL2-Linux-Kernel
wsl --update; wsl --update --pre-release
https://devblogs.microsoft.com/commandline/windows-subsystem...
EDIT: you also need to be on the latest windows insider build to actually take advantage of the experimental features.
As a .NET Developer I bought a new M2 Macbook Air to test the feasibility of moving to ARM/Apple Silicon and was pleasantly surprised that all the software I used daily had native builds that worked OOB [1]. I was also able to run Windows 11, Ubuntu and Fedora ARM OS's with UTM [2], which lets me access Windows should I ever need to.
As nice as WSL is, it's not as nice as having a native Unix terminal as it still feels like your living in 2 different worlds. It's always going to be uncanny valley where you need to install software tools twice per OS (and upgraded in-sync) and the cross-OS file system performance is so unusably slow that it may as well not exist as you're basically forced to check out repos in each filesystem. Also ran into a number of situations where building and using WSL tools isn't as well supported as Linux/macOS.
By contrast everything I tried to install seemed to work on macOS, where I was able to build and try out LadyBird Browser's new native macOS UI [3] and install all the tools I needed run and test out local AI workflows [4], e.g. this command below uses ffmpeg to capture 5s of microphone recording, uses OpenAI's whisper to transcribe the audio to text, uses curl to send it to a remote API to generate an LLM prompt, that gets executed with a local install of Llama2 7B:
Maybe you can achieve similar functionality in Windows/WSL, but it's nicer when all the tools you want to use just works natively.[1] https://servicestack.net/posts/postgres-mysql-sqlserver-on-a...
[2] https://mac.getutm.app
[3] https://twitter.com/awesomekling/status/1694954938395202031
[4] https://servicestack.net/posts/building-typechat-coffeeshop-...
Of course WSL1 has it's limitations as it's not Linux but Windows with Linux userland - anything that touches the Linux kernel directly pretty much doesn't work (like loop mounts etc).