Emacs, Java, and the Finger-Twisting History Between Them

You probably know that Java was developed by James Gosling. You might also know that Guy Steele helped shape its formal side, co-authoring the Java Language Specification—the sacred text of curly braces.

You’ve probably also heard of Emacs—the legendary, finger-contorting text editor that turns every shortcut into a game of musical digits. Richard Stallman is the name behind GNU Emacs, the most enduring version. But Emacs actually predates Stallman. It was none other than Guy Steele himself who first started hacking Emacs into existence. Yes, the very same Guy Steele who helped define Java. Emacs and Java—separated by decades, joined by fingerprints.

When UNIX machines entered the scene, guess who ported Emacs to UNIX? James Gosling. Yep. The Java guy. So yes, Java has Emacs DNA. Deeply nested, like any good Lisp expression.

When IDEs Were Buggy and Emacs Was the Only Friend You Had

I personally used Emacs a lot during the early Java years—before Java 1.4, I think. IDEs back then? Painful. I remember Borland’s JBuilder actually miscompiling code. If you threw an exception inside a static block, it would silently vanish. IDEs had their own compilers so they could give you autocomplete and inline errors. But if you wanted to compile with javac, the actual Sun compiler, Emacs was the sanest option.

Meanwhile, in Vi Land…

Let’s not forget Bill Joy, co-author of the original JLS. He created the vi editor—the polar opposite of Emacs in every way. Where Emacs is an operating system disguised as a text editor, vi is a challenge disguised as punishment. And yet, both editors helped shape Java’s early years.

The Recursive Rabbit Hole

GNU stands for “GNU’s Not Unix”, a delightful example of a recursive acronym. But it wasn’t alone. Other Emacs forks were named things like EINE Is Not Emacs and ZWEI Was EINE Initially. Nerds love recursion. Emacs is mostly written in Lisp, and that alone explains a lot. Lisp—home of parenthesis and purity—solves problems with recursion and avoids variables like social contact.

No wonder it spawned recursive acronyms. Even outside computing, we got “VISA” — Visa International Service Association. It’s a vibe.

Java vs. C# – The Divorce

C# showed up in the early 2000s during the messy divorce between Sun and Microsoft. Microsoft refused to fully implement Java 1.1 in their JVM. And suddenly we had a new language: C#. Early C# was suspiciously Javaesque. The feud started around 1997, and at OOPSLA 2002 in Seattle, I asked Anders Hejlsberg directly. His answer? “Of course I looked at Java. But really, I had the same goal: to make a simpler C++.”

Open Source… Sort of

Java went open source around version 6, but then things got political. Some members of the Java Community Process refused to sign off on new features unless Java Micro Edition—the version for mobile—was made free and open too.

Java 7 was delayed. C# surged ahead. I got bored.

Google also got impatient and launched Android. It used Dalvik, a kind of Java-but-not-really VM. Oracle sued. The licensing drama continued.

Enter: Lisp, Clojure, and Full-Circle Emacs

Features I longed for never arrived in Java. So I drifted toward Scala… and then Clojure. Clojure is a Lisp. And very quickly, it became the most popular Lisp ever. Naturally, I found myself back in Emacs—now in its true habitat, surrounded by parentheses and philosophy.

Full Circle: Lisp Inside Java

Guy Steele, inventor of the first Emacs and co-author of Java’s spec, once said:

“We were after the C++ programmers, and we managed to drag a lot of them about halfway to Lisp.”

And James Gosling, when asked at a Java User Group Q&A, “If you could do Java over again, what would you change?” reportedly answered:

“I’d leave out classes.”

Sometimes you can hear Lisp whispering inside the Java VM. It’s not loud. But it’s there—buried under syntax and ceremony. And if you squint, you can still see Emacs in the corner… silently watching, parentheses in hand.


All #art #clojure #csharp #data-structures #database #datomic #emacs #functional #haskell #history #immutability #java #jit #jmm #lambdas #lisp #pioneers #poetry #programming #programming-philosophy #randomness #rant #reducers #repl #smalltalk #sql #threads #women