I have been an Emacs
user for many years and the key sequences have become
ingrained muscle memory to me. Since most Linux or BSD distros come with vi
installed by default, I have learned how to use it. But I still long for that
familiar fell of Emacs
under my fingers and, at the same time, wish there was
something with a smaller footprint than full GNU Emacs.
Well, such software does exist, under many different implementations as a matter
of fact. They are affectionately called Ersatz Emacs. Now that's a word your
don't see every day, Ersatz. Search google for ersatz definition
and you get
the following:
er·satz
ˈerˌzäts,ˈerˌsäts/
adjective
(of a product) made or used as a substitute, typically an inferior one, for something else.
"ersatz coffee"
synonyms: artificial, substitute, imitation, synthetic, fake, false, faux, mock, simulated; More
not real or genuine.
"ersatz emotion"
It seems that we can think of a an Ersatz Emacs as a fake emacs. And the Emacs
Wiki pretty much confirms that:
A 'nonextensible imitation' of a supposed implementation of an Emacs;
The culprits
The most common Ersatz implementations of Emacs
today are mg
, jove
, and
zile
. First let's learn a little bit about each of them.
Mg
is a lightweight public-domain Ersatz Emacs, dating back to 1986. Mg
was
originally known as Micro GNU Emacs, as it strove to adhere more closely to
the default behavior of GNU Emacs than other contemporary Ersatz Emacsen, but
was renamed at the request of Richard Stallman. Modern versions of mg
are
maintained as a component of the OpenBSD source tree; the editor is included as
standard in OpenBSD because there shouldn’t be any reason to learn more editor
types than emacs or vi. There is also a port available for Linux.
JOVE
(Jonathan’s Own Version of Emacs) is an open-source Ersatz Emacs
implementation. JOVE
is primarily intended for Unix-like operating systems,
but also supports MS-DOS and Microsoft Windows. JOVE
was inspired by Gosling
Emacs but is much smaller and simpler, lacking any form of LISP or other
extension language. It was originally created in 1983 by Jonathan Payne while at
Lincoln-Sudbury Regional High School in Massachusetts, USA on a PDP-11
minicomputer. JOVE
was distributed with several releases of BSD Unix,
including 2.9BSD, 4.3BSD-Reno and 4.4BSD-Lite2.
GNU Zile
("Zile Implements Lua Editors") "is a text editor development kit,
so that you can (relatively) quickly develop your own ideal text editor without
reinventing the wheel for many of the common algorithms and data-structures
needed to do so". Prior to version 3 its name expanded to "Zile Is Lossy
Emacs". Its goal was to be a lightweight Ersatz Emacs from the Free Software
Foundation emulating the behavior of its "big brother" in a small package, so
that Emacs users can feel at home in limited environments. For customization,
Zile
uses its own limited configuration language known as Zile Lisp. Zile
Lisp is a tiny subset of Emacs Lisp that consists of the Zile
commands plus
setq
.
Comparison
The main goal is to pick an Emacs-like editor to be used for quick edits in a
virtual host running a flavor of Debian Linux. To that end, I do not require any
customisation of the editor, and I want the smallest footprint in both disk and
memory.
Implementation |
First Appeared |
Latest Version |
Programming Language |
License |
mg |
1986 |
20150316 (linux port) |
C |
Public Domain |
jove |
1983 |
4.16.0.73 |
C |
Jove License |
zile |
2005 |
2.4.11 |
C |
GNU GPL |
And for the technical details:
|
|
Memory |
Implementation |
Size on Disk |
Virtual |
Physical |
Shared |
mg |
181 KB |
10564 KB |
2472 KB |
2284 KB |
jove |
197 KB |
8744 KB |
2648 KB |
2180 KB |
zile |
260 KB |
47272 KB |
3968 KB |
2584 KB |
The difference between Virtual, Physical, and Shared Memory
Time for a quick digression into what the different types of memory mean in Linux.
Virtual memory is the virtual size of a process, which is the sum of memory it
is actually using, memory it has mapped into itself (for instance the video
card's RAM for the X server), files on disk that have been mapped into it (most
notably shared libraries), and memory shared with other processes. Virtual
memory represents how much memory the program is able to access at the present
moment.
Physical memory stands for the resident size, which is an accurate
representation of how much actual physical memory a process is consuming.
Shared memory indicates how much of the Virtual memmory size is actually
sharable memory or libraries. In the case of libraries, it does not necessarily
mean that the entire library is resident. For example, if a program only uses a
few functions in a library, the whole library is mapped and will be counted in
Virtual and Shared, but only the parts of the library file containing the
functions being used will actually be loaded in and be counted under Physical.
Conclusion
zile
is the largest on disk and biggest memory hog of the three, so that's and
easy cut. jove
is slightly larger on disk than mg
, but it's Virtual memory
size is the best. mg
has the smallest footprint on disk and the smallest
Physical memory footprint. Plus, all of the BSD's and all the major Linux
distros have packages for the mg
, so that's the one I am going with.