GNU ELPA Installs Minuet-ai.el Despite Stallman SaaSS Objection


Minuet in GNU ELPA: How a Package That Steers Users to SaaSS Was Installed Despite Stallman’s Objection

By Jean Louis
September 2026


Introduction

In March 2025, Milan Glacier submitted minuet-ai.el to the Emacs development mailing list. Minuet is an LLM-powered code completion package for GNU Emacs. It shows AI-generated code suggestions as ghost text inline as you type — similar to GitHub Copilot, but implemented as free Emacs Lisp.

Richard Stallman, the founder of the GNU Project, responded directly. He said the package could not be added to GNU ELPA. He said it raised “a deep moral question” and that the GNU Project needed a careful decision before acting.

The package was installed anyway. It remains in GNU ELPA today.

This is the story of how that happened, why it matters, and what it reveals about the gap between GNU’s stated principles and its current practice.


Part 1: What Is SaaSS, and Why Does It Matter?

To understand why Minuet is a problem, we must first understand what Service as a Software Substitute (SaaSS) is, and why the GNU Project considers it an injustice.

The Definition

In his essay Who Does That Server Really Serve?, Richard Stallman defines SaaSS as:

“Using a service as a substitute for running your copy of a program. Concretely, it means that someone sets up a network server that does certain computing activities — for instance, modifying a photo, translating text into another language, etc. — then invites users to let that server do their own computing for them.”

The test is simple. Stallman provides a thought experiment:

“Suppose that all parts of the activity are implemented in free software and you have copies, and you have whatever data you might need, as well as computers of whatever speed, functionality and capacity might be required. Could you (if given those prerequisites) do this particular computing activity entirely within those computers, not communicating with anyone else’s computers?”

If the answer is yes, the activity is your own computing. Doing it via someone else’s server is SaaSS — and it is unjust.

Why SaaSS Is Worse Than Proprietary Software

Stallman explains that SaaSS servers “wrest control from the users even more inexorably than proprietary software.”

With proprietary software, you at least receive an executable file. You can inspect it (even if it is hard), and you can sometimes change it. With SaaSS, you do not even receive the executable that performs your computing — it runs on a server you cannot see or touch.

“SaaSS is equivalent to running proprietary software with spyware and a universal back door. It gives the server operator unjust power over the user, and unjust power is something we must resist.”

The “Mixed Service” Problem

Stallman also warns about services that offer both free and SaaSS functionality:

“Some sites offer multiple services, and if one is not SaaSS, another may be SaaSS.”

The presence of a free option does not neutralize the harm of a SaaSS option being available, default, or recommended.


Part 2: What Minuet Does

Minuet is an Emacs package that provides LLM-powered code completion. Its purpose is to send your code to a remote LLM service and return suggestions.

The Default Provider Is SaaSS

Minuet’s default provider is defined in its source code:

elisp (defcustom minuet-provider 'openai-fim-compatible "The provider to use for code completion. Must be one of the supported providers: codestral, openai, claude, etc." :type '(choice (const :tag "Codestral" codestral) (const :tag "OpenAI" openai) (const :tag "Claude" claude) (const :tag "OpenAI Compatible" openai-compatible) (const :tag "OpenAI FIM Compatible" openai-fim-compatible) (const :tag "Gemini" gemini)))

The openai-fim-compatible provider points to:

elisp (defvar minuet-openai-fim-compatible-options '(:model "deepseek-v4-flash" :end-point "https://api.deepseek.com/beta/completions" :api-key "DEEPSEEK_API_KEY"

A user who installs Minuet and does nothing else is sending their code to DeepSeek’s cloud API. That is SaaSS.

Every Built-In Provider Is SaaSS

Minuet defines these providers:

Provider Endpoint SaaSS?
codestral https://codestral.mistral.ai/v1/fim/completions Yes
openai https://api.openai.com/v1/chat/completions Yes
claude https://api.anthropic.com/v1/messages Yes
openai-compatible https://openrouter.ai/api/v1/chat/completions Yes
openai-fim-compatible https://api.deepseek.com/beta/completions Yes
gemini https://generativelanguage.googleapis.com/v1beta/models Yes

All six built-in providers use remote servers. Not one of them defaults to a local endpoint.

Local Use Exists, But Is Not the Default

Minuet’s commentary mentions local options:

“Minuet supports multiple LLM providers (OpenAI, Claude, Gemini, Codestral, Ollama, Llama.cpp, and OpenAI-compatible providers)”

This places SaaSS providers (OpenAI, Claude, Gemini, Codestral) and local options (Ollama, Llama.cpp) in the same list, as if they were equivalent. But they are not treated as equivalent in the code. The SaaSS providers have ready-made configurations. The local options require the user to construct a “Custom Endpoint” from scratch.

This is the pattern Stallman warned about: the SaaSS path is the path of least resistance, and the local path is a manual override that most users will never find.


Part 3: Why This Violates GNU’s Stated Principles

The GNU Coding Standards

The GNU Coding Standards, node References to Nonfree Software and Documentation, states:

“A GNU program should not recommend, promote, or grant legitimacy to the use of any nonfree program. This principle likewise applies to anything operating online that is morally comparable to a proprietary program — such as a web site that requires users to run the site’s nonfree software, or invites them to surrender control of their own computing to that site’s server.”

SaaSS services invite users to surrender control of their own computing to a server. The Standards say GNU programs should not recommend, promote, or grant legitimacy to them.

Stallman’s Statements on LLMs

Stallman has stated repeatedly that LLM clients are SaaSS and should not be recommended:

“As for LLMs that run on servers, they are a different issue entirely. They are all SaaSS… and SaaSS is always unjust.”

And:

“If there are no LLMs for use with Hermes that we can recommend, we should not recommend Hermes either.”

Stallman’s Explicit Decision on Minuet

On March 12, 2025, Stallman responded to the Minuet submission on emacs-devel:

“Minuet-ai cannot be added to NonGNU ELPA now. It raises a deep moral question — we need to figure out which side of a moral line this is on.”

He explained:

“The package appears to integrate SaaSS functionality as an internal part of Emacs. Since SaaSS is unjust, much like a nonfree program, we must not integrate it into the GNU system. Since there are no close precedents, this is a decision that requires careful thought.”

On April 5, 2025, Stallman confirmed the situation was unresolved:

“The question of whether it is ok to include (or recommend) Minuet in a GNU package has not been decided. We were in the middle of the discussion when it was installed.”

Stallman said the package could not be added. He said the question had not been decided. Yet it was installed.


Part 4: The Installation

Minuet first appeared in GNU ELPA around April 1, 2025 (version 0.4.4). It has been continuously updated since. As of this writing (September 2026), it is at version 0.10.0.

The package is in GNU ELPA — the stricter of the two ELPA archives, reserved for packages that are considered part of GNU Emacs or closely associated with it.

This means:

The “Mixed Package” Problem

A common defense is that Minuet “can be configured” to use local models. This is true. But it misses the point, which Stallman has stated clearly in the ongoing hermes.el discussion:

“The issue is not which sites the package allows, but which sites it suggests.”

Minuet suggests six SaaSS providers by defining them, naming them, giving them endpoints, and making one of them the default. It does not suggest any local option in the same way. Local use requires the user to know that it is possible, to find the provider list, and to construct a custom endpoint manually.

This is not a free choice between equivalent options. It is a funnel disguised as a menu.


Part 5: Why Third-Party Computing Should Never Be Recommended by GNU

The GNU Project’s mission is not merely to distribute free software. It is to teach users to value their freedom and to control their own computing.

When GNU recommends a package that steers users to SaaSS, it does the opposite:

1. It Teaches Users the Wrong Lesson

Stallman explains:

“Most users and developers of computing are hardly aware of this issue. Our mission is to spread awareness of it — especially to our users who are ignorant of the issue. We can’t tell ourselves ‘It is each user’s responsibility to check each program,’ because they need us to teach them the idea and the goal.”

If GNU itself recommends SaaSS, users will conclude that SaaSS is acceptable. The lesson they learn is the opposite of what GNU exists to teach.

2. It Gives Away Control of User Data

SaaSS is equivalent to spyware. As Stallman writes:

“Unlike proprietary software, SaaSS does not require covert code to obtain the user’s data. Instead, its structure requires users to send their data to the server in order to use it.”

When a user’s code is sent to DeepSeek, OpenAI, or any other remote service, that service receives the code. It may store it, train on it, or leak it. Publishing the output under a free license does nothing to protect the input.

3. It Makes Users Dependent on Third Parties

Stallman warns:

“When users become dependent on one, it can gouge them at will with repeated small price increases that over time add up to a lot.”

A user who relies on Minuet’s default provider is dependent on DeepSeek. If DeepSeek raises prices, changes terms, or discontinues service, the user must reconfigure or lose functionality. GNU should not create this dependency.

4. It Contradicts GNU’s Own Distribution Standards

The Free System Distribution Guidelines state:

“The distribution should not have a repository of non-free software, nor instructions for installing non-free software. It should not point to third-party repositories that do not commit to containing only free software.”

GNU does not list Debian as a free distribution because of its optional non-free repository. The same standard should apply to packages: no user is forbidden from using SaaSS by their own choice, but the project should not steer them there.


Part 6: What Should Happen Now

Stallman has said the question “has not been decided.” But the decision he stated was clear: Minuet “cannot be added” because it raises a moral question that has not been resolved.

The correct action is simple:

  1. Remove Minuet from GNU ELPA until the question is decided.
  2. Apply the same standard consistently to other packages that steer users to SaaSS: hermes.el, codex-ide, gptel, aidermacs, and others.
  3. Develop free alternatives — local LLM inference using free drivers, free models, and free software — and recommend those.
  4. Make the policy explicit so that future package submissions know what is expected.

GNU’s example matters. When it recommends a package that steers users to SaaSS, it teaches users that SaaSS is acceptable. When it removes such a package, it teaches users that freedom is worth protecting.


Conclusion

Minuet is a well-written package. Its author is not a villain. The problem is not the code — it is the default and the recommendation.

GNU’s philosophy is clear: third-party computing should never be recommended by GNU. SaaSS is unjust, much like nonfree software. A GNU package that steers users toward SaaSS contradicts the very mission of the GNU Project.

Richard Stallman said Minuet could not be added. He said the question had not been decided. Yet it is in GNU ELPA.

This is not a personal attack. It is a policy question. And the policy, as stated by the founder of GNU, is that packages must not steer users toward SaaSS.

Until a genuinely free LLM exists, and until packages can be configured to use it without steering users elsewhere, Minuet should not be in GNU ELPA. The same standard should apply to every package that does what Minuet does.

GNU should set the example. Not follow the industry’s.


References


Jean Louis is a free software advocate and supporter of GNU projects. He writes about GNU, Emacs, and digital freedom at gnu.support.