unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Stephen Leake <stephen_leake@stephe-leake.org>
Cc: emacs-devel@gnu.org
Subject: Re: emacs-dynamic-module in Emacs Git?
Date: Wed, 03 Dec 2014 19:56:26 +0200	[thread overview]
Message-ID: <83iohs62id.fsf@gnu.org> (raw)
In-Reply-To: <85d281jbgn.fsf@stephe-leake.org>

> From: Stephen Leake <stephen_leake@stephe-leake.org>
> Date: Wed, 03 Dec 2014 04:04:40 -0600
> 
> >> > I don't think this is correct: we don't really want to export all the
> >> > symbols.
> >> 
> >> Why not?
> >
> > Security: you don't want to expose all of the Emacs bowels to any
> > external program out there.
> 
> There are many other aspects to security; I doubt this particular
> strategy will really help.
> 
> There are better ways to prevent bad code getting into Emacs; code
> reviewed signed modules is probably the best way.

See David's response, with which I fully agree.  I'm sure you had your
share of vulnerabilities exploited by bugs if not by malicious
software, and you know very well the dangers of such over-exposure.

> That's essentially how we currently prevent bad code in Emacs core.

How can we code-review modules that are not bundled?  We have no
control on those whatsoever.

> I'm advocating allowing any code that could be in Emacs core to instead
> by in a dynamic module, to allow separate development subject to the
> same restrictions as Emacs core code - FSF copyright, code review.
>
> Obviously, the ability to load dynamic modules allows users to choose
> other modules that do not meet those criteria. But that should not
> restrict what we can do in a dynamic module. We are _not_ building a
> sandbox, but a powerful development environment; people must be allowed
> to shoot themselves in the foot.

I'm okay with allowing people to shoot themselves, but I'm not okay
with letting them shoot Emacs.

What you suggest is a very slippery slope.  If we agree to such an
unlimited exposure of internals, I'm quite sure that before long we'll
have modules all over the place depending on those internals, and
their authors will apply pressure not to change the internals on which
they happen to depend.  I don't think we want Emacs development to
become hostage to every package out there.  No other project I know
of, not even libraries (whose proclaimed raison d'être is to expose
APIs) do that, and for very good reasons.  I see no reason why Emacs,
of all the packages, should do what no other one does.

> > Or ask yourself why the latest GCC and Binutils default to not export
> > anything, contrary to what they did in older versions.
> 
> I would guess that has more to do with namespace control, but I'd have
> to read the rationale to be sure.

Yes, that too.  Won't there be problems in that department as well,
e.g., if some library function replaced by Emacs clashes with its
namesake in the module?  With toy modules, this is not a problem, but
what about those that will use large libraries, where it's not so easy
to rename a function?  Again, very slippery slope.

> Since we are talking about code that is intended to be tightly
> integrated with Emacs, we _want_ the Emacs namespace to be visible.

I'm not sure who is "we" here.  I don't think I've heard Stefan, or
anyone else expressing such far-reaching desires.

> >> If we were writing this code to be included in Emacs core, we'd have
> >> access to all of the symbols.
> >
> > You can have access to symbols via specific protocols without
> > exporting everything.  And I'm not sure you really do need access to
> > everything.
> 
> Protocols tend to get in the way. If a pipe interface was viable, I'd
> use it. But it's not; I need direct, tight integration in order to be
> fast enough.

A software API is much faster than a pipe, so I don't see how this
comparison is useful, or even valid.

> I am very sure I don't need access to absolutely every symbol in the
> Emacs namespace. But it's not worth the time to try to figure out ahead
> of time which ones I might need. I can certainly provide a list of what
> was used after I've got a first version working.
> 
> Stefan's approach makes sense; try to define an API, but assume it will
> change/evolve. I'm simply arguing that it will not be worth the effort.
> The only way to find out is to try it.

Trying is fine, but it's a two-way street: expect the maintainers to
resist adding some of the symbols to your list.  There will be
negotiations, and at least I will object to granting access to
everything, which I consider insane in the long run.  Every interface
and every bit of internals we expose should be scrutinized to
determine whether exposing it is a good idea, how necessary that is,
what are its chances to change without notice, etc.

> >> _if_ the module author wants to be somewhat isolated from Emacs changes,
> >> and/or support more than one Emacs version, then they will want to stick
> >> to some stable subset. But I don't think we can define that subset ahead
> >> of time, and it will certainly be a different subset for each module.
> >> 
> >> We don't have a single .el file that defines the "Emacs core elisp API
> >> for packages"; I don't think we can define a .h file for modules either.
> >
> > You are just re-iterating my doubts about usability and wisdom in this
> > feature.
> 
> I don't understand.
> 
> You say it would be ok to add this code to core Emacs; all of the
> statements above would apply to that choice as well.

When code is added to the core, it is automatically updated when the
internals change.  That's the huge difference you are overlooking.

> We are talking about a dynamically linked module in a separate source
> repository, as compared to a staticly linked one in the core repository.
> Why should that choice affect the choice of the namespace that is
> visible to the module?

I hope by now you understand my answer to that question.

> >> Let's make it simple; export all of them.
> >
> > The other alternative is also simple; see GNU Make for an example.
> 
> By "the other alternative" I assume you mean "define an Emacs module
> API"

Not necessarily.  It should be enough to make a list of interfaces to
which we allow external linkage.

> that's _not_ simple. Proof: no one has done it yet, but "export
> all of them" has been done. QED.

:-)

Do take a look at GNU Make, though.  It might be useful to put our
case in context and in its true proportions.

> Note that there are actually two namespaces we are talking about here;
> the compile time namespace, determined by .h files, and the link time
> namespace, determined by --export-dynamic and/or link libraries.
> 
> The future maintenance issue is best addressed via .h files; don't put
> functions you don't want to support in future versions in any .h file,
> or have a naming convention that clearly indicates which .h files will
> be supported.

If we make the effort to create the header file, restricting the
linkage only to those interfaces is a trivial job.

> I don't see any reason to restrict the link time namespace.

It makes no sense whatsoever to allow linkage to interfaces that are
not declared in the header file.  Do you expect package authors to
reverse-engineer or disassemble Emacs in order to find that info?




  parent reply	other threads:[~2014-12-03 17:56 UTC|newest]

Thread overview: 265+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-17 12:46 Network security manager Lars Magne Ingebrigtsen
2014-11-17 13:56 ` Ted Zlatanov
2014-11-17 13:59   ` Andreas Schwab
2014-11-17 14:04     ` Lars Magne Ingebrigtsen
2014-11-17 16:13       ` Eli Zaretskii
2014-11-17 14:17     ` Stefan Monnier
2014-11-17 14:21       ` Lars Magne Ingebrigtsen
2014-11-17 15:00       ` Ted Zlatanov
2014-11-17 15:06         ` Ted Zlatanov
2014-11-17 17:31           ` Stefan Monnier
2014-11-17 18:06             ` Ted Zlatanov
2014-11-17 15:22         ` Lars Magne Ingebrigtsen
2014-11-17 16:04           ` Ted Zlatanov
2014-11-17 18:55             ` Lars Magne Ingebrigtsen
2014-11-17 16:22         ` Eli Zaretskii
2014-11-17 16:15       ` Eli Zaretskii
2014-11-17 16:11     ` Eli Zaretskii
2014-11-17 14:00   ` Lars Magne Ingebrigtsen
2014-11-17 16:13     ` Eli Zaretskii
2014-11-17 13:59 ` Stefan Monnier
2014-11-17 15:19   ` Stephen Leake
2014-11-17 15:24     ` Lars Magne Ingebrigtsen
2014-11-17 15:29       ` Kelvin White
2014-11-17 15:38         ` Kelvin White
2014-11-17 18:49         ` Lars Magne Ingebrigtsen
2014-11-17 18:58         ` Rob Browning
2014-11-17 19:07           ` Óscar Fuentes
2014-11-18  8:52             ` Sebastien Vauban
2014-11-18 14:54               ` Óscar Fuentes
2014-11-17 22:53         ` Lars Magne Ingebrigtsen
2014-11-17 23:16           ` Lars Magne Ingebrigtsen
2014-11-17 23:26             ` Lars Magne Ingebrigtsen
2014-11-18 15:19               ` Ted Zlatanov
2014-11-17 23:51           ` Lars Magne Ingebrigtsen
2014-11-18 14:41             ` Lars Magne Ingebrigtsen
2014-11-18 14:57               ` Rasmus
2014-11-18 15:01                 ` Lars Magne Ingebrigtsen
2014-11-18 19:44                   ` Achim Gratz
2014-11-18 19:48                     ` Lars Magne Ingebrigtsen
2014-11-18 15:03               ` Tassilo Horn
2014-11-18 15:10                 ` Lars Magne Ingebrigtsen
2014-11-18 15:23                   ` Tassilo Horn
2014-11-18 15:17               ` Ted Zlatanov
2014-11-18 15:30                 ` Lars Magne Ingebrigtsen
2014-11-18 15:40                   ` Lars Magne Ingebrigtsen
2014-11-18 15:45                     ` Lars Magne Ingebrigtsen
2014-11-18 16:04                       ` Ted Zlatanov
2014-11-18 19:49                     ` Achim Gratz
2014-11-18 19:53                       ` Lars Magne Ingebrigtsen
2014-11-18 19:55                         ` Lars Magne Ingebrigtsen
2014-11-18 21:17                         ` David Engster
2014-11-18 21:28                           ` David Engster
2014-11-18 21:54                             ` Lars Magne Ingebrigtsen
2014-11-18 20:47                     ` N. Jackson
2014-11-18 21:07                       ` Lars Magne Ingebrigtsen
2014-11-18 21:29                         ` N. Jackson
2014-11-18 21:36                           ` David Engster
2014-11-18 21:55                             ` Lars Magne Ingebrigtsen
2014-11-18 22:02                               ` David Engster
2014-11-19  0:05                               ` Stephen J. Turnbull
2014-11-18 10:12           ` Toke Høiland-Jørgensen
2014-11-18 15:10             ` Ted Zlatanov
2014-11-18 15:29               ` Lars Magne Ingebrigtsen
2014-11-18 15:58                 ` Ted Zlatanov
2014-11-18 16:15                   ` Lars Magne Ingebrigtsen
2014-11-18 16:35                     ` Lars Magne Ingebrigtsen
2014-11-18 16:41                       ` Lars Magne Ingebrigtsen
2014-11-18 17:00                         ` Lars Magne Ingebrigtsen
2014-11-18 17:23                           ` Ted Zlatanov
2014-11-18 17:28                             ` Lars Magne Ingebrigtsen
2014-11-18 17:40                               ` Ted Zlatanov
2014-11-18 17:47                                 ` Eli Zaretskii
2014-11-18 17:57                                 ` Lars Magne Ingebrigtsen
2014-11-18 17:43                               ` Eli Zaretskii
2014-11-18 17:54                                 ` Lars Magne Ingebrigtsen
2014-11-18 18:08                                   ` Eli Zaretskii
2014-11-18 18:13                                     ` Lars Magne Ingebrigtsen
2014-11-18 18:18                                       ` Lars Magne Ingebrigtsen
2014-11-18 18:29                                         ` Lars Magne Ingebrigtsen
2014-11-18 18:40                                           ` Eli Zaretskii
2014-11-18 19:19                                             ` Lars Magne Ingebrigtsen
2014-11-18 19:22                                               ` Eli Zaretskii
2014-11-18 19:26                                                 ` Lars Magne Ingebrigtsen
2014-11-18 19:55                                                   ` Eli Zaretskii
2014-11-18 19:24                                               ` Daniel Colascione
2014-11-18 20:40                                           ` Stefan Monnier
2014-11-18 20:49                                             ` Eli Zaretskii
2014-11-18 23:02                                               ` Lars Magne Ingebrigtsen
2014-11-18 23:31                                                 ` Ted Zlatanov
2014-11-19  8:37                                                   ` Lars Magne Ingebrigtsen
2014-11-19 11:17                                                     ` Ted Zlatanov
2014-11-19 11:23                                                       ` Lars Magne Ingebrigtsen
2014-11-19 11:46                                                         ` Ted Zlatanov
2014-11-19 21:11                                                       ` Toke Høiland-Jørgensen
2014-11-19  7:39                                                 ` Lars Magne Ingebrigtsen
2014-11-18 20:51                                             ` Lars Magne Ingebrigtsen
2014-11-19  2:09                                               ` Stefan Monnier
2014-11-19  3:55                                                 ` Eli Zaretskii
2014-11-19 13:40                                                   ` Stefan Monnier
2014-11-19 13:51                                                     ` Ted Zlatanov
2014-11-19 14:45                                                       ` Lars Magne Ingebrigtsen
2014-11-19 15:30                                                         ` Lars Magne Ingebrigtsen
2014-11-19 15:36                                                         ` Ted Zlatanov
2014-11-19 15:47                                                           ` Lars Magne Ingebrigtsen
2014-11-19 15:53                                                             ` Ted Zlatanov
2014-11-19 16:12                                                               ` Lars Magne Ingebrigtsen
2014-11-19 16:12                                                             ` EWW buffers Ivan Shmakov
2014-11-19 16:17                                                               ` Lars Magne Ingebrigtsen
2014-11-19 17:10                                                                 ` bug#19109: eww-setup-buffer: use set-buffer instead of switch-to-buffer Ivan Shmakov
     [not found]                                                                   ` <m3r3wznli0.fsf@stories.gnus.org>
     [not found]                                                                     ` <87sih9u4pa.fsf_-_@violet.siamics.net>
     [not found]                                                                       ` <v2tx1p4syz.fsf@fencepost.gnu.org>
2014-11-23 19:35                                                                         ` mailing control@, but requesting that no replies be sent there Ivan Shmakov
2014-11-24  0:22                                                                           ` bug#19109: " Glenn Morris
2014-11-24  6:50                                                                             ` Ivan Shmakov
2014-11-24  7:13                                                                               ` Stephen J. Turnbull
2014-11-24  5:00                                                                           ` bug#19109: " Stephen J. Turnbull
2014-11-19 22:27                                                               ` EWW buffers Stefan Monnier
2014-11-20  6:47                                                                 ` Ivan Shmakov
2014-11-21 12:16                                                                 ` Lars Magne Ingebrigtsen
2014-11-19 15:56                                                     ` Network security manager Eli Zaretskii
2014-11-19 22:23                                                       ` Stefan Monnier
2014-11-20 16:22                                                         ` Eli Zaretskii
2014-11-20 23:34                                                           ` Stefan Monnier
2014-11-21  8:10                                                             ` Eli Zaretskii
2014-11-21  9:24                                                               ` Lars Magne Ingebrigtsen
2014-11-21  9:40                                                                 ` Eli Zaretskii
2014-11-21 11:12                                                                   ` Lars Magne Ingebrigtsen
2014-11-21 10:36                                                                 ` Andreas Schwab
2014-11-21 13:30                                                                   ` Daniel Colascione
2014-11-21 15:05                                                                 ` Stefan Monnier
2014-11-21 15:02                                                               ` Stefan Monnier
2014-11-18 18:30                                         ` Eli Zaretskii
2014-11-18 18:41                                           ` Lars Magne Ingebrigtsen
2014-11-18 18:42                                             ` Eli Zaretskii
2014-11-18 18:24                                       ` Eli Zaretskii
2014-11-18 18:22                                 ` Ted Zlatanov
2014-11-18 17:28                     ` Ted Zlatanov
2014-11-18 17:36                       ` Lars Magne Ingebrigtsen
2014-11-18 17:44                         ` Ted Zlatanov
2014-11-18 18:10                           ` Lars Magne Ingebrigtsen
2014-11-18 22:09                         ` Toke Høiland-Jørgensen
     [not found]                     ` <87egt0792y.fsf@echidna.jochen.org>
2014-11-18 17:28                       ` Lars Magne Ingebrigtsen
2014-11-19  4:31                 ` Ted Zlatanov
2014-11-19  5:43                   ` Toke Høiland-Jørgensen
2014-11-19  8:44                     ` Lars Magne Ingebrigtsen
2014-11-19 11:09                     ` Ted Zlatanov
2014-11-19 11:19                       ` Lars Magne Ingebrigtsen
2014-11-19 11:41                         ` Ted Zlatanov
2014-11-19 11:50                           ` Lars Magne Ingebrigtsen
2014-11-19 12:11                             ` Ted Zlatanov
2014-11-19 14:16                               ` Lars Magne Ingebrigtsen
2014-11-19  8:46                   ` Lars Magne Ingebrigtsen
2014-11-18 20:50               ` Toke Høiland-Jørgensen
2014-11-18 21:06                 ` Lars Magne Ingebrigtsen
2014-11-18 21:10                   ` Toke Høiland-Jørgensen
2014-11-18 21:54                     ` Lars Magne Ingebrigtsen
2014-11-18 21:57                       ` Toke Høiland-Jørgensen
2014-11-18 22:13                         ` Lars Magne Ingebrigtsen
2014-11-18 22:18                           ` Toke Høiland-Jørgensen
2014-11-18 22:54                             ` Lars Magne Ingebrigtsen
2014-11-19  6:03                               ` Toke Høiland-Jørgensen
2014-11-19  8:55                                 ` Lars Magne Ingebrigtsen
2014-11-19 12:05                                   ` Garreau, Alexandre
2014-11-19 12:17                                     ` Lars Magne Ingebrigtsen
2014-11-19 12:26                                       ` Garreau, Alexandre
2014-11-19 12:29                                         ` Lars Magne Ingebrigtsen
2014-11-23 19:53                                         ` Lars Magne Ingebrigtsen
2014-11-23 19:59                                           ` Lars Magne Ingebrigtsen
2014-11-23 20:23                                             ` Garreau, Alexandre
2014-11-23 20:36                                               ` Lars Magne Ingebrigtsen
2014-11-23 20:41                                                 ` Lars Magne Ingebrigtsen
2014-11-23 22:24                                                   ` Lars Magne Ingebrigtsen
2014-11-23 22:30                                                     ` joakim
2014-11-30 13:38                                                     ` Stefan Monnier
2014-11-30 22:29                                                       ` Lars Magne Ingebrigtsen
2014-12-01  3:10                                                         ` Stefan Monnier
2014-11-19 14:35                                 ` Lars Magne Ingebrigtsen
2014-11-19 16:33                                   ` Toke Høiland-Jørgensen
2014-11-19 16:38                                     ` Lars Magne Ingebrigtsen
2014-11-19 21:00                                       ` Toke Høiland-Jørgensen
2014-11-18 21:23                 ` Ted Zlatanov
2014-11-18 19:45             ` Lars Magne Ingebrigtsen
2014-11-18 20:33               ` Toke Høiland-Jørgensen
2014-11-18 22:37                 ` Lars Magne Ingebrigtsen
2014-11-18 21:37               ` Toke Høiland-Jørgensen
2014-11-18 21:57                 ` Lars Magne Ingebrigtsen
2014-11-18 22:03                   ` Toke Høiland-Jørgensen
2014-11-18 22:13                     ` Lars Magne Ingebrigtsen
2014-11-18 15:22           ` Ted Zlatanov
2014-11-18 15:33             ` Lars Magne Ingebrigtsen
2014-11-18 17:03           ` Glenn Morris
2014-11-18 17:17             ` Daniel Colascione
2014-11-18 17:41               ` Eli Zaretskii
2014-11-22 10:27           ` Steinar Bang
2014-11-17 16:57   ` Romain Francoise
2014-11-17 18:30     ` Stefan Monnier
2014-11-18  8:29       ` Stephen Leake
2014-11-18 15:49         ` Stefan Monnier
2014-11-18 16:01           ` Ted Zlatanov
2014-11-18 16:24             ` Lars Magne Ingebrigtsen
2014-11-18 21:21               ` Toke Høiland-Jørgensen
2014-11-18 22:25                 ` Lars Magne Ingebrigtsen
2014-11-18 22:28                   ` Toke Høiland-Jørgensen
2014-11-22  5:24             ` emacs-dynamic-module in Emacs Git? Stephen Leake
2014-11-22 15:49               ` Stefan Monnier
2014-11-22 17:12                 ` Óscar Fuentes
2014-11-22 23:28                 ` Ted Zlatanov
2014-11-23 10:38                   ` Aurélien Aptel
2014-11-24  1:19                     ` Aurélien Aptel
2014-11-25 10:05                       ` Ted Zlatanov
2014-11-26 17:05                         ` Aurélien Aptel
2014-11-27  2:10                           ` Ted Zlatanov
2014-11-27 15:38                             ` Aurélien Aptel
2014-11-27 15:45                               ` Ted Zlatanov
2014-11-29 17:05                             ` Eli Zaretskii
2014-11-29 17:45                               ` Eli Zaretskii
2014-11-30 14:08                               ` Stefan Monnier
2014-11-30 15:42                                 ` Eli Zaretskii
2014-11-30 18:09                                   ` Stefan Monnier
2014-12-01  0:44                                     ` Ted Zlatanov
2014-12-01  3:41                                       ` Stefan Monnier
2014-12-01 10:31                                         ` Ted Zlatanov
2014-12-01 13:45                                           ` Stefan Monnier
2014-12-01 14:10                                             ` Aurélien Aptel
2014-12-01 14:47                                             ` Ted Zlatanov
2014-12-01 15:04                                               ` Stefan Monnier
2014-12-01 15:36                                                 ` Ted Zlatanov
2014-12-01 16:28                                                   ` Aurélien Aptel
2014-12-01 17:05                                                     ` Ted Zlatanov
2014-12-01 22:46                                                       ` Stephen Leake
2014-12-01 17:44                                                     ` Eli Zaretskii
2014-12-01 19:40                                                       ` Stefan Monnier
2014-12-01 20:19                                                       ` Ted Zlatanov
2014-12-02 21:22                                                         ` Ted Zlatanov
2014-12-04 20:40                                                           ` Aurélien Aptel
2014-12-05  1:02                                                             ` Ted Zlatanov
2014-12-05  2:43                                                               ` Ivan Andrus
2014-12-10  0:53                                                               ` Ted Zlatanov
2014-12-11 15:49                                                                 ` Aurélien Aptel
2014-12-11 14:35                                                               ` Ted Zlatanov
2014-12-01 19:12                                                   ` Stefan Monnier
2014-12-01 22:42                                                   ` Stephen Leake
2014-12-02  1:16                                                     ` Ted Zlatanov
2014-12-02  3:29                                                       ` Stefan Monnier
2014-12-01 16:21                                           ` Eli Zaretskii
2014-12-01 13:59                               ` Aurélien Aptel
2014-12-01 16:51                                 ` Eli Zaretskii
2014-12-01 22:58                                   ` Stephen Leake
2014-12-02  3:33                                     ` Stefan Monnier
2014-12-03  9:27                                       ` Stephen Leake
2014-12-03 13:57                                         ` Stefan Monnier
2014-12-03 17:41                                         ` Eli Zaretskii
2014-12-02  3:40                                     ` Eli Zaretskii
2014-12-02 17:58                                       ` Steinar Bang
2014-12-02 18:09                                         ` Eli Zaretskii
2014-12-03 10:04                                       ` Stephen Leake
2014-12-03 10:55                                         ` David Kastrup
2014-12-03 21:11                                           ` Stephen Leake
2014-12-03 17:56                                         ` Eli Zaretskii [this message]
2014-12-03 19:05                                           ` Stefan Monnier
2014-11-17 16:07 ` Network security manager Eli Zaretskii
2014-11-17 18:58   ` Lars Magne Ingebrigtsen
2014-11-17 19:05     ` Eli Zaretskii
2014-11-17 19:37       ` Lars Magne Ingebrigtsen
2014-11-17 19:49         ` Óscar Fuentes
2014-11-17 20:00           ` Lars Magne Ingebrigtsen
2014-11-17 20:31             ` Óscar Fuentes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83iohs62id.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=stephen_leake@stephe-leake.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).