←back to thread

Bare Metal (The Emacs Essay)

(waxbanks.wordpress.com)
197 points hpaone | 1 comments | | HN request time: 0.243s | source
Show context
billfruit ◴[] No.45653702[source]
While I still use emacs, I find that that despite the "batteries included" narrative about emacs, the things which are not included are causes of major frustration.

Such essential functionality like grep-find and LSP servers which is required for out of the box auto complete are not bundled with emacs. Most modern IDEs/editors have these functionality baked in.

If you install emacs for windows you find that grep-find doesn't work, because it depends on support from environment. A full text search should be built into the editor.

replies(13): >>45653816 #>>45653935 #>>45654013 #>>45654310 #>>45654657 #>>45654749 #>>45654984 #>>45655041 #>>45655085 #>>45655291 #>>45655623 #>>45656821 #>>45682752 #
ubermonkey ◴[] No.45655085[source]
>If you install emacs for windows...

...you are a second class citizen in the emacs republic.

I mean, I don't endorse this position, but it's the way things are.

replies(1): >>45655228 #
DonHopkins ◴[] No.45655228[source]
>If you install emacs for mac...

...you are a third class citizen in the emacs republic.

In spite of the fact that you can't spell emacs without mac.

Also:

>If you install emacs for linux...

...you get flamed for not calling it gnu/linux.

replies(2): >>45656184 #>>45658821 #
slowmovintarget ◴[] No.45656184[source]
Emacs for Mac is fine though?: https://github.com/jimeh/emacs-builds

That build has native compilation, and if you go for a Doom install you may need to build ripgrep yourself, but... that's also not difficult.

replies(2): >>45656246 #>>45660174 #
DonHopkins ◴[] No.45660174[source]
Oh sweet summer child.

http://xahlee.info/emacs/misc/emacs_macos_emoji.html

Color emoji was deliberately disabled on macOS (2016): policy first, parity later. Emacs 25 turned off multicolor fonts on the Cocoa port even though they worked, with a NEWS note saying they’d be re-enabled "once it is also implemented in Emacs on free operating systems." This was widely read as a political parity requirement that penalized macOS users for years.

https://www.gnu.org/prep/standards/standards.html

"Prefer GNU/GNU-Linux" development time: an explicit guideline. GNU’s own standards advise spending time on features "useful on GNU and GNU/Linux, rather than on supporting other incompatible systems." That guideline has often been cited in Emacs discussions to argue against platform-specific work that would land only on macOS.

https://irreal.org/blog/?p=13137

https://xenodium.com/emacs-send-to-aka-macos-sharing-merged-...

macOS-only features face extra process friction, or must be generalized. The "send-to" (macOS Sharing) patch was finally merged in 2025 -- but only after a lengthy debate and a rework into a cross-platform framework to satisfy GNU policy concerns about adding features that target a non-free OS first. (The end result is good! -- but the path illustrates the extra hurdles for macOS-first work.)

https://bitbucket.org/mituharu/emacs-mac

Long-running reliance on mac-specific forks to get a polished UX. For years, many mac users have depended on Mitsuharu Yamamoto's Emacs Mac port (emacs-mac) or distributions like Aquamacs to get native scrolling, gestures, font/rendering tweaks, and other integrations that either lagged upstream or weren’t accepted. The continued popularity and active maintenance of these forks reflects a gap in first-party mac attention.

https://xlii.space/eng/emacs-the-macos-bug/

https://news.ycombinator.com/item?id=44737676

Recent high-profile macOS performance pathology highlighted as "non-primary platform" pain. In 2025, a widely-read analysis ("Emacs: The macOS Bug") traced severe jank/memory growth to how Emacs drives Cocoa’s runloop (e.g., NSApp run usage inside the select/IO path), arguing that historical architecture -- plus macOS not being a primary target -- left deep issues unaddressed for years. Follow-on bug threads on emacs-devel discuss memory fragmentation and event handling. This is more engineering history than politics, but it shows practical consequences of platform de-prioritization.

https://www.gnu.org/philosophy/applying-free-sw-criteria

FSF position on non-free systems frames the culture. FSF materials repeatedly emphasize using and prioritizing free systems. Even where they explicitly say they didn’t drop support for non-free OSes, the values signal still affects triage, reviews, and what maintainers feel comfortable merging first. This shapes outcomes like color emoji support and the review friction in the "send-to" patch.

https://lists.gnu.org/r/emacs-devel/2012-07/msg00287.html

https://www.gnu.org/software/emacs/manual///html_node/efaq/N...

https://aquamacs.org/features/

https://lists.nongnu.org/archive/html/emacs-devel/2008-03/ms...

2008–2010, the long, bumpy road to a native Mac port: During Emacs 23’s cycle the old Carbon port was "completely broken ... for almost a year," and was ultimately removed when the new Cocoa/Nextstep port was merged. For years many Mac users relied on forks (Aquamacs, Mitsuharu's "Emacs Mac Port") for a smoother experience, reinforcing the "not a first-class target" vibe.

https://www.reddit.com/r/emacs/comments/bek5b2/til_emacs_was...

https://www.tuhs.org/pipermail/tuhs/2025-April/031758.html

https://github.com/SimHacker/NeMACS/blob/main/src/config.h#L...

RMS isn't only against Emacs on Macs and Windows. He also has some strong opinions about UniPress Software, who sold a version of Gosling's Emacs for Gosling's own NeWS window system, Apple Lisa, Mac, MS-DOS, Amiga, Xenix, SGI IRIX, Intergraph, xePIX, Northern Telecom, Cadmus, DEC Rainbow, VMS, VAX BSD, DECWRL Titan, TI Professional, Masscomp, Apollo, HP, Stride, AT&T 3B, System V, Gould, NBI U! ("Nifty Box"), Pyramid, Perkin-Elmer, Cray UniCos, and many other proprietary Unix systems.

https://news.ycombinator.com/item?id=28419139

>I worked at UniPress on the Emacs display driver for the NeWS window system (the PostScript based window system that James Gosling also wrote), with Mike "Emacs Hacker Boss" Gallaher, who was charge of Emacs development at UniPress. One day during the 80's Mike and I were wandering around an East coast science fiction convention, and ran into RMS, who's a regular fixture at such events.

>Mike said: "Hello, Richard. I heard a rumor that your house burned down. That's terrible! Is it true?"

>RMS replied right back: "Yes, it did. But where you work, you probably heard about it in advance."

>Everybody laughed. It was a joke! Nobody's feelings were hurt. He's a funny guy, quick on his feet!

replies(2): >>45660945 #>>45662070 #
1. hirvi74 ◴[] No.45662070[source]
I've got another one for macOS. It's not as significant as what you listed, but it was extremely annoying for me.

When using homebrew, the default package for emacs is version 30. However, that version on macOS was compiled with an outdated tree-sitter version (v14). If one tries to install a tree-sitter parser for a particular language it will not work with emacs 29 or 30 on macOS (or at least not that I could figure out). I tried the D12Frosted version and some of the alternatives for macOS (I forget the names).

The current tree-sitter project is on v15+, so in order for it to work, one has to go through the commit histories for each language and find when the tree sitter's parser version was last compatible with v14. To my knowledge, this was not clearly listed in all the git commits in a nice clean manner.

One alleged workaround was to install everything via RedHat OS and move the installed parsers over to macOS since their version of emacs and the tree-sitter parsers are still compatible. However, I was not interested in doing this.

Interestingly enough, Neovim does not have this issue on macOS to my knowledge, but I could be wrong.

Now, this is not entirely an emacs issue, but it does introduce an interesting issue. If emacs has to be compiled with a particular tree-sitter version, then it makes things quite difficult to maintain. The maintainers apparently are discussing various options on how to handle this going forward, but there isn't a clear way to work around this.

Now, I do believe if one builds emacs from source, he or she can work around this issue to some degree, but I was also not interesting in doing this because one loses out on some of the nice features that the macOS focused emacs versions come with. I also did not want to install all the dependencies required to build from source since those dependencies are not something I have any other use for other than building emacs.

So, I just gave up on the tree-sitter. Though, I think emacs 31 has this fixed until it happens again, but I also encountered a lot of other bugs when trying other use it since it's a prerelease version anyway.

This was all months ago, so maybe things have changed. I haven't kept up. I can live without tree-sitter for the time being.