summaryrefslogtreecommitdiff
path: root/public/emacs-as-an-os.md
blob: 2c949ce8bd51e61f693ec75a16d9408ca6e5659c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Emacs as an operating system
============================
---
date: "2013-08-29"
---

This was originally published on [Hacker News][1] on 2013-08-29.

[1]: https://news.ycombinator.com/item?id=6292742

Calling Emacs an OS is dubious, it certainly isn't a general purpose
OS, and won't run on real hardware. But, let me make the case that
Emacs is an OS.

Emacs has two parts, the C part, and the Emacs Lisp part.

The C part isn't just a Lisp interpreter, it is a Lisp Machine
emulator. It doesn't particularly resemble any of the real Lisp
machines. The TCP, Keyboard/Mouse, display support, and filesystem are
done at the hardware level (the operations to work with these things
are among the primitive operations provided by the hardware). Of
these, the display being handled by the hardware isn't particularly
uncommon, historically; the filesystem is a little stranger.

The Lisp part of Emacs is the operating system that runs on that
emulated hardware. It's not a particularly powerful OS, it not a
multitasking system. It has many packages available for it (though
not until recently was there a official package manager). It has
reasonably powerful IPC mechanisms. It has shells, mail clients (MUAs
and MSAs), web browsers, web servers and more, all written entirely in
Emacs Lisp.

You might say, "but a lot of that is being done by the host operating
system!" Sure, some of it is, but all of it is sufficiently low
level. If you wanted to share the filesystem with another OS running
in a VM, you might do it by sharing it as a network filesystem; this
is necessary when the VM OS is not designed around running in a
VM. However, because Emacs OS will always be running in the Emacs VM,
we can optimize it by having the Emacs VM include processor features
mapping the native OS, and have the Emacs OS be aware of them. It
would be slower and more code to do that all over the network.