All Episodes
Building iTerm2, the Popular Mac Terminal: George Nachman on Dev Tools in the AI Era | Main AI Episode 1

Building iTerm2, the Popular Mac Terminal: George Nachman on Dev Tools in the AI Era | Main AI

· 30:41

|
Aravind:

Thank you, George, for joining. I know that we have been moving this one for a quite a bit of times. And thanks for being really flexible and, accommodative. And then thanks for also joining on the morning of Pacific times, very early, maybe for you in the day. So I think for for the people who are on the podcast, who are listening this one, George, is, like, a very popular open source maintainer.

Aravind:

He, he's, like, known for his open source macOS terminal app called Iterm. Iterm is a very popular tool for developers. I think we all work on terminals day in and day out. Item 2 is is a very popular tool, that everyone uses it. I could not mention it how many times that we all use all sorts of shells, all sorts of plugins, tools, everything, but one single interface that we all forget probably it is item 2.

Aravind:

And then I'm really glad that we have, George here on the podcast. Hello, George.

George:

Hi. Thank you very much for having me. It's, it's a pleasure to be here.

Aravind:

So glad, to have you. And then I think I I just quickly hit hit it running. Like, you know, maybe, for the interest of, like, you know, audience, maybe you could give you a quick summary on, like, what you do for a living, how the item project start or something like that.

George:

Yeah. Sure. I'd be happy to. So I'm, self employed. I've been doing iTerm as my full time job for a couple years now.

George:

Prior to that, I worked in, at WhatsApp for a couple years. I worked at Google for a while before that. So I've been in the industry since 1998, which is it's a long time. The way the project got started is kinda interesting. I was, at the time, I was working at Google, and I just started working on web search.

George:

And my job there was to run a, run a program that would take 3 days to complete. It would go over, I forget how many billions of web pages and do some processing on them. And it was the most frustrating job that I've ever had because it would often fail after two and a half days, and I would have to start over again. And the only way that I could be productive was to to do 10 things at the same time. And I was using Apple Terminal, and it was driving me absolutely nuts because there was no way to change tabs, with the keyboard.

George:

And I was like, I can't do 10 things at the same time if I have to use the mouse every time I wanna change tabs. So I looked around, I found that there was an open source terminal called iTerm. I downloaded it. I could change tabs. I was very happy, but it was unbelievably slow.

George:

And so I said, well, it's open source. Now go figure out why it's slow, and I'll fix it. And so I fixed the problem. It took a a week or 2. I sent a patch to the maintainers, and they never responded.

George:

And so I forked the project and published my my changes, just in case anybody else would want it, not really thinking that anything would come of it. And, people started filing bugs against me. This was on Google Code, which was before GitHub came along. This is the best thing we had, back then was based on some version instead of git, but it had issue trackers and all that. So people started filing bugs.

George:

Well, some of these bugs are legit. I'll I'll fix them, because I'm still thinking the project is just for me anyway. And then there was an article in an online magazine, I can't remember which one, but it's like, I term is back. And I was like, oh, alright. I guess this is important.

George:

So I'm gonna do a 1 point o, and so I started engaging with the community and, fixing more bugs and adding features. Eventually, it took, I don't know, maybe a year or so before 1.0 was released, and, got a huge response. It's been a much bigger, hit than I had ever expected. And so I'm, you know, I'm still doing it for myself because I I love doing it. And it's I always wanted to have a terminal emulator that I could hack on, and, I think it's awesome that other people like it too.

Aravind:

Interesting journey. I mean, things like these don't happen every day. And then, you know, I think, it's interesting journey. But then more more on that as well is how do you, like, know is there any monetization thing with iTerm too? And are are there, like, it's like a foundation, people donate to?

Aravind:

How does it work? Maybe more Mhmm.

George:

It's donation based. So, you know, the the program itself is GPL licensed. It was when I took it over. That license will never change because I don't know who the authors were before I took it over. And then after I took it over, the copyright was assigned to Google.

George:

So we're, we're in GPL land, which is fine. I like GPL. But I'm not gonna be able to release a closed source product or an iOS app because of that. So that limits the monetization strategies. You know, this is my job, so, I've gotta try to put food on the table using this thing.

George:

Donations, I absolutely can't believe that it works, but it works. You know, it's not the same as big tech, but that's okay. I like it a lot better. And, you know, the way donations happen is somebody was like, hey, would you please put a donations link up because I wanna give you something. Really?

George:

Okay. I guess. And then, like, donations just started coming in. Oh, my gosh. Software engineers are amazing people.

George:

It's very generous. And, so I created a Patreon, Google Sponsors, and, that's where most of the donations come in. And there's a lot of individual donors who contribute through PayPal, and they don't really receive much in terms of benefits from donation besides a good feeling. I haven't tried to, you know, make lots of content only for sponsors or do anything like that. I I want donations to be because people are generous and they want to donate.

Aravind:

Yeah. I mean, I think GitHub after GitHub sponsors, a lot many people start thinking about it, like, to donate work and, to donate to tools that they use. And this is something that I've been doing, to other, tools that I use. I think probably I should also do it for item. I I haven't visited, the page also sometimes.

Aravind:

Right? You know? So it's pretty, like I said in the beginning, right, you know, I I kind of, like, whenever I get a new MacBook, I kind of install the first thing that I install is not a browser. I install a terminal opening the Mac terminal, and that's the only time that I use the Mac terminal. So it's it's kind of like a interesting, project and interesting tool.

Aravind:

But, you know, getting ahead in in the conversation, the journey has been fascinating in in a way for anybody, right, who is trying to build over open source and then, you know, survive and, like, continue to see their project grow. You know, what what sort of patterns have you seen, like, when developers interacting with terminal emulators, like, you know, this they want to ask, like, say, hey. Can you build a plug in ecosystem so that we could write plug ins? Hey, can you like, are there, like, big features or things like that?

George:

There have been some really interesting stories. And so Iterm has an API where you can write Python scripts that control the terminal. And the reason I created that was back in 2016, I was leaving Google, and I interviewed at WhatsApp. And the server team said, hey, can we talk to you? I was like, well, I'm a client developer, but sure.

George:

And so I go to a conference room, and there's every server developer there, and they're like, we love iTerm. Let me show you how we use it. And when they wanted to make a change to their production system, they would use AppleScript to create a window with 300 split panes, and they would broadcast input to all of them. And then they would run commands and sort of scan to see if there were any errors. And they said, well, the problem is we we bought more servers, but you can't create more than 300 split panes.

George:

And my reaction was, like, that's insane. I can't imagine anybody actually using the program this way. But it worked for them. Obviously, it wasn't gonna scale forever, and they're like, how how can we get more processes? Like, okay.

George:

There's so many things that need to be better to support what you're trying to do. The first is, like, this AppleScript is a mess. AppleScript is not a great language. Right? It's almost older than I am at this point.

George:

And, so he'd had lots of problems. The architecture of the app was never built to have that many sessions, so I came back from them and I was like, okay, there's a bunch of things I need to fix. It took many years to get around to all of it, But that was very motivating because I always I often see people doing extreme things, that I would never have guessed that they would do. I think this is true of all software, right? Users are so much more creative than developers.

George:

And so seeing seeing those things really highlights where there's room for improvement.

Aravind:

Yeah. Yeah. That's interesting. I think the the entire, like, you know, automation features have been really interesting, for item 2. For someone like me, I think who want to do this shell thing a bit more.

Aravind:

And, but then how do you kind of, like, you know, see the automation has evolved? Now that with AI powered tools, it looks like TeraMin itself is like becoming more mainstream. I have a friend who's who's been building something like call gen command so that, like, the commands get generated. It's more like in a, you know, auto com auto complete on steroids, something like that. But then there are new terminals.

Aravind:

I could not resist myself asking this question. Like, say, there are so many AI powered terminals now. I think what they've I've been talking to them a few weeks back. So so there are more terminals and, I think but then item is, like, I still a great, great product. So in general so how do you think about all the AI thing happening, and, what do you see about it for item?

George:

So I added a couple of AI features, was released over the summer. You know, I'm not I'm just one developer, so I can't reimagine the whole terminal from the beginning and start over. I don't think that that is particularly useful. I use AI all the time in my development, because I work alone. Just having someone to talk to makes such a big difference.

George:

Because sometimes I'll try to solve a problem and I'm kinda stuck, and honestly, just phrasing the question, is often enough to get me unstuck, so just having a conversation partner there is amazing. And, but then other times, let's say I'm trying to do something like I'm fighting with auto make, which is my personal least favorite thing to do in the world. Then I will turn on the AI features in iTerm. Be like, look, I'd wanna build OpenSSL, and there's a feature called CodeC Air that runs in the side panel where you give it a goal, and then it can suggest commands. It can see what's happening.

George:

And so it'll say, you know, clone this, run configure, and then configure will give an error. It will see the error, it'll be able to respond and say, Oh, it's because you're missing this dependency. Go download this package. And so it walks you step by step through this, you know, this thing that I never really wanted to do in the 1st place, and it makes it a lot less miserable. So I find a lot of value in AI there.

George:

It's also super useful for writing code, but I don't think or at least I haven't come up with a good way to integrate that into the terminal yet because, you know, maybe you write code in emacs or Vim. Emacs and Vim need to have that integration because they've got access to the full buffer and all the context you're working in. You know, the terminal is more like a browser. It doesn't have enough information to to really do that job well. Now there's also a feature where you can type in an English description of the command you wanna run, so rename all TXT files to dotdoc.

George:

You can hit a key. It'll use AI to convert that into a command and, you know, it'll put it in an editor where you can check it before it executes. That's really useful too. I never remember how to do battery names in UNIX. There's, like, all these little Unix things that you know are possible, but you can't remember how to do.

George:

So I get a lot of value out of AI in in that area as well. So I'm I'm always looking for new ways to expand it. People are very creative in what they've they've come up with ways to do. I think my main concerns are, you know, privacy is a big problem for a lot of people. I'm sure if I was still working at a big tech company, it would be incredibly frustrating knowing that there are these amazing things out there that I can't use because all the code is proprietary.

George:

Right? I can't share it. I can't share any information about what I'm doing. So local models are one solution to that. A lot of people use Ollama, which is easy to run on the Mac and is privacy respecting, so iTerm has support for that.

George:

Yeah. I I'd love to add more, but I'm looking for places where there's lots of value. I don't wanna waste my time doing things that aren't gonna have a lot of bang for the for the effort.

Aravind:

Oh, that was, like, the right approach in general. I think I I've seen a lot of AI features, tried a lot of, like, AI products, but I think, like, something that really moves the needle, improves the productivity and, like, I mean, even if it's like a wrapper that people call, but then still it's a lot of value. Right? I think Mhmm. I mean, what what AI codes generally do you use in your development workflow, like, in building item 2?

George:

Mostly, I use ChatGPT.

Aravind:

Okay.

George:

Because I'm used to it, and I know how to talk to it. And they've got a, you know, pretty nice macOS app as well, so it's very convenient to use. So I have it write code. Sometimes, I have it do code reviews. And it's actually really good for debugging too, when you get maybe an error message like a stack trace you don't understand.

George:

You know, I had one case where I was trying to debug a problem and it just didn't make sense. I gave it the stack trace and it pointed out that there was a function that the only way this could happen is if the function was reentrant, which was very hard to tell from looking at it. But once it had that insight, it's like, oh, okay. That explains everything. I can fix the bug.

George:

And again, it's one of those things where just having someone to talk to to work through your problem makes such a big difference.

Aravind:

Yeah. Of course. I think, I've been hearing this from a lot of these individual developers where, even for CodeRabbit, a lot many people buy 1 single seed. And initially, we were like, we don't know why people were buying 1 single seat for a product that's maybe more, team centric. Maybe couple of people would raise PRs and somebody want to review the PR.

Aravind:

But it means that, like, people want to review the code and then sometimes when it would not so many people. And then it is interesting to kind of, like, get a review opinion in your workflow and then probably run run, like, Lindt does. In fact, actually, I would want to say that there is, like, some sort of tonal instructions or tonal settings that you could do on the reviews. And then, we will play it around very interestingly and then, you know, it gives you interesting, review outcomes. So so yeah.

Aravind:

So I think maybe if you haven't tried, you should definitely give it a shot.

George:

But Yeah. I'll check that out for you. Doing code review on yourself is impossible. I'm not even gonna lie and say that I do a good job on reviewing my own code, Because every time I've gone through a code review, you know, it's it's not fun. They're finding problems and pointing out things you should've done better, and, it's it's painful to the ego.

George:

So having a machine to do it is is great because it'll be honest. It's not gonna be like, ah, it's probably fine. And, I think it also hurts the ego less. It's just the machine's opinion.

Aravind:

Yeah. But then, no. You know, I think, I see that developers are I mean, in general, especially senior developers mostly concerned about, you know, hey. I think I just don't want to hear an, you know, a plus one types of opinion because, like, AI confirms your reality, your bias sometimes. Right?

Aravind:

It doesn't kind of like generative AI, like, would not probably challenge you unless you ask it to challenge yourself, like, you know. So, there is that sort of hallucinatory problems and, like, you know, fact based or grounding it to a specific sort of a truth problem, especially with code and all. So, yeah, I get it. I completely get it.

George:

It's all the great thing about working you know, coding with AI is that, especially as a solo developer, I get to feel more like a senior engineer, where I'm, you know, asking it high level things like, please, you know, implement a binary search, whatever it is I need. Then it can go to the grunt work, and then more often, I'm reviewing its code. And, that process, you know, I get a lot out of it because I'm understanding the problem better, because I'm trying to find bugs and what it wrote. So the code reviews, there's actually a lot of value going in both directions.

Aravind:

Yeah. Yeah. I mean, I'm I'm really not going to lie at the same point that, you know, for this specific podcast, and I was thinking I was reading more about Iterm. I myself like a user, but I, you know, I I have a bias and then I have a lot of, like, you know, knowledge that I know, and then probably I make questions around it. And then I went to Cloud, and then I asked, like, you know, what sort of, like, questions that I could probably ask for a 10 minute emulator developer.

Aravind:

And then they've got into a lot of ideas, and then it was very interesting kind of different perspective, these LLMs can throw it to us. And also it differs. I do agree. Maybe I wish there are more larger models that we could load onto the system. The reasoning, the larger the model, the better the reasoning, and the better the outcomes.

Aravind:

So I think still maybe, like, proprietary models have an edge, but then I get it. I think, yeah, local models will help.

George:

What I really want is a model that can, can learn. You know, if you could give it your whole code base and then ask it questions about it without everything having to be in the context window, that would be such a game changer. Because what I would do with iTerm is I would have just remember all the commands you've ever run and the context around them. And then it would be able to suggest the next command. Maybe it would infer what it is you're trying to do.

George:

Right? You could show it a diff. I think, you know, for something like chat gpt, we have there are some models with giant context windows, but the performance is terrible. So it's not really ready to be that sort of very intelligent assistant yet.

Aravind:

Yeah. I think, there've been talks about or, like, there are several benchmarks that talk about needle in a haystack and things like that. But then I think, you know, when it comes to re there is no better, you know, validator than a real world, you know, people and use cases. Right? I think people validate much better than a benchmark.

Aravind:

Benchmark end of the day maybe can be, like, you know, know, tested upon a specific score and then, you know, you could probably look at it.

George:

And the models know about the benchmarks. Right? Like, there's thousands of articles about meal in a haystack, so they're cheating probably.

Aravind:

It's an interesting thing as well. I think maybe the model knows and then knows how to kind of, like, hack the main thing. So so about about maintaining. Right? I mean, in general, an open source project is not easy, especially a successful open source project and a maintainer.

Aravind:

People think like, you know, oh, well, there there were always more users than people who could send contributions. And then at some point, people are like, why does this guy doesn't respond? And like, you know, my well, you might be going through your own thing. How do you manage, like, you know, reviewing PRs or issues for item 2? And is there someone that you maintain the website, or releases?

George:

No. It's just me. I I haven't done a good job of getting other people, you know, involved as developers in the project, and I I don't know if it's me or if it's the particular project and the technologies involved. I actually don't mind. I like, working on with a small team.

George:

2 is better than 1, but, once it gets above 2, it starts to be more communication burden. So I don't mind. I think the project is, you know, still mostly objective c. It's 23 years old at this point, so there's no way I can go back and rewrite everything in Swift. Like, I'm not gonna live long enough to complete that task.

George:

Objective c is the most hated language, in the TOB index of of languages. You know, they do that survey. So that puts a lot of people off. Yeah. I do get pull requests, though.

George:

I think people get their, you know, whatever thing it is that bugs them, and they're gonna go figure out how to solve it. And some people, like, learn the language enough to get their their change done. I try to prioritize PRs because I know how much effort people go to. Issues on the other hand, you know, we're up to issue 11,000 something at this point. I've read every single one.

George:

You know, many of them take hours or days of work. I've been doing this since 2010. It's something like an average of, I don't know, 3 issues a day or something for 14 years. So that that's exhausting. I won't lie.

George:

I'm tired of issues. I I wish there were no bugs. But adding bugs is so much more fun than fixing them. That's it's never gonna end. So, you know, I I prioritize my my mental well-being, and sometimes I'll just, like, take a week off because it's a free product, you know.

George:

People's expectations need to be reasonable about, how long it's gonna take me to get back to them. And I try to be timely, and I, you know, I try to keep an eye on the things that have lots of comments that tends to bubble up to the top of the inbox. There's a thread with 30 comments like, maybe something's on fire. I gotta look at that. And there are jerks on the Internet.

George:

Always have been. I've been dealing with jerks online since I was in middle school, on VBSs, and and just ignore it. Don't let them get to you. Yeah. It's, you have to take some distance and doesn't really matter.

George:

Focus on what's really important. Right? Somebody has a lot of feelings, that's fine. You know, as a parent, I'm used to people spewing feelings, and you have to just acknowledge that and then try to get to the the heart of the problem and, you know, maybe someone is raging about how a bug hasn't been fixed for a long time. Well, let's figure out why the bug hasn't been fixed.

George:

Like, this is a there's probably a real problem at the heart of all of this. We're gonna get to that and solve the problem and, you know, just make progress because I don't have the time to try to fix people.

Aravind:

No. I think that that that's been, like, you know, a familiar thing that I have heard over and over from several maintainers, big projects, small projects, projects that are, like, getting a lot of traction. And then, you know, I think, it it's it's it's really common and then, you know, it's something that people should also like know. And then I think that open source folks are understanding. But also it's good that I term missing a place where not everybody would come and submit a PR, but then also, like, someone who's, like, extremely, like, thinking about that, a bug or a problem and then would want to do it.

Aravind:

I would want to ask this particular thing. Let's say, from your like I said, you spoke about models, all these AI things, the coding tools, and all. I would want to ask more questions on how do you, like, use, like, say, think about in future about how how this AI thing would pan out, for especially for developers. What is your opinion? Because you've been for so long, you have seen a lot.

Aravind:

And, and you've been you've seen something like Swift, and you also, like, put it in, like, Apple script and all of that. Right? So I think

George:

we'd love to know more about that. I think, yeah, I've heard LLMs described as a calculator for words, which I think is a really good metaphor. If all you have is a calculator, you're not gonna do any interesting new research in mathematics. But you probably aren't gonna miss your minus signs the way you would if you were just doing it all on paper. Right?

George:

So I don't see it as, like, robots are going to take over the world, kill all the humans, and have a much better society. Maybe that's pessimistic of me, but I I see it as another tool that's in our tool belt that lets us be more productive. Right? Like, I get a lot more done because I don't need to go write binary search by hand or, you know, whatever whatever it is I'm trying to do. I can have somebody else do the grunt work, and I can review it.

George:

I can make sure it's good. And so it's saving time. You know, this is obviously still early days, and it's gonna get a lot better. I think the way it's gonna impact developers is they're gonna be more productive. My suspicion is that you're not gonna get, large language models that are, you know, as smart and creative as humans.

George:

I think it's always gonna hit a wall. I think that language is not actually the way that you get to general AI. Maybe they'll get there some other way, but I think that's too far off to to speculate about. I think we'll get better and better LLMs, we'll get, you know, bigger context windows and, more functionality like web search. Like, I think it's gonna keep growing in those directions, and it's gonna keep being a better tool.

George:

And I think what's gonna what's gonna happen for developers like me is we need to provide the context to the AI system so that they have enough information to do their jobs. We're always gonna want to put them in a silo so they they don't have access to everything in the company, Right? But they have access to the source code that's relevant to this project. And so how do you do that? Right?

George:

Like, are you going to need to tell it you know, there's development environments, where you can say, like, here's my project, and it can go read the code and reason about it. And for a terminal emulator, you have to think, like, what is the user doing? What context does the user have in their head? And it's even more than that because they probably have multiple projects that they're working on. They may or may not be doing editing in the terminal, but they're probably running Git commands, or they're SSH ing into a server and doing maintenance.

George:

And so wouldn't it be great if the terminal had a way of providing enough context so that the AI can be helpful, like, hey, Here's a folder with a bunch of markdown documents that describe what our on call procedures are. And then the LLM sees that, like, oh, you're SSHing into a server, and you look to log, and there's an error. Here's how you should, you know, deal with that, or here's a suggestion for fixing the error. So I see, you know, my role is providing more context to the I to be more useful. What hasn't happened yet is I don't think it's really shook out how that should be provided best.

George:

Sticking it all in the context window doesn't feel quite right to me, and so I'm kinda waiting for the AIs to evolve long term memory before they really know what that's gonna look like from the terminal perspective.

Aravind:

Yeah. It looks like memory is one another dimension that a lot many people were working. There are several startups, people who are working on trying to retain at, you know, browser tab level. Right? At least to gain and, like, you know, reinject that.

Aravind:

And there are not so many frameworks. I think people are working on agents more than all of these things like that. But then I think, hopefully, we scale. We do much different, not only scale the architecture, but also scale, the base in different formats. Maybe we will also compress.

Aravind:

I think the same thing that happened with databases or several other areas would also come to LLMs as well. Like you're talking about literally ACLs. Right? Literally, the access control and all of that has ever existed in the in the kernel and in the Linux space. So I think similar sort of frameworks or tools should be there.

Aravind:

So and then I am really excited to see terminal being the core area where all of this will originate. And, that's something so exciting for, someone who's interested in terminals and the labs and things like that. But then, but then, yeah, I mean, pretty interesting, journey and, more about Iterm. I would love to would love to kind of, like, continue the conversations and then, you know, see what, AI, has to give us. So I I really thank you.

Aravind:

I mean, you've been really generous in your time as well, and and thank you for doing the podcast with me, George. And, would would definitely want to, like, you know, work closely and help see how we could also grow item community, and then and then do more with the open source.

George:

Awesome. Yeah. Thank you so much for having me. I really enjoyed our chat, and I'd be happy to do it again.

Aravind:

Thank you, George, and see you soon again.

George:

Okay. Bye.

View episode details


Creators and Guests

Aravind Putrevu
Host
Aravind Putrevu
Helping developers solve their problems!

Subscribe

Listen to Main AI using one of many popular podcasting apps or directories.

Apple Podcasts Spotify Overcast Pocket Casts Amazon Music YouTube
All Episodes