Hacker News new | past | comments | ask | show | jobs | submit login
My Resignation from Emacs Development (lists.gnu.org)
77 points by jordigh 17 days ago | hide | past | favorite | 65 comments



Emacs is in the process of moving from legacy languages modes using regexps and elisp for syntax analysis to new modes using tree sitter.

In this context, what does a name like "c-mode" should mean? Options: 1) it should stick to the old mode, cc-mode here. To use the new mode, use explicitly c-ts-mode; 2) it should move to the new tree sitter mode, c-ts-mode. To use the old mode, use explicitly cc-mode; 3) it should mean the new preferred Emacs mode, with a way for the user to take back control if they have a different preference. This preferred mode will change at some point from legacy to tree sitter.

The change is (3), with a move to tree sitter in Emacs 30 (to be released soon) IIUC. It makes sense to me. Saying that anyone own a name as generic as "c-mode" in an open source project just because they're first and have a long history as a contributor (thanks by the way!) seems excessive. Change of default is normal in an evolving project, and as long as it's clearly documented with a way to override (which is the case IIUC) it's fine to me. One can dislike the change, but it's impossible to please everyone anyway. Emacs users are used to adjust configuration based on their preferences.

I understand it can be an emotional situation for the maintainer of the legacy mode. But I don't see the need to call foul play.


I agree with giving users control, but unfortunately I cannot agree with the move to c-ts-mode. And I cannot disagree more with associating CC mode with "legacy" when it's objectively better than the other alternative, at least currently. I don't think Emacs developers are doing users a favor in this specific case.

CC Mode is extremely capable. Over the years it has developed to such a maturity that almost all needs can be satisfied, and performance has never been a problem for me. It contains very few, if any, bugs, that affect my use.

On the other hand, the tree-sitter major modes are not at al production-ready to be considered as default. For one thing, the whole highlighting can break for complex macros and ifdefs. (I'd be glad to be enlightened whether it's theoretically possible to fix at all -- can you correctly highlight ifdefs without doing semantic analysis with the help of a compiler?) For another, CC mode has a feature called c-guess that can quickly analyze an existing source buffer and generate a format definition which proves extremely valuable. Alas, c-ts-mode has zero support for it.

I had high hopes for tree-sitter. I turned on tree-sitter modes for all my coding when it was out, and now I have zero enabled. They still have a long way to go and I don't want to spend time debugging emacs code at work. :-)

Tree-sitter is not a panacea. Fast parsing alone is not what makes a good major mode.


As someone whose pronouns are C-programmer/vim, I feel unsafe.

My living nightmare would be to develop highly verbose Java programs in an editor with 999 gorillion different "modes" with seemingly random names.

"oh, you're making an singletonfactoryfacade in Treesat-19 mode, you'll need to be using CCC-mode, treesat-19 mode is for factoryencapsulationfactory patterns"


And indeed, if anything, a project like emacs being unable to make a decision like this results in a project that slowly dies from the weight of its own history.

Tree-sitter is fairly universally understood now to be "the future." While cc-mode will likely have its place for a long time (hard to beat regexes on speed, even if they break down when the input is too noisy), moving the default to the tree-sitter implementation aligns with the other language modes going to tree-sitter. For good or ill, consistency is almost certainly better than new users having to learn "Your code is parsed by tree-sitter. Oh, except your C and C++ code, unless you set this flag, because Mackenzie threw a fit in 2024. That's a fun bit of history you get to care about forever now as a user!"


patch: https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-02/msg...

I think it makes emacs prefer the "new" Treesitter based c/c++ modes ahead of the venerable c/c++-mode that is older than most posters here, maintained by the email author.


I have briefly tried c++-ts-mode and it majorly clashes with clang driven indentation as provided by lsp modes (no, I'm not writing a TS config to match clang-format). I'm back to c++-mode.


I'd say the more sensible approach is to use `aphelia` and have it invoke the real life code formatter.


Seems interesting, but I like to run the formatter after (almost) every keystroke.


Is there no code review for making changes? And that patch is from feburary, why is this email drama happening only now? Genuine questions, I don't know much about emacs/gnu project development.


Minor changes aren't reviewed very much, major changes are typically reviewed when someone posts them on the list before committing them. The author is complaining that this is a major change, it's complicated his package (a heavily used one), and the problems haven't been resolved after many months.

Enacs-lisp relies on disciplined use of a single global namespace, with extremely long names. Using names from a part of the namespace that "belongs" to someone else is rude and IMO bad.


Oh, so that's why this was so ragequit-worthy: the global elisp namespace is delicate, and unilateral changes like this without consulting the maintainer of the stomped-over package is a big no-no.


[flagged]


Reverting would also be rude there. Their project culture assumes that you discuss on the list first. He couldn't very well commit without discussion when he's complaining that that other guy commits without discussion.


Sorry, I should have been more clear. Not unilaterally revert, but submit a reversion patch to the mailing list for discussion.



The timing and also the root issue: Alan wants the `c-mode` symbol to mean "The mode I maintain, named 'CC-mode". The (dare I say) community is moving in the direction of it meaning "The mode users want to use for C (and C++ and C-like) files" (note: IIUC, this has outsized impact on the entire emacs ecosystem because a lot of modes for c-like languages are built atop the user's c-mode to save a lot of repetition, so the c-mode is both a major mode in its own right and the support framework for several other modes).

Ultimately, "name ownership" isn't really a thing, it's going to be a lot more convenient to change one symbol's semantic meaning than to require an unknown number of additional dependent projects to remap to some other symbol, and while I respect Mr. Mackenzie's frustration, one's "ownership" is always limited when one works on free software collaboratively with others.


These names are not internal names, like identifiers in the C source code of vim. The names in question appear in lot's of users Emacs configuration files. And Emacs has been extremely reluctant to change the meaning of those names in the past. Doing it here contradicts an important expectations of long time users. This is not only about "name ownership" of some mode's maintainer.


Unless I misunderstand, the idea is that treesitter C-mode is supposed to be pretty-much a replacement for traditional c-mode, right? As in "In circumstances where I want to invoke the C-major-mode, I now want to invoke the one that uses treesitter?"

If so, shifting the interpretation of the `c-mode` symbol seems the right avenue to accomplish that goal.


No, Emacs has lots and lots of config variables and functions which depend on the exact mode used. So, if you switch the major mode, you also have to switch to other config variables and functions. And as far as I see it, c-ts-mode is far from being a drop in replacement for everyone that currently uses c-mode.


> Unless I misunderstand, the idea is that treesitter C-mode is supposed to be pretty-much a replacement for traditional c-mode, right?

you're very much mistaken.


Head of that (very long) thread containing an objection from third party Eli to code committed by the person resigning:

https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-11/msg...


Yeah, a basic "code ownership" check before merge would have been enough.


It reads like this is more of a bio problem than a digital problem.


you've misunderstood, no one is complaining about a lack of technical controls.


That would require the use of a 21st-century development workflow.


I hate seeing emacs and gnu people fighting like this.


A flame war written in unformatted plaintext on a public list serve actually makes me nostalgic for simpler times.


>A flame war written in unformatted plaintext on a public list serve actually makes me nostalgic for simpler times.

As a vi user I'll avoid taking sides on an issue I know nothing about, but when the author stated "...there is also a convention of treating eachother with respect on the mailing lists. Sadly this convention is superficial, and seems only to mean things like not using swear words..." it hit me right in the gut.

It's an issue in many OS projects. Heck, it's a problem in the larger policy world -- a similar sentiment is why I stopped doing technology policy, a childhood dream of mine.


There are two kinds of respect: "Treat me like an equal" and "Treat me like I have twenty years of experience and you don't."

These are not the same concept, and it's easy for people to use the same word and fail to realize they aren't the same semantics.


I wouldn’t say those are mutually exclusive.

All humans deserve respect, but a lack of respect for expertise - particularly scientific - is a major problem globally and why our “intelligent” species isn’t doing anything about climate change.


Oh, policy has always been a blood sport. You need a taste for conflict to enter the arena in the first place.

(Been working on tech policy for a very long time, with scars to prove it!)


Long-time contributors are so valuable to a project. I know that in some cases progress can be impeded by entrenched thinking from entrenched project members, but I think that for a FOSS project like Emacs they're the most valuable asset, above users, code, mindshare, features.

You can't let someone dictate direction just because they've been around a long time, or because they've sent a lot of patches. You also can't let someone have Wikipedia-editor-like feudal authority over some area just because they feel like they own it. I get that. Outside these cases though I think whatever can be done to keep core maintainers happy and on-board is probably best for the project and best for the ecosystem.


> Try using "Emacs" or even "free software" to mean something different, and see just how quickly you would hear back from Richard Stallman.

What would Stallman do is not the rubric I use for, well, anything really... But I can see how somebody who feels that way would be willing to cease to provide free labor because they believe they have lost control of something on account of it becoming too popular for them to maintain fiat authority over its use.

Fights between individual contributors can be so strange. I find that they frequently don't actually address the underlying issue because the underlying issue can be arbitrary and somewhat petty, and engineers don't want to think of themselves as either of those things. I once got into a long argument about folder nesting depth with a co-worker only to finally discover that the underlying issue was that I was using vs code (which tacitly penalizes you the way the UI works for shallow nesting) And he was using vim (and his configuration worked better if all of the relevant files were at the same level in the file system).

Once I realized the issue, I deferred to him on seniority and went about retooling my process to match to the existing process. But it took us a while to realize that was the underlying issue!


An unrelated project that has dealt with the problem at issue is Debian.

https://wiki.debian.org/DebianAlternatives

I understand the purpose of `major-mode-remap-alist' to be setting up a similar alternatives mechanism. If you have defaults, you have to have a winner.

The legitimate complaint is that there is a lot of code that expects `c-mode' to bring up cc-mode and builds on that, that might get loaded as a hook on `c-mode', and this will break if that function changes. It is also legitimate to expect a little discussion when something that might make your code appear obsolete is merged. When cc-mode was the default, c-ts-mode was the alternative, and you probably want a little bit of ceremony when making the switch.

The annoying part is viewing ownership of the `c-mode' function as somewhat absolute because you got there first. But when you have file variables that say, "mode: c", for c-like code, but you use c-ts-mode for editing c-like stuff, you really want it to load c-ts-mode and not cc-mode.

Also annoying is passive-aggressively putting in a change that messes up the mechanism "to spur discussion". That doesn't seem very collegial.

I'm just remarking on my understanding of the discussion. I'm not an Emacs maintainer by any means, just a user.


seems like a human issue (based on https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00...) and a bit of process one (too easy to step on someone's shoe in emacs-devel ?)

wonder what's a good course of action to restore peace and good spirit here


This is a little, uh, I don't know a polite way to say it, but is the author ok?

If you contribute code to a free software project, people are going to use, extend, or modify it. They don't have an obligation to ask permission or even inform you. That is kind of the point.

I agree that the change is maybe not the most well thought out and introducing ambiguity in the meaning of a symbol is probably bad software engineering in the long term. But to call it "an act of aggression" is unhinged.

In meme form:

> contributes code to a free software project

> someone else touches that code

> suprised pikachu face


You can't just send a pull request to Linus replacing ioctl with some function of you own writing, certainly not when it breaks other functionality. In meme form: one simply does not walk into Mordor.

And the author seems ok to me, just pissed off.


> people are going to use, extend, or modify it. They don't have an obligation to ask permission or even inform you. That is kind of the point.

That's all well and good, but the objection doesn't relate to someone exercising their software freedoms, it relates to the effects on the repository. If this happened in a fork then nobody could say anything, but if it happens upstream then it messes with the maintenance and development responsibilities of previously borne by Mackenzie.


It also messes with config files of lot's of users.


> Contributes code for 20 years.

> Somebody else makes breaking change to 20 years of work

> Project loses experienced maintainer of core feature.

> Surprised pikachu


Yes, with the added detail that the change was accepted to main and the author of c-mode feels like everyone was consulted but him, when the change is "replace c-mode."

I can definitely see how one feels pushed-out in that context.


what a weird comment to make. the author is upset that the project that they have worked on, for free, for decades, and has been a cornerstone of emacs as a programmer's editor, was unilaterally deprecated by an Emacs maintainer without any discussion.


Agreed. This read to me like the person had a pre-existing axe to grind.


They clearly had pre-existing beef, but also, you don't just break a 20-year-old important plugin without even telling the author. Especially if the guy who wrote it is on the short-list of core contributors with you. It makes sense that Alan feels totally disrespected.

I'd say it's the "straw that broke the camel's back," but this is less a straw and more a cinder block.


[flagged]


You kid but back during the XEmacs days, RMS did indeed argue a lot over the names. I think jwz wanted to call the original Emacs "FSF Emacs" and RMS was like, "no, it's just Emacs, and in fact, XEmacs is also just Emacs" or something like that, I don't remember.


I'd just like to interject for a moment. What you're refering to as Emacs, is in fact, GNU/Emacs, or as I've recently taken to calling it, GNU plus Emacs.


Yes, and since `emacs` by itself is otherwise unbound to a concept, we've all done the shortcut of `(defalias 'emacs 'gnu/emacs)` in our mental .emacs files.


Eight Mouse-corpses And Constantly Spewing?


[flagged]


> Re-using these names where appropriate is merely an act of consistency.

c-mode is a function name. Changing it replaces functionality. E.g., I've got references to c-mode in my .emacs (the startup file). Those now have to be replaced/updated, or they will act weird when I open a .c file. That's not ok. If you introduce a new editor mode, it's quite normal to give it another name.


I'm actually dealing with a really frustrating effect of csharp-mode being made part of emacs itself in version 29. I use spacemacs, and their csharp layer installs the csharp-mode package.. even though it doesn't need to in emacs 29.

Now every time I open a csharp file, it opens a new buffer showing a warning that the csharp-package is redundant and to please delete it. But if I delete the package, spacemacs reinstalls it...

It is super annoying when stuff like this happens, and took some hacking to deal with. So I understand the frustration that the emacs dev is feeling right now, and it's totally his right to resign.. but at the same time I'm not sure he's dealing with this situation well.

I used to get really angry about stuff like this and honestly I almost ruined my life because of how I reacted to things I didn't like. It's not a productive way to be.


Sure, but his baby just got ripped out of his arms and given to someone else. That's bound to make you feel something after all those years of labor of love.

I know I would make a bad OSS maintainer.


It's not re-using so much as renaming. The were two modes for C, one of which was the original and default, hence having the name (and associated namespace) of `c-mode`. This name was changed to point to the newer tree-sitter based mode, which was I suppose a way to mark it as the "default" but left the original mode without a unique name.

see also this nice response on the mailing list: https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00...

> This person is a raging lunatic;

I daresay you haven't an unblemished reputation for sanity yourself.


> you haven't an unblemished reputation for sanity yourself

What is your evidence?


We haven't even had the arraignment yet! Have you no respect for the proper criminal procedure?

If you want to sift through comments about you on HN for example: https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...

Among the many comments of praise and agreement there are several that reflect the impression I've gathered from your conduct in arguments on here, which is that you have said things in the heat of debate that are more emotion than rationality.

I don't think it's a big deal, and I'm not really interested in examining this in any greater detail.


You created the TXR language


Your HN comments.


This seems like an unnecessarily dismissive take; I’m not terribly familiar with the emacs ecosystem but the breach of protocol in committing the change and the impact on long-standing behavior seem like reasonable objections to me.


Emacs doesn't really do packages or name spacing the way most modern architectures do; symbols are exposed globally, which maximizes the ability to hook and mutate the system but also means that the top level, traditional global namespace can be contested territory between individual contributors that aren't working closely together.


I wonder how long they could go on with something like this.

There are a fair bit of features that are done better today than they were done decades back. Developer tooling has been getting better.

In fact today auto complete doesn't even mean what we had 5 years back, Same with code navigation. While sticking to backwards compatibility is good for your existing users(mostly older devs), that will also close the door for new comers.


Same with Unix. There can only be one /bin/sh. Debian "alternatives" and all that.


Then don't make your exit drama about function name "trademark" nonsense?

This is also nonsense:

> Try using "Emacs" or even "free software" to mean something different, and see just how quickly you would hear back from Richard Stallman.

To hear from Richard Stallman, you have to use "GNU Emacs" for your fork or unrelated project. GNU Emacs is not the first Emacs. Before that there was Lucid Emacs. GNU Emacs forked at one point giving rise to XEmacs.

The GNU project produced a clone of Unix, using all the same names for numerous utilities like "ls", "make" and "grep", as well as countless API functions.

Stallman may not like it when some people use "free software" for free-as-in-beer, or else when others insist that copyleft software is not free, but he's not a gatekeeper of the English language.

Someone else is almost as crazy is not a good justification.


GNU Emacs is not the first Emacs, but Lucid Emacs is a fork of GNU Emacs. Lucid Emacs eventually renamed itself as XEmacs (the "X" meaning "something" because they didn't know who owns the trademark as Lucid Inc went out of business.

Here's a timeline of Emacs https://www.jwz.org/doc/emacs-timeline.html


this take is dumb, perhaps because you're not familiar with emacs? it's a lisp machine where everything gets loaded in and stumbles around in one big global namespace, social coordination, not technical controls, is used to stop them messing with each other, and in this case it didn't happen.

the patch being complained about more or less unilaterally deprecated the extremely well-established C and C++ modes written by the email's author.


Namespaces won't solve the problem. If you have namespaces/packages you can have foo:c-mode and bar:c-mode.

But if you're always using the qualified names, they are not better than just prefixes like foo-c-mode and bar-c-mode. The point of packages is that you can set up a context where you can just use c-mode, which is one of those two: either foo:c-mode or bar:c-mode. Somehow that selection has to be made, and there it's possible to continue to have arguments and drama: which one should be the default one in a vanilla installation? Or do we barrage the user with a flurry of questions to resolve each such a conflict?

When the installation is complete, and the user opens a .c or .cc file, it has to be handled by a mode which is chosen somehow from among the alternatives.


Maybe how it should work is that the first time the user opens a .c file (or other related suffix) they get prompted for which mode they would like to handle it with. The choice is then remembered, but with the option not to remember ("just this once"). Gee, either I've seen that before or I'm a UX visionary.


Deleting other people's code/features is always a point of friction in any code base, not just open source.

People deeply care about watching their work survive and be used for eternity, and when they watch their work get deleted, or replaced they generally feel someone is going after their place.

Unfortunately this often goes against how progress works. If the state of affairs has to improve, newer things have to replace older things.

Emacs is just one of those things that can't move on because its existing users expect not only backwards compatibility, but the tool remain relevant to advanced users. Im guessing any change would evoke such a response.




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

Search: