Evaluating Ersatz Emacsen

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:




(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.


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 C Jove License
zile 2005 2.4.11 C GNU GPL

And for the technical details:

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.


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.


Comments powered by Disqus