(:warning ("long post"))
GNU Emacs is a wholly remarkable existence. It is not only ancient, but sharp: a wise master that has seen others fall and learned from their mistakes. It exists as a sort of second user land, integrating the underlying OS's built in libraries and utilities into a rich-text interface powered by thousands of lines of tried and true lisp code.
Microsoft Windows is also a wholly remarkable existence. It, too, has quite the history; yet the Windows OS itself (and DOS before it) has largely served as a mcguffin in its own tale. Indeed, the rise of Microsoft and the personal computer seem to have taken place in _spite_ of their OS's glaring deficiencies rather than because of any particular merit. And still, somehow, Windows 10 is ... Dare I say ... Kinda good? The move into the .net api has allowed greater interoperability and extensibility, culminating in PowerShell (which is about as close as you can get to lisp while looking like perl). NTFS is aging, but caching is catching up. The directory structure is awful, but M$ provides a first-party solution to everything: just use WSL and pretend you're on linux. In the wider free software community, there has never been better compatibility between Windows and the hot new languages and development libraries. We have git. We have package managers. And sometimes, they even work.
With that recap out of the way, let's go over all the ways of running and using emacs on Windows, and the benefits and drawbacks of each.
1. Stock build of Emacs
This is the one you get from `scoop install emacs` or choco. It can be used like any other app in Windows, with the gotcha that running the `emacs` command directly from a gui will spawn an empty and unsightly console window. The command to run is `runemacs`, which instantly forks. This is aware of the Windows file hierarchy, but still uses `/` as the directory separator. Paths starting with / are implied to be on the C drive, but others can be specified no problem. Xwidget-webkit is not compiled in. The current version is 28.1.
2. Emacs 29 unofficial builds
For example, `emacs-k` on scoop. Essentially the same as (1) except the current version is (last I checked) 29.0.5. Emacs 29 supposedly adds features such as pixel-scroll-precision and the `alpha-background` frame parameter, but I have been unable to get these features working on Windows.
3. Building it yourself on native Windows
Basically, a royal pain. You will fail to track down half of the dependencies and ruin an afternoon trying.
4. Cygwin Emacs
Cygwin is a Unix environment, compiled and running natively in Windows. They have an installer and are also available via Scoop (which basically just runs the installer for you, but whatever). When selecting packages in the cygwin installer, you can ask for emacs. They have multiple versions built with different gui toolkits: terminal-only, GTK, Motif, and NT (the Win32 look). I have not done extensive testing on these distributions, but there appear to be problems displaying a graphical window even with the native UI.
5. Building it yourself on Cygwin
This is actually possible. You just need to find a guide on which libraries to select when running the cygwin installer (you can re-run it and it will add new packages to your existing sub-system), grab the emacs source from GNU (I recommend a depth=1 clone because time and internet), fix all the files with `dos2unix` and `find` because you understandably used the windows version of git, and ./autogen.sh, oops missed a lib, re-run cyg installer, restart terminal, go back in, try again, then ./configure && make && sudo make install. This also seems to have issues with displaying a gui, but further testing is needed.
6. Windows Subsystem for Linux (WSL)
WSL is an integrated virtual machine and shim that brute-force compensates for windows by not being windows. It has support for a few distros: Debian, Ubuntu, and Alpine. You can do whatever to this system, as it is an isolated vm. However, this takes effort and is rarely necessary. Anyway, installing emacs can be done just as on the Linux distro itself. However, WSL's solution for GUI apps is only on windows 11. To use on windows 10, install an x server. I found one on the windows store (persecute me) that has a tray icon and a button to make itself the default on whichever WSL distro. It works, and displays an emacs. However, there are some X errors shown. See below.
7. Build it yourself on WSL
You can follow any working guide for the Linux distro trapped in your WSL. I built mine with xwidgets because I'm in the middle of hacking up a system to display PDFs by converting them to html with mupdf, but the context isn't important. Anyway: trying to launch xwidget-webkit-browse-url URL dumps an emacs error, an X error, and a frozen-display emacs. The window will close just fine, or you can open a new buffer like `tetris`, but webkit just doesn't load.
---
Please correct me if I got anything wrong here, and feel free to share your woes of trying to get stuff to compile.