iTerm2 — An Interview with George Nachman
George Nachman explains why he continued iTerm as iTerm2, the difficult problems inside a terminal emulator, and how he has kept it free and open source.
iTerm2 grew from George Nachman’s 2010 fork of the original iTerm project. For My Mac Apps Story, I asked him why he continued the abandoned project, how he approaches terminal compatibility and new features, and what has kept the free and open-source app going for so many years.
Interview by Ighor July for Reverse Everything.
Interview
Ighor July
What made you continue the original iTerm project as iTerm2?
George Nachman
Back in 2010 I was working at Google writing map reduce jobs that would take 3 days to complete so I always had a dozen tabs open in Terminal.app. At the time you couldn’t switch tabs with the keyboard, and it was so frustrating. I found iTerm, which solved the issue, but it had a couple really nettlesome problems. It was open source so I fixed the bugs that bothered me and posted a patch, but nobody responded - the project had been abandoned by its maintainers for a few months. I forked it and people started filing bugs, so I fixed those too. Eventually it had enough interest that it seemed worth making a 1.0 release.
Ighor July
What did you most want to improve when you started working on it?
George Nachman
Resizing the window would cause the app to hang for over a minute. The problem turned out to be really interesting. How should a terminal store scrollback history? The original terminal stored it as a giant 2-D array which in practice was mostly empty cells. I’m sure that every terminal has a different solution but it was a fun problem to play with.
Ighor July
What has been the hardest technical challenge in maintaining iTerm2 over so many years?
George Nachman
Although it is sadly irrelevant now, adding support for sub pixel antialiasing to the GPU renderer seemed impossible at first and I eventually found a solution that I’m still really proud of. I have a writeup of it here:
Ighor July
Was there a terminal compatibility problem that was especially difficult to solve?
George Nachman
The hardest problem is coordinating efforts to update protocols. In the old days Xterm was the canonical terminal and you just had to be compatible with it. Xterm rarely added anything new, but at least you knew when you had a correct implementation. Now there is no leader. Occasionally a good idea gains traction, but a lot of good ideas never progress because there’s no clear leader. Terminals are like an alternate-universe WWW that is smaller in scope and pound-for-pound more chaotic.
Ighor July
How do you decide which new features should be added to iTerm2?
George Nachman
Sometimes users make it clear what they want. Other times it arises naturally from being a user myself. As a developer I’m in a terminal all day and there are constant annoyances. It is a great joy to be able to scratch these itches.
Ighor July
Which important feature came directly from user feedback?
George Nachman
Folding terminal content was a frequently requested feature. It broke the basic data model, which is that history is deleted from the head and appended to the tail, so it took a long time to happen because I had to chip away at smaller problems until it became feasible.
Ighor July
What motivates you to continue working on iTerm2 after so many years?
George Nachman
I wrote my first terminal emulator when I was a freshman in high school. I’ve always enjoyed working on this particular problem. I like working in a small team on a project I use, especially if it has a big impact, and I enjoy client-side code more than server side work. Sometimes it seems like the only desktop apps left are web browsers and terminal emulators, and I’m grateful that I can make a dent in the terminal emulator world without a team of hundreds of other engineers.
Ighor July
What has made it possible to keep iTerm2 free and open source for so long?
George Nachman
At first it was a Google 20% project, which in truth was probably closer to a 50% project. Eventually I left big tech and now donations are what keep the project afloat. When I first started working the project, people emailed me asking how they could donate. That was puzzling, but I set up a donation page and they just started rolling in. More people give back to open source than I’d have expected, but my expectations were very low :)
Ighor July
What advice would you give to developers who want to maintain their apps for ten years or longer?
George Nachman
For me, the answer is to find a project that’s really engaging. I’ve always worked on iTerm2 because I want to, not because I have to. I am terrible at doing things I dislike. It’s also important for the project to have room to grow. A terminal emulator will never be complete because there are always quality-of-life improvements that can be made and the technology stagnated for decades, leaving a lot of low-hanging fruit.
If you get fed up with it, which definitely happens sometimes, it’s ok to take a break. It’s ok to declare email bankruptcy. It’s ok to make mistakes. Giving yourself permission to be human is the only way to avoid burnout over a long time horizon.
This interview is part of the developer interview series connected to My Mac Apps Story, Part 5.