Hacker News new | past | comments | ask | show | jobs | submit login
Mutt on Windows Without WSL (djhaskin.com)
101 points by djha-skin 11 months ago | hide | past | favorite | 74 comments



> WSL is nice, but it takes up a lot of RAM on my system. I prefer to use MSYS2.

That's why you trash WSL2 and just stick with WSL1. I'm surprised they didn't mention it at all.

Keep MSYS2 around for where WSL1 doesn't suffice, but that should be fairly infrequent.


There is an experimental flag[0] in the .wslconfig which let's you set autoMemoryReclaim to gradual or dropcache. On my laptop I had good success with dropcache and on my countryside desktop with gradual.

[0] https://learn.microsoft.com/en-us/windows/wsl/wsl-config#exp...


You can do this manually by doing echo 1 > /proc/dropcaches or something along those lines


WSL1 just doesn't work well enough. I'd never recommend WSL1 for anything. The extra nines in compatibility matter in development work if you have any dependencies in your projects.

WSL2 is also pretty good at giving RAM back to the host Windows. I guess you're really running thin on resources if this doesn't do enough.


WSL1 isn't the alternative to WSL2, it's the alternative to MSYS2. Surely you don't get more 9's with MSYS2.


Makes sense, though I’d consider neither for work nowadays.

I have fond memories of using msys2 for gcc but I’ve never used it for more than that.


There is an issue between WSL/Hyper-V and the cache system on linux, WSL2 might LOOK like it needs 8GB but in reality if you check under it most of it is used by cache, if you lower the amount of ram dedicated it will do just fine.

WSL1 was great and I loved it better on many aspect, until you needed to touch the filesystem.


I can't say WSL2 eats host RAM or vRAM:

I moved all my ML training and finetuning stuff (OSS LLMs, TTS, STT, Text2Img) to WSL2 and have only minimal overhead. A clean Win11 host eats away less than 2GB and I love how you can just use your cuda devices on WSL2, use something like micromamba and cmake your wheels while still being able to switch to Win tools whenever necessary. Idle Cuda devices use around 0.5GB vRAM.

Especially the two new experimental features in the last update of WSL2 added a nice QoL improvements:

- autoMemoryReclaim – Makes the WSL VM shrink in memory as you use it by reclaiming cached memory

- Sparse VHD – Automatically shrinks the WSL virtual hard disk (VHD) as you use it


I'm using wsl2 and noticed general responsiveness drops way down during finetuning (comparing to any other heavy cpu+gpu usage natively) . How's that working in your setup?


WSL1 was what made me stick to Windows at the time, when I had a new laptop and didn't want to mess much with it. WSL2 was what convinced me to switch back to Linux, since I felt that WSL1 was going to be abandoned. What is its current situation? Is it still maintained?


WSL1 was kind of amazing, IIRC it attempted to map all unix calls to their windows equivalencies. But there were edge cases and bugs when it just had serious problems. WSL2 came in, and is basically a simple local container. it isn't a buggy mapping, it is Ubuntu (or whatever you want to run).

Once i moved over; 99% of my (non time SKU related) quirks went away, and it's only vaguely heavier. Honestly, as a terminal-creature, I prefer WSL2 + Apt to OSX + Homebrew as my macs always tend to turn into a local package nightmare and I'd end up wasting a day/mo untangling. My WSL feels pristine still ~20mo later, and I know i could wipe and recreate it in ~30m if I needed to (but i haven't felt a need).


I've heard indirectly and off hand that some Microsoft PMs still regret calling it WSL1 and WSL2 instead of something like WSL-A and WSL-B.

My understanding from documentation is that WSL1 is "feature complete" but not "maintenance ended": they think they hit a strong Pareto Principal 80/20 for features in WSL1 and realize it won't support everything but often supports "enough" and any further compatibility issues are out of scope both because the tail is extremely long and the risk/reward of time invested into long tail issues are rarely worth it.

I don't think WSL1 will be "abandoned" any time soon, but the list of "Known Issues" will only continue to grow and a lot of people get pointed to WSL2 simply because the long-tail Kernel compatibility is hard to beat if you are directly running the Linux kernel.

But the many tools that work brilliantly in WSL1 still work brilliantly in WSL1 and there are still benefits to its barer/stranger metal approach.


WSL2 is Linux, running a kernel tweaked to co-exist with the Windows kernel instead of being a pure vm. It's a VM with some container-like features like using the host's gfx drivers (which are like 100x better validated than Linux, except for compute workloads).


> What is its current situation? Is it still maintained?

It still works for me on Windows 10. No idea what it'll be like beyond then.


3 months ago I trashed windows and hopped over to Ubuntu Budgie for my CAD and Dev workstation running 16GB RAM, after 18 months of somewhat hating life in Win11+WSL2. This dropped my full crashe requiring reboot - from 5/week to less than 1/week.

I'm much happier for general browsing and dev - both have much fewer spontaneous crashes with reboot, and enjoy lower chance of OOM crisis thanks to the lighter OS and WM.

My windows requirement, Rhino 3D 7, runs in a Win11 VM with 5GB RAM and 25 GB of storage. The VM can crash violently without taking down my host OS, so CAD BSODs impact me like a regular app crash. The VM RAM use is a bit higher than WSL, requiring me to close the browser when I do CAD to reduce the risk of OOM. But in windows I often had to close WSL2 and the browser, for the same reason.

OOM will still lead to a gut wrenching lockup that require a reboot with 30% likelihood. That's probably because I don't run swap, out of a possibly unwarranted worry about NVME wear. To improve this, I'm looking at 3 solutions:

1) 4 GB of swap might give me a gradual OOM failure mode with plenty of time to kill apps as things slow down. It might even lower NVME wear by letting the OS swap static memory pages for pages of heavily used disk write cache.

2) CGroups can kill the Browser and VM if the system is near OOM. This is my favorite solution, since it would be nice to have this OOM behavior even if I adopt solutions 1 and 3.

3) A cheap upgrade to 32GB RAM would fix the problem, and also double my memory bandwidth. I can probably live without this, though.

TLDR; Even with ample room for improvement, my best "Windows + WSL2" experience comes from Linux + a Windows VM! The most mysterious crashes are so rare it's a little freaky, and the remaining crashes have clear solutions. I am happy!


If you are worried about the swap eating the drive, why not put it on a dedicated disk and just let it?

If you are doing anything vaguely interesting, the time you are spending is costing a lot more than the drive would.


> my best "Windows + WSL2" experience comes from Linux + a Windows VM

tbf; your problem is you're running a buggy app that wants more hardware than you have and handles it poorly. I spend 90% of my day at a unix prompt; but you'd likely see similar HostOS stability irmprovement going Windows -> Windows VM` as you did `Linux -> Windows VM`.

A few comments: 1) Ignore NVME wear; the drive controllers are smart enough nowadays to wear level; it will likely die sooner, but still outlive any machine you'll probably want to keep it in. 3) Buy the Ram. Whatever your motherboard fits, max it out.

tldr; Your time is more valuable than dealing with pain to try and min/max your hardware life cycle (and honestly, your wallet). The time you lost switching Base OS is likely worth more than the cost of a ram upgrade; not counting that you're still dealing with (30%?%??!) crashes over it. Value yourself and your time.


Are you worried about swap in the guest os? You can configure the swapiness of the OS, if you set it to 10 or something it will only swap when you're out of memory or when an application explicit says it wants swap memory (pretty rare). That can preserve your SSD and prevent your hard crashes.


It's unintuitive but you could consider using compressed ram (zram/zswap) for swap


I wonder if this author has tried Justin Tuney's Cosmopolitan to run Linux tools on Windows. Her last releases are shipping full set of multiplatfom compiled GNU tools.

They do work on windows. Even bash works. They do break sometimes but work when they do still. I used cosmopolitan's rsync on windows to copy stuff from sdcard but it was terminating randomly sometimes and I ended up using wsl.


This comment just made me realize Cosmo rsync might fix my weird issues with getting Vagrant to sync files over to my Unix VMs on my corporate Windows laptop. Thanks!


It worked!


Justine with an `e` and two `n`s in Tunney.


Am I the only one who said screw it, I'm getting 64GB of ram? The amount of concern about ram, it's not that much more expensive atm to get double or 4x if your already buying a laptop.


I dropped Windows instead. I decided to splurge on RAM when I built my PC a couple years ago, because I like to run lots of VMs simultaneously to test things out. I also use source based package managers which can use a lot of RAM when compiling things in parallel. I have half as much RAM as you, and it feels endless.


Yup. I've even debated 128. Though not because of WSL, i just do some work with high ram needs and having it for when i want it is worth it's cost, easily. Same for storage that isn't Apple based.


This. It's not that expensive; it's not worth your time dancing around over time. I Know it's an entitled view point, but engineers are also generally entitled.


Yes, since I can afford it. I feel bad for all the people out there who are students or otherwise under budget constraints. I go on Reddit or Discord and hear stories from people who are stuck on computers with 4GB RAM dating back to 2015 or earlier.

These people are being left behind, which is a shame. Part of the justification is that anyone who has such old hardware can’t afford to buy your products or services anyways, but that’s a very narrow capitalist lens. These are motivated, intelligent people who could better contribute to our society if we made sure that you could do good development work on old hardware.


I used to do exactly this using Cygwin. I wonder why that is not an option anymore.


>Cygwin

The author uses MSYS2 which is based on Cygwin: https://www.google.com/search?q=msys2+based+on+cygwin

EDIT add : >I wonder why that is not an option anymore.

In the particular context of the blog, the author deliberately wants to make MSYS2 the main environment when he wrote: "These prerequisites are not just to use mutt, but to use msys2 successfully in any capacity for development or other work."

Therefore, installing Cygwin separately for Mutt would work but it contradicts the goal of him wanting to use MSYS2.


While MSYS2 is based on parts of Cygwin, it is not Cygwin (as opposed to how, say, Ubuntu is based on Debian). MSYS2 and Cygwin have different goals and provide a different environment: https://www.msys2.org/wiki/How-does-MSYS2-differ-from-Cygwin...

The author probably prefers the MSYS2 way, but Mutt should work fine under Cygwin without requiring jumping through the hoops the author describes.


>While MSYS2 is based on parts of Cygwin,

Yes, this fragment is what my reply was about.

>it is not Cygwin (as opposed to how, say, Ubuntu is based on Debian).

I agree and that was not what my reply was claiming.

Instead, I interpreted the gp's comment as being unfamiliar with MSYS2 and how it's related to Cygwin to fill the use case for a UNIX-POSIX-emulator.

Extra trivia... as for whether "MSYS _is_ or _is not_ Cygwin" is a matter of context and particular person's perspective for comparison. Examples:

"MSYS is not Cygwin": https://news.ycombinator.com/item?id=11390890

"MSYS is Cygwin": https://news.ycombinator.com/item?id=11390961


It does. I had a Windows 7 VM and installed it on a lark. Took me 15 minutes (mostly installing Cygwin first).


Busybox for Windows is a great shell for people who want Linux look and feel on Windows.

Chocolatey may also cover more stuff than scoop.

Most developers should also be using Windows 2022 with Desktop. What you trade in one time agitation with i210 drivers you gain forever in zero cruft, and maybe more with file deduplication.

In terms of exciting stuff to program, it would be nice if Triton supported Windows.


The general case here would be that to be POSIX compliant doesn't demand the underlying OS is unix, only that the API/ABI and commands work in very narrow limits.

If you write to libc and a small set of dependencies and if you are in C, it should be possible to do things. If you want curses, you are walking into hairy areas.


I don't see how curses is an extra problem - it is written against libc like the regular programs and the windows terminal(s) are supported by terminfo.


I was under the impression it was bust, but it is super good to know it isn't.


I'm sure it doesn't have the same features but you can send emails natively in CLI on windows with send-mailmessage

https://learn.microsoft.com/en-us/powershell/module/microsof...


I wish. "The Send-MailMessage cmdlet is obsolete. This cmdlet doesn't guarantee secure connections to SMTP servers. While there is no immediate replacement available in PowerShell, we recommend you do not use Send-MailMessage. For more information, see Platform Compatibility note DE0005."

This made me very, very sad in my last job as the de facto PowerShell expert.


re: using Unix tools on Windows, I do like that you can pipe the output of a program in WSL to the Windows clipboard (clip.exe). I was really surprised by this! I use pbcopy on the Mac for this all the time.


Beware that clip.exe clobbers unicode. For example, `echo caña | clip.exe` sets the clipboard to `ca├a`.

And there's no unclip.exe. You'd have to use `powershell.exe get-clipboard`, which is pretty slow.

I use this simple alternative: https://github.com/equalsraf/win32yank

`echo caña | win32clip.exe -i` and `win32yank.exe -o`


I made a simple paste.exe utility for this actually. I suppose I should put it up on GitHub. Though win32yank pretty much does it all already.


Cygwin also offers this through /dev/clipboard, bidirectional. You can do "cat /dev/clipboard > file.txt" as well as "ls > /dev/clipboard"


Oh wow, I didn't know about this, thanks for posting!

For others, it really is just as easy as `ls | clip.exe` to pipe into your clipboard on WSL.

`ls | tee clip.exe` if you want to print as well as copy.

And of course you can just set an alias if you want to shorten clip.exe to clip.

Great tip! Thank you!


It's implimented as a magic filename? Not a virtual or real file that actually appears in a filesystem? You don't have to do something like mount a virtual fs that maps to your host windows fs like a bind mount or nfs mount, and also add that fs to PATH?

If so, that sounds terrible, and very Microsoft.


The entire point of WSL is seamless integration. Windows drives are automatically mounted as /mnt/c, the Windows PATH is added to the Linux one, and it can run Windows .exe files and communicate with their standard I/O.


So it's not magic then. A fs and a field in PATH means nothing unexpected happens.

So good then.


Beware of randomly truncated output https://github.com/microsoft/WSL/issues/4082


> get unix tools to run natively on Windows.

I managed to run unix tools in cmd, so I can run both windows & unix commands togheter. It required adding msys2 into the environment variable.


Omg scoop looks awesome, how have I not heard of it before?


Have you heard about WinGet? It's the official package manager for Windows: https://github.com/microsoft/winget-cli


I tried WinGet out when it came out, but ended up sticking with scoop. What would you say are the advantages of WinGet over scoop?


The biggest advantage of WinGet is that it is installed out of the box with Windows 11, recent versions of Windows 10, and auto-installed into Windows 10 by update processes deeply back down (I think all the way back to the original Anniversary Edition).

A smaller advantage is WinGet's default installed sources use Microsoft CDNs for package metadata which are often whitelisted in firewalls or at least gentler in their MITM attacks, and WinGet's primary source (the "winget" source) uses canonical installer URLs rather than repackaging (pulls the same EXE/MSI installer that you would if you went to a download page manually). That combination of well known URL patterns generally means WinGet has a kinder experience with corporate firewalls and corporate anti-virus tools than scoop can provide.


Copying from a comment I made on Ars:

Where scoop differs, which might be good or bad depending on your point of view, is that it installs software to its own location, and self-updating apps don't self update. So, tutorials and programs have to take Scoop into account[1] since they won't be installed to their usual locations (bonus: scoop itself can be installed to your users home directory, or to C:\ProgramData\scoop).

Another wart is that maintainers of scoop recommend using scoop + winget[2].

I think it's neat, but personally, I just use winget to install things, and a variety of portable apps on a secondary drive (in fact, winget supports installing one-off programs to random locations). Another nice thing about winget is being able to update and manage software that wasn't installed with it too.

[1]: https://github.com/microsoft/vscode/issues/123205#issuecomme...

[2]: https://github.com/ScoopInstaller/Scoop/issues/3691#issuecom...


scoop is a significantly better tool and can actually manage the things it installs.


I'm surprised this is not used more.

How good is the community repo?


I've heard that they stole it. , so I approve of avoiding it.


Just want to weigh in and say that scoop is fantastic.

The genius insight behind Scoop is that Windows doesn't need a dependency manager because pretty much all programs ship with their dependencies included. So all you need is a way to download & run installers automatically, from the command line, into a Scoop-controlled directory.


i have seen dependencies being installed when using scoop for example an app might need ffmpeg in the system


You should checkout chocolatey


Why not use a linux vm on windows? Using a shared folder mounted on the linux vm gets you file sharing, what else would you want that WSL gets you?


WSL2 is basically a lower-memory VM via containerization with auto-mounts of the host OS.


Mutt is exactly something that would be nice to rewrite in Rust, moreover, splitting into various crates of working with email, so that it will be possible to reuse the same code for both TUI and GUI clients.


> so that it will be possible to reuse the same code for both TUI and GUI clients.

Why must a generaly good improvement these days always start on HN with "rewrite in rust" like it's the only language which still matters. Leave that up to the developer to what they prefer for the job.


> Why must a generaly good improvement these days always start on HN with "rewrite in rust" like it's the only language which still matters.

I'm guessing so that its likely to 1) be safer by default, 2) likely to get more contributors, 3) more likely to work cross-platform, and 4) more likely to get attention and survive as a project.


"memory safe by default" but not necessarily "safer" by default. A code base that has been battle tested in production for decades will likely be safer in every other way than an entirely new project that has got thrown up on a git repo yesterday.


You're new here aren't you?


Already done: https://pimalaya.org/


It took only a second to see what I would miss as like on most of the mail clients: why isn't it possible to configure the list of mails to see not only the sender but the e-mail address? I only know three e-mail clients where I can configure it: mutt, betterbird and evolution. But maybe I'm old and no one would like to see that "bill gates <fake@bad.boy>" is not from bill gates before opening the mail (and render the contents). The phisher are thankful.


You can do it in Claws Mail (also available on Windows):

Configuration -> Preferences -> Display/Summaries -> Message List -> Displayed in From Column: Name | Address | Name and Address


So this looks like it might even support "cloud" based email services with OAuth2/MFA authentication such as Outlook/Exchange in the cloud:

https://pimalaya.org/himalaya/cli/latest/configuration/outlo...



It looks abandoned according to the site updates.


meli last commit is yesterday. Last release 3 months ago




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: