Two decades of Git: A conversation with creator Linus Torvalds - https://www.youtube.com/watch?v=sCr_gb8rdEI It's been 20 years, almost to the hour, since Git was self hosted enough to write its initial commit. Did you expect to be sitting here 20 years later still using it and talking about it? Still using it, yes. Maybe not talking about it. I mean that was. Has been one of the big surprises by just how much it was basically how much it took over the whole CM world just because I saw it as a solution to my problems. And I obviously thought it was superior. Even literally 20 years ago to the day, I thought that first version, which was pretty raw, to be honest. Even that version was superior to cbs. Sure, but, but at the same time I'd seen CBS just hold on to the market. I mean, SVN came around, but it's just CBS in, in another guys, right? For many, many decades. So I was like, okay, this market is very sticky. Yeah, I can't use CBS because I hate it with a passion, so I'll do my own thing. I couldn't use bitkeeper obviously anymore, so I was like, okay, I'll do something that works for me and I won't care about anybody else. And immediately that showed. In the first few months and years people were complaining that it was kind of hard to use, not intuitive enough. Right. Then something happened, like there was a switch that. Yeah, well, you mentioned bitkeeper. Maybe we can talk about that a little bit. Pretty famously, you wrote the initial version of git in around 10 or so dates as a replacement for the kernel. Yes and no. It was actually fewer than. Well, it was about 10 days until I could use it for the kernel. Yes, but to be fair, the whole process started like December or November the year before. So 2004, what happened was Bitkeeper had always worked fairly well for me. It wasn't perfect, but it was light years ahead of anything else. I tried. But beatkeeper in the kernel community was always very, not entirely welcomed by the community because it was commercial, it was free for open source use. Because Larry McVoy, who I knew, really liked open source, right? I mean he, at the same time he was, was making a business around it and he wanted to, to, to sell bitkeeper to big companies. But not being open source and being used for one of the biggest open source projects around was kind of a sticking point for a lot of people. And it was for me too. I mean, to some degree I really wanted to use open source, but at the same time I'm very pragmatic and there was nothing open source that was remotely good enough. So I was kind of hoping that something would come up that would be better. But what did come up was that Tridge in Australia basically reversed engineered bitkeeper, which wasn't that hard because Bit Keeper internally was basically a good wrapper around SCCS, which goes back to like the 60s. I mean this is not an SCCS is almost worse than CBS. But that was explicitly against the license rules for Bitkeeper. Like Bitkeeper was like, you can use this for open source, but you can't reverse engineering and you can't try to kind of clone bitkeeper. And that made for huge issues. I mean we. And this was something private. So I was talking Larry and I was emailing with Fridge and we were trying to come up with a solution, but Tridge and Larry were really on completely opposite ends of the spectrum. And then there was no solution coming up. Up. So for. By the time I started writing Git, I had actually been thinking about the issue for four months and thinking about what, what worked for me and thinking about how do I do something that does even better than bitkeeper does, but doesn't do it the way bitkeeper does it? Because I did not want to be in the situation where Larry would say, hey, you did the one thing you were not supposed to do, right? So yes, the writing part was maybe 10 days until I started using Git for the kernel, but there was a lot of like mental going over what the ideas should be. Well, I want to talk about maybe both of those things. We can start with that kind of 10 day period. So as I understand it, you had sort of taken that period as a time away from the kernel and had mostly focused on git and isolation. What was that transition like for you to just be working on Git and not thinking about the kernel? Since it was only two weeks, it ended up being that way. It wasn't actually a huge deal. I'd done things like that just for like in the last 35 years. I've been on vacation a couple of times, right? Not very many times, but I have been like away from the kernel for two weeks at a time before. And it was kind of interesting because it was one of my reactions was how much easier it is to do programming and users right? You need to be. There's so much less you need to care about. There's. Yeah, you don't need to worry about memory allocations, you don't need to worry about a lot of things. And debugging is so much easier when you have all this infrastructure that you're writing when you're doing so it was actually Somewhat. I mean, I wouldn't say relaxing, but it was fun to do something user spacey where I had a fairly clear goal of what I wanted. I mean clear goal in the sense I knew the direction, I didn't know the details well, that's the other thing actually I want to talk about is one of the things I find so interesting about git, especially 20 years on is it's so the development model that it encourages to me seems so simple that it's almost obvious at this point. But I don't say that as a reductive term. I think there must have been quite a lot of thought into distilling down from the sort of universe of source control ideas down into something that became git. Tell me, you know, what were the sort of non obvious choices you made at the time to get what we have? The fact that you say it's obvious now. I think it wasn't obvious at the time. I think one of the reasons people found Git to be very hard to use was that most people who started out using git were coming from a background of something CBS like. And the git mindset. I came at it from a file system person standpoint where I had this disdain and almost hatred of most source control management projects. So I was not at all interested in kind of maintaining the status quo. Like the biggest issue for me was. Well, there were two huge issues. One was performance because when I back then I still applied a lot of patches, which I mean git has made almost go away because now I just merge other people's code. But for me one of the goals was that I could apply a patch series and basically half a minute, even when it was like 50, 100 patches, you shouldn't need a coffee to. Right, exactly. And that was important to me because it's actually a quality of life thing. It's one of those things where if things are just instant, some mistake happens, you see the result immediately and you just go on and you fix it. And some of the others projects I had been looking at took like half a minute per patch, which was not acceptable to me. And that was because the kernel is a fairly large project and a lot of these SCMs are just not. Were not designed to be scalable. Yeah, so that was one of the issues. But one of the issues really was I knew I needed it to be distributed, but I needed to be really, really stable. And people kind of think that using the SHA1 hashes was a huge mistake. But to me SHA1 hashes were never about the security, it was about finding corruption, of course, because we'd actually had some of that during the bitkeeper thing. So bitkeeper used CRCs and MT5s. Right. But didn't use it for everything. So one of the early designs for me was absolutely everything was protected by a really good hash. And that kind of drove the whole project, like having two or three really fundamental design ideas, which is why at a low level Git is actually fairly simple. And then the complexities are in the details and user interfaces and in all the things it has to be able to do, because everybody wants it to do crazy things. But. But having a low level design that has a few core concepts made it a easier to write and much easier to think about and also to some degree explain to people what the ideas are. And I kind of compare it to Unix. UNIX has like a core philosophy of everything is a process, everything is a file. You pipe things between things. And then the reality is it's not actually simple. I mean, there's the simple concepts that underlie the philosophy, but then all the details are very complicated. And I think that's what made me appreciate UNIX in the first place. Yeah. And I think Git has some of the same kind of. There's a fundamental core simplicity to the design and then there is the complexity of implementation. There's a through line from UNIX into the way that Git was designed. Yes, you mentioned SHA1. One of the things that I think about in this sort of week or two where you were developing the first version of Git is you made a lot of decisions that have sort of stuck with us. Yeah. Were there any, including or not SHA one that you regretted or wish you had done differently? Well, I mean, SHA1 I regret in the sense that I think it caused a lot of pointless churn with the whole trying to support shot 256 as well as shot one. And I understand why it happened, but I do think it was mostly pointless. I don't think there was a huge real need for it, but people were worried, so it was shown. So I think there's a lot of wasted effort there. There's a number of other small issues. I think I made a mistake in how the indexed file entries are sorted. I think there's these stupid details that made things harder than they should be. But at the same time, many of those things could be fixed, but they're small enough, it doesn't really matter. All the complexities are elsewhere. Yeah. So it sounds like you have few regrets. I think that's Good. I'm curious also, in that sort of two week period, were there any moments where you weren't sure what you were trying to achieve was going to work or come together or be usable or did you always have a pretty clear. I had a clear idea of the initial stages but I wasn't sure how it would work in the long run. So honestly after the first week I had something that was good for applying patches but not so much for everything else. I had the basics for doing merges and the data structures were in place for that, but it actually took. I think it took an additional week before I did my first merge and there were a number of things where I wasn't. I didn't. I had kind of the big picture end result in mind, but I wasn't sure if I'm going to get there. Yeah, the first steps, I mean the first week or two, I mean you can go and look at the code and people have. And it is not complicated code. No, it's. I think the first version was 10,000 lines or something. You can more or less read it in a single setting. Yeah. And it's fairly straightforward and doesn't do a lot of error checking and stuff like that. It's really a. Let's get this working because I have another project that I consider more important that I want to need to get back to. It really was. I will hit. I mean and it happened where I would hit issues that required me to do some changes. The first version, you can tell it's not. I think we ended up doing a backwards incompatible object store transfer at one point at least. FSCK complains about some of the old objects we had because we. I changed the data format. I didn't know that's where that came from. Yeah. No. So there were things that were. The first version just was not doing everything it needed to do. Yeah. And I forget if I actually did a conversion or not. I may not have ever needed to convert. Yeah. And we just have a few warnings for like a few objects in the kernel where. Or FSCK will say hey, this is an old no longer supported format kind of thing. But on the other, on the whole it really worked. I mean surprisingly well. Yeah. The big issue was always people's acceptance of it. Right. And that took a long time. Yeah. Well, we talked a little bit about how sort of merging was put in place, but not functional until maybe week two or week three. What were the other sort of features that you left out of the initial version that you later realized were actually quite essential to the project. Well, it wasn't so much later I realized it was stuff that I didn't care about. But I knew that if this is going to go anywhere, somebody else will. I mean, the first week when I was using it for the kernel, I was literally using the raw, what is now called plumbing commands by hand. There was no. No so called porcelain. There was nothing above that to make it usable. So to make a commit, you'd go do these very arcane things. Commit tree. Yeah, commit tree. Right. And that just returns sha that you by hand just write into the head file and that was it. Did hash object exist in the first version? I think that was one of the first binaries that I had where I could just check that I could hash everything by hand and it would return the hash to standard out. Then you could do whatever you wanted to it. But it was like the early porcelain was me scripting shell scripts around these very hard to use things. And honestly, it wasn't easy to use even with my shell scripts. But to be fair, the first initial target audience for this were pretty hardcore kernel people who hadn't been using bitkeeper. So they at least knew a lot of the concepts I was aiming for and people picked it up. I mean, I think I had. It didn't take that long before some other kernel developers started actually using it. And I was actually surprised by how quickly some source control people started coming in. And I started getting patches from the outside within days being the first git version public. So we've talked a lot about the sort of first couple of weeks with git. I want to move forward a bit. You made the decision to hand off maintainership to June pretty early on in the project. I wonder if you could tell me a little bit about what it's been like to sort of watch him run the project and really watch the community interact with it at a little bit of a distance after all these years. I mean, to be honest, I mean, I maintained git for like three or four months. I think I handed it off in August or something like that. And when I handed it off, I truly just handed it off. I was like, I'm still around. I was still reading the git mailing list, which I don't do anymore. Junior wanted to make sure that if he asked me anything, I'd be okay. But at the same time I was like, this is not what I want to do. I still feel silly. My oldest daughter went off to college and two months later she sends this text to me and say says that I'm more well known at the computer science lab for Git than for Linux because they actually use Git for everything there. And I was like, Git was never a big thing for me. It was a. I need to get this done to do the kernel. Sure. And it's kind of ridiculous that, yes, I used four months of my life maintaining it, but now at the 20 years later, yes, you should definitely talk to Junio, not to me because he's been doing a great job and I'm very happy it worked out so well. But to be honest, I'll take credit for having worked with people on the Internet for long enough that I was like, during the four months I was maintaining it, I was pretty good at picking up who has got the good taste. Yeah. To be a good maintainer. That's what it's about is taste for you. For me, it's. It's hard to describe. Yes. But it's. Yes, you have to. You can see, you can see it in patches. You can see in how they react to other people's code, how they, how they think kind of things. And he was not the first person in the project, but he was one of the early ones that was around from pretty, pretty much week one after it I had made it public. So he was one of the early persons. But it wasn't like you were the first one tag, you're it. It was more like, okay, I have now seen this person work for. For three months and I don't want to maintain this project. I will ask him if he wants to be the maintainer. I think he was a bit nervous at first, but. But it really has been working on. Yeah, he's certainly run the project very admirably in the. Yeah, I mean, so taste is to me very important. But practically speaking, the fact that you stick around the project for 20 years, that's the even more important part. Right. And he asks. Yeah, I mean, he's knowledgeable about almost every area of the tree to a surprising degree. Okay, so we've talked a lot about early Git. I want to talk a little bit about sort of the middle period of Git maybe. One of the things that I find so interesting about the tool, given how ubiquitous it's become. It's clearly been effective at aiding the kernel's development, but it's also been really effective for university students writing little class projects on their laptops. What do you think was unique about Git that made it effective at sort of both extremes of the software engineering spectrum, the distributed nature really ends up making so many things so easy. And that was one big part that set Git apart from all, pretty much all SCMs before. Yeah, was. I mean there had been distributed SCMs, but there had, as far as I know, never been something where it was like the number one design. I mean, along with the other number one goals, you can work with Git purely locally and then later if you want to make it available in any other place, it's so easy. And that's very different from say CBS where you have to, in order to work with it, you have to set up this kind of centralized repository and if you ever want to move it anywhere else, it's just very, very painful and you can't share it with somebody else without losing track of it. There's always going to be one special repository when you're using a traditional scm. And the fact that Git didn't do that and very much by design didn't do that, I mean, that's what made services like GitHub trivial. I mean, I'm trivializing GitHub because I realize there's a lot of work in making all the infrastructure around Git, but at the same time the basic git hosting side is basically nothing because the whole design of Git is designed around making it easy to copy and every repository is the same and equal. And I think that ended up being what made it so easy to then use as an individual developer. When you make a new repository, git repository, it's not a big deal. It's like you do get in it and you're done and you don't need to set up any infrastructure and you don't need to do any of the stuff that you traditionally needed to do with an scm. And then if that project ever grows to be something where you decide, oh, maybe I want other people to work with it, that works too. And again, you don't have to do anything about it, you just push it to GitHub and again, you're done. That was something I very much wanted and I didn't realize how many other people wanted it too. I thought people were happy with CBS and sbn, right? Well, I didn't really think that, but I thought they were sufficient for most people at that time. We talked a little bit about just now sort of how Git has applicability on both ends of the software engineering extremes. I've lived my whole life with version control as part of software development. And one of the things I'M curious about is how you see Git's role in shaping how software development gets done today. That's too big of a question for me. I don't know. It wasn't why I wrote Git. I wrote it for my own issues. I think GitHub and the other hosting services have made it clear how easy it is now to make all these random small projects in ways that it didn't used to be. That has resulted in a lot of dead projects too. Like you find these one off things where somebody did something and left it behind and it's still there. But does that really change how software development is done in the big picture? I don't know. I mean, it changes the details. It makes collaboration easier to some degree. It makes it easier to do these throwaway projects and if they don't work, they don't work. And if they do work now, you can work together with other people. But I'm not sure it changed anything fundamentally in software development. Moving ahead a little bit, modern software development has never been changing faster than it is today. Are you going to say the AI word? I'm not going to say the AI word. Unless you want to. No, no, no. What are some of the areas of the tool that you think have evolved or maybe still need to evolve to. To continue to support the sort of new and demanding workflows that people are using it for? I'd love to see more bug tracking stuff. I mean, everybody is doing that. I mean, there are, whether you call it bug tracking or issues or whatever you want to call it, they're all. I'd love to see that be more unified because right now it's very fragmented, where every single hosting site does their own version of it. And I understand why they do it. A, there is no kind of standard good base and B, it's also a way to do the value add and keep people in that ecosystem, even when Git itself means that it's really easy to move the code. But I do wish there was a more unified thing where we're bug tracking and. And issues in general would be something that would be more shared among the hosting sites. Sure. You mentioned earlier that you were maybe not pretty quick, but it's at least been a while since you sort of regularly follow the mailing list. Yeah. In fact, it's been a little bit of time since you even committed to the project. I think by my count, It's August of 2022 was the last time we had a commitment. Yeah. I have a few experimental patches in my tree that just I keep around. So these days I do a pool of the Git sources and I have I think four or five patches that I use myself and I think I've posted a couple of them to the Git main list, but they're not very important. They're like details that tend to be very specific to my workflow. But honestly, I mean this is true of, of the Linux kernel too that I've been doing Linux for 35 years and it did everything I needed in the first year. Right. And the thing that keeps me going on the kernel side is a hardware keeps evolving and a kernel needs to evolve with that, of course. But B it's all the like needs of other people that never in my life would I need all of the features that the kernel does. Yeah, but I'm interested in kernels and I'm still doing that 35 years later. When it came to Git, it was like Git did what I needed within the first year, in fact mostly within the first few months. And when it did what I needed I lost interest because I didn't. When it comes to kernels, I'm really interested in how they work and this is what I do. But when it comes to scms, it's like, yeah, I'm not at all interested. Have there been any features that you followed in the past handful of years from the project that you found interesting? I liked how the merge strategies got slightly smarter. I liked how some of the scripts were finally rewritten in C just to make them faster. Because I saw that even though I don't apply like 100 patch series anymore, I do end up doing things like rebasing for test trees and stuff like that, and having some of the performance improvements. But then, I mean those are fairly small implementation details. In the end they're not the kind of big changes that. I mean, I think the biggest change that I was still tracking a few years ago was all the multiple hashes thing, which really looks very painful to me. Have there been any tools in the sort of ecosystem that you've used alongside? I mean I'm a huge tick user myself. I don't know if you. I've never. No, even early on when we had like when Git was really hard to use and they were like these add on UIs. The only wrapper around Git I ever used was Git K and that was obviously integrated into Git fairly quickly. But I still use entirely the command language. I don't use any of the editor integration stuff. I don't do any of that because my editor is too stupid to integrate with anything. It's much less good. So I occasionally do statistics on my git history usage just because I'm like, what commands do I use? And it turns out I use five git commands and Git merge and Git blame and Git log are three of them pretty much. So I'm a very casual user of git in that sense. I have to ask about what the other two are. I mean obviously Git commit and gitpo I did this top five thing at some point and it may have changed, but there's like, there's not a lot of. I do have a few scripts than them to like use Git rev list and go really low do statistics for the project. But then they. In terms of your interaction with the project. Yeah, yeah. What do you feel like have been some of the features in the project either from early on or in the time since that maybe haven't gotten the appreciation they deserve? Oh. I mean it has gotten so much more appreciation than it deserves that I. Yeah, that's the reverse of what I would ask me. Like a big thing for me was when people actually started appreciating what Git could do instead of complaining about how different it was. Yeah. And that, I mean that. That was several years after the initial git, I think it was. How was it? It was these strange web developers who started using git in a big way. It's like Ruby on Rails, I think. I mean, which I had no idea. I still don't know what Ruby even is. Right. But Ruby on Rails people started using git sometime in 2008, time frame, something like this. Right. And it was strange because it brought in a completely new kind of Git user, at least that I hadn't seen before. Right. And it must have existed like in the background. It just made it very obvious that suddenly you had all these young people who had never used SCM in their life before and Git was the first thing they ever used and it was what the project they were using was using. So it was kind of the default thing. And I think it changed the dynamics when you didn't have these old timers who had used a very different SCM their whole life. And suddenly you had young people who had never seen anything else and appreciated. And instead of saying Git is so hard, I started seeing these people who were complaining about how do I do this when this old project is in cvs? So that was funny. But yeah, now the fact that people are appreciating git, I mean, way more than I ever thought. Yeah. Especially considering the first few years when I got a lot of hate for really get interview. Oh, the complaints kept coming. Tell me about it. Oh, I mean I. It's more like. I can't point to T test, you'd have to google it. But the number of people who sent me, why does it do this? And the flame wars over my choice of. Of names. For example, I didn't have like git status, which actually is one of the commands I use fairly regularly. It's in top five. It's probably not in the top five, but it's still like something fairly common. I don't think I'd ever used it with CVS because it was so slow and people had all these expectations. So I just remember the first few years, the complaints about why the names of the sub commands are different for no good reasons. And the main reason was I just didn't like CBS very much. So I did things differently on purpose sometimes. And the shift, literally like between 2007 and 2010, those years. Yeah, yeah. When people went from complaining about how hard Git was to use to really appreciating some of the power of git was to me, interesting. Sure. We've talked about the sort of very early days and the inception of the project. We've talked a little bit about how Git is used in the wild. Today I want to spend maybe just a moment thinking about the future of the project. I guess maybe to start, I wonder in your mind, what are the sort of biggest challenges that Git either is facing or will face? I don't even know. I mean, it has just been so much more successful than I ever. I mean, the statistics are insane. Git went from used for the kernel and a couple of other projects to being fairly popular to now being like 98% of the SCM. I mean that. Sure, that's a number I saw in some report from last year. I mean it's, it's. I don't know how true that is, but it's like big. Yeah. And in that sense I wouldn't worry about challenges because I think scms there is a very strong network effect where. And that's probably why once it took off, it took off in a big way is there's just. When every other project is using git by default, all the new projects will use git too. Because the pain of having two different SCMs for two different projects to work on is Just not worth it. So I would not see that as a challenge for git as much as I would see it as a challenge for anybody else who thinks they have something better. And honestly, because git does everything that I need, the challenges would likely come from new uses. I mean, we saw some of that. We saw some of that with people who used git in ways that explicitly were things I considered to be the wrong approach, like Microsoft, the mono repo for everything which showed scalability issues. I'm not saying Microsoft was wrong to do that. I'm saying this is literally what git was not designed to do. I assume most of those problems have been solved because I'm not seeing any complaints. But at the same time, I'm not following the git mailing list as much as I used to. I don't even know if the large file issue is considered to be solved. If you want to put a DVD image in git that was like, why would you ever want to do that? But I mean, that's the challenge. When git is everywhere. You find all these people who do strange things that you would never imagine that I didn't imagine and that I considered to be actively wrong. But hey, I mean, that's a personal opinion. Clearly other people have very different personal opinions. So that's always a challenge. I mean, that's something I see in the kernel too, where I go, why the hell are you doing that? That shouldn't work. But you're clearly doing it to that extent. I mean, we talked about how, whether it's 98% or what the statistic is, Git is obviously a huge dominant component in software development. At the same time there are new version control upstarts that seem to pop up. Pjool comes to mind. Jiu Jitsu, Piper and things like that. I'm curious if you ever tried any of them. No, I don't. I mean, literally, since I came from this, from being completely uninterested in source control, why would I look at alternatives now that I have something that works for me? Yeah, I, I did. I mean, I really came into git not liking source control and now I don't hate it anymore. And I think that databases are, are my particular, like that's the most boring thing in life thing. But SEM still haven't. Haven't been something I'm really interested in. You've given me a little bit of an end to my last question for you. So on schedule. Linux came about 34 years ago. Yeah, git20. That question and so we're maybe five or so years overdue for the next big thing. No, no, I, I see the other way around. All the projects that I've had to make, I had to make because I couldn't find anything better that somebody else did. But I much prefer other people solving my problems for me. Right. So me having to come up with a project is actually a failure of the world. Right. And the world just hasn't failed in the last 20 years for me. Right. Yeah. I started doing Linux because I needed an operating system and there was nothing that served my needs. And I started doing Git for the same reason I started subsurface, which is my dialogue. Well, no longer my dive blog software, but that was so specialized that it never took off in a big way and that sought one particular problem. But my computer use is actually so limited that I think I've solved all the problems. Part of it is probably I've been doing it so long that I can only do things in certain ways. I'm still using the same editor that I used when I was in college because my fingers have learned one thing and there's no going back. And I know the editor is crap and I maintain it because it's a dead project that nobody else uses. So I have a source tree and I compile my own version every time I install a new machine. And I would suggest nobody ever use that editor, but I can't. I've tried, I tried multiple times finding an editor that is more modern and does fancy things like colorize my source code and do things like that. And every time I try it, I'm like, yeah, these hands are too old for this. Right? So I really hope there's no project that comes along that makes me go, I have to do this. Well, on that note, on that note, thank you for 20 years of gift. Well, hey, I did it for my own very selfish reasons and really, I mean, this is the point to say again that yes, out of the 20 years I spent four months on it, and really all the credit goes to junior and hey, all the other people who involved in Git that have by now done so much more than I ever did in any of that. Thank you. Welcome.
Two decades of Git: A conversation with creator Linus Torvalds - https://www.youtube.com/watch?v=sCr_gb8rdEI Git이 자체 호스팅될 만큼 발전해 초기 커밋을 작성한 지 20년이 되어갑니다. 20년 후에도 여전히 Git을 사용하고 이에 대해 이야기하고 있을 거라고 예상하셨나요? 여전히 사용하고 있다는 건 예상했지만, 이야기하고 있을 줄은 몰랐죠. 가장 큰 놀라움 중 하나는 Git이 버전 관리 세계를 얼마나 장악했는지였습니다. 제 문제를 해결하기 위한 솔루션으로 보았기 때문에 당연히 우수하다고 생각했죠. 정확히 20년 전 오늘, 첫 버전이 솔직히 말해 꽤 거칠었음에도 불구하고, CVS보다 우수하다고 생각했습니다. 그렇지만 동시에 CVS가 시장을 계속 장악하고 있는 것을 봤죠. SVN이 등장했지만 그건 그저 CVS를 다르게 포장한 것에 불과했습니다. 수십 년 동안 그랬죠. 그래서 저는 이 시장이 매우 고착화되어 있다고 생각했습니다. CVS를 정말 싫어해서 사용할 수 없었고, BitKeeper도 더 이상 사용할 수 없게 되었죠. 그래서 제가 직접 무언가를 만들어야겠다고 생각했습니다. 그래서 저는 "좋아, 뭔가를 만들어보자"라고 생각했죠.그건 나한테 잘 맞고 다른 사람들은 신경 쓰지 않을 거예요. 그리고 그게 바로 드러났죠. 처음 몇 달과 몇 년 동안 사람들은 사용하기 어렵고 직관적이지 않다고 불평했어요. 맞아요. 그러다 뭔가가 일어났죠, 마치 스위치가 켜진 것처럼요. 네, 당신이 비트키퍼를 언급했는데요. 그것에 대해 조금 이야기해볼까요? 꽤 유명한 이야기인데, 당신이 git의 초기 버전을 약 10일 만에 커널의 대체품으로 작성했다고 하죠. 네 그렇고 아니에요. 사실은 10일보다 적게 걸렸어요. 음, 커널에 사용할 수 있을 때까지는 10일 정도 걸렸죠. 네, 하지만 공정하게 말하자면, 전체 과정은 시작되었죠 전년도 12월이나 11월 즈음에요. 그러니까 2004년에 일어난 일은 비트키퍼가 항상 나에게 꽤 잘 작동했다는 거예요. 완벽하진 않았지만, 내가 시도해본 다른 것들보다 훨씬 앞서 있었죠. 하지만 커널 커뮤니티에서 비트키퍼는 항상 완전히 환영받지는 못했어요. 상업적이었기 때문이죠, 오픈소스 사용에는 무료였어요. 래리 맥보이가 오픈소스를 정말 좋아했기 때문이죠, 맞아요? 그는, 동시에 그것을 중심으로 사업을 만들고 있었고 비트키퍼를 판매하고 싶어 했죠대기업들에게는 좋았습니다. 하지만 오픈소스가 아니면서 가장 큰 오픈소스 프로젝트 중 하나에 사용된다는 점이 많은 사람들에게 걸림돌이 되었습니다. 저도 마찬가지였죠. 어느 정도 오픈소스를 정말 사용하고 싶었지만, 동시에 매우 실용적이었고 오픈소스 중에는 충분히 좋은 것이 전혀 없었습니다. 그래서 더 나은 무언가가 나오기를 바라고 있었죠. 하지만 실제로 일어난 일은 호주의 Tridge가 기본적으로 BitKeeper를 리버스 엔지니어링한 것이었습니다. 그리 어렵지 않았죠. BitKeeper는 내부적으로 SCCS를 감싼 좋은 래퍼였기 때문입니다. SCCS는 60년대로 거슬러 올라가는데, SCCS는 거의 CVS보다 더 안 좋습니다. 거의 CVS보다 더 나쁘죠. 하지만 그것은 명백히 BitKeeper의 라이선스 규칙을 위반한 것이었습니다. BitKeeper는 오픈소스에 사용할 수 있지만, 리버스 엔지니어링을 하거나 BitKeeper를 클론하려고 시도해서는 안 된다고 했거든요. 그래서 큰 문제가 되었습니다. 우리는... 이것은 사적인 일이었죠. 저는 Larry와 대화하고 Tridge와 이메일을 주고받으며 해결책을 찾으려 노력했습니다. 우리는 해결책을 찾으려고 노력했죠.하지만 트리지와 래리는 완전히 상반된 입장이었습니다. 그리고 해결책이 나오지 않았습니다. 그래서 제가 Git을 작성하기 시작했을 때는 이미 4개월 동안 이 문제에 대해 생각해왔고, 제게 어떤 것이 효과적일지, 어떻게 BitKeeper보다 더 나은 것을 만들 수 있을지 고민했습니다. 하지만 BitKeeper와 같은 방식으로 하고 싶지는 않았습니다. 래리가 "너는 하지 말았어야 할 일을 했어"라고 말하는 상황을 원치 않았기 때문입니다. 그래서 실제 작성 부분은 커널에 Git을 사용하기 시작할 때까지 약 10일 정도 걸렸지만, 아이디어가 어떤 것이어야 하는지에 대해 많은 정신적 고민이 있었습니다. 그 10일 기간에 대해 이야기해보고 싶습니다. 제가 알기로는 그 기간 동안 커널에서 벗어나 Git에만 집중하셨다고 들었습니다. 커널이 아닌 Git에만 집중하는 것은 어떤 경험이었나요? 2주밖에 되지 않아서 큰 문제는 아니었습니다. 지난 35년 동안 이런 식으로 일한 적이 있었기 때문입니다.휴가를 몇 번 갔었죠? 많이는 아니지만, 커널 작업에서 2주 정도 떠난 적이 있습니다. 그리고 그게 꽤 흥미로웠어요 제 반응 중 하나는 사용자 프로그래밍이 얼마나 더 쉬운지였죠. 신경 써야 할 것이 훨씬 적습니다. 메모리 할당에 대해 걱정할 필요가 없고, 많은 것들을 신경 쓸 필요가 없죠. 디버깅도 훨씬 쉬워요. 모든 인프라가 있으니까요. 그래서 실제로 약간... 완전히 편안하다고는 못하지만, 재미있었어요 사용자 공간에서 뭔가를 할 수 있어서 제가 원하는 것이 꽤 명확했거든요. 방향은 알았지만 세부사항은 몰랐다는 의미에서요 그리고 또 하나 얘기하고 싶은 게 있는데, git에 대해 20년이 지난 지금 흥미로운 점은 그것이 장려하는 개발 모델이 너무나 단순해서 이제는 거의 당연한 것처럼 보인다는 거예요. 하지만 이건 평가절하하는 말이 아닙니다. 버전 관리의 온갖 아이디어에서 git으로 정제하는 데에는 많은 고민이 있었을 거예요. 얘기해주세요, 어떤당시에 우리가 현재의 결과를 얻기 위해 내린 불분명한 선택들이 있나요? 지금은 당연해 보이지만, 당시에는 그렇지 않았습니다. Git을 사용하기 어렵다고 느낀 이유 중 하나는 대부분의 사람들이 Git을 처음 사용할 때 CVS와 같은 배경에서 왔기 때문입니다. 그리고 Git의 사고방식은... 나는 파일 시스템 전문가 관점에서 접근했습니다. 나는 대부분의 소스 컨트롤 관리 프로젝트에 대해 경멸과 거의 증오에 가까운 감정을 가지고 있었습니다. 그래서 현상 유지에는 전혀 관심이 없었죠. 제게 가장 큰 문제는... 음, 두 가지 큰 문제가 있었습니다. 하나는 성능이었습니다. 왜냐하면 그 당시에 저는 여전히 많은 패치를 적용했는데, 지금은 Git으로 인해 거의 사라졌죠. 이제는 그냥 다른 사람의 코드를 병합하니까요. 하지만 제게 목표 중 하나는 패치 시리즈를 적용할 수 있는 것이었습니다. 기본적으로 30초 안에, 심지어 50개나 100개의 패치라도 말이죠. 커피 한 잔 마실 시간도 필요 없어야 했습니다. 맞아요, 정확히 그렇죠. 그게 제게 중요했던 이유는 삶의 질과 관련된 문제였기 때문입니다. 만약 일이 너무 오래 걸린다면...잠깐 실수가 발생하면, 즉시 결과를 보고 계속 진행하면서 수정할 수 있습니다. 다른 프로젝트들은 패치 하나당 30초 정도 걸렸는데, 이는 제게 용납할 수 없는 수준이었죠. 커널은 꽤 큰 프로젝트이고 많은 SCM들이 단순히 확장성을 고려해 설계되지 않았기 때문입니다. 그래서 그게 문제 중 하나였죠. 하지만 제가 정말로 필요했던 건 분산형이면서도 매우 안정적인 시스템이었습니다. 사람들은 SHA1 해시 사용이 큰 실수라고 생각하는 경향이 있죠. 하지만 제게 SHA1 해시는 보안이 아닌 손상을 찾기 위한 것이었습니다. BitKeeper 사용 중에 실제로 그런 일이 있었거든요. BitKeeper는 CRC와 MD5를 사용했지만 모든 곳에 사용하지는 않았습니다. 그래서 제 초기 설계 중 하나는 모든 것을 매우 강력한 해시로 보호하는 것이었습니다. 그게 전체 프로젝트를 이끌었죠. 두세 가지 정말 근본적인 설계 아이디어가 있었는데, 그래서 처음에는저수준의 Git은 사실 꽤 단순합니다. 그리고 복잡성은 세부사항과 사용자 인터페이스, 그리고 수행해야 하는 모든 것들에 있습니다 모든 사람들이 미친 짓을 하길 원하기 때문에 그렇게 할 수 있어야 합니다. 하지만 몇 가지 핵심 개념을 가진 저수준 설계를 갖는 것이 더 쉽게 작성할 수 있게 만들었고 생각하기도 훨씬 쉽게 만들었으며, 또한 어느 정도 사람들에게 아이디어를 설명하기 쉽게 만들었습니다. 그리고 저는 이것을 Unix와 비교합니다. UNIX는 모든 것이 프로세스이고, 모든 것이 파일이라는 핵심 철학을 가지고 있습니다. 여러분은 이것들 사이에서 파이프로 연결합니다. 그리고 실제로는 그렇게 단순하지 않습니다. 즉, 철학의 근간이 되는 단순한 개념들이 있지만, 모든 세부사항은 매우 복잡합니다. 그리고 저는 이것이 제가 처음에 UNIX를 높이 평가하게 된 이유라고 생각합니다. 네. 그리고 Git도 비슷한 면이 있다고 생각합니다. 설계에 근본적인 핵심 단순성이 있고 그 다음에 구현의 복잡성이 있습니다. UNIX에서 Git이 설계된 방식으로 이어지는 맥락이 있습니다. 네, 맞습니다. SHA1을 언급하셨는데요. 제가 생각하는 것 중 하나는 Git의 첫 번째 버전을 개발하던 1-2주 동안 여러분이 많은 결정을 내렸다는 것입니다. 이 결정들이 일종의우리와 함께 있었죠. 네. 혹시 SHA-1을 포함해서 후회하거나 다르게 했으면 좋았을 것들이 있나요? 음, SHA-1은 후회돼요. 불필요한 혼란을 많이 야기했다고 생각하거든요 SHA-256도 지원하려고 하면서요. 왜 그렇게 됐는지는 이해하지만, 대부분 무의미했다고 봅니다. 실제로 큰 필요성은 없었는데 사람들이 걱정해서 그렇게 된 거죠. 많은 노력이 낭비됐다고 봐요. 다른 작은 문제들도 있어요. 제가 인덱스 파일 항목 정렬 방식에서 실수를 했다고 생각해요. 이런 사소한 세부사항들이 일을 더 어렵게 만들었죠. 하지만 동시에 이런 것들은 대부분 고칠 수 있지만, 너무 작아서 크게 중요하지 않아요. 복잡성은 다른 곳에 있죠. 네. 후회가 별로 없으신 것 같네요. 좋은 거 같아요. 그 2주 동안에 혹시 하려는 게 될지, 완성될지, 쓸 만할지 확신이 없었던 순간이 있었나요? 아니면 항상 명확했나요? 저는 꽤 명확한 생각이 있었어요.초기 단계에 대한 명확한 아이디어는 있었지만 장기적으로 어떻게 작동할지는 확실하지 않았습니다. 솔직히 첫 주 후에는 패치를 적용하는 데는 좋았지만 다른 것들에는 그다지 좋지 않았습니다. 병합을 위한 기본 사항과 그에 필요한 데이터 구조는 갖추고 있었지만 실제로 첫 병합을 하는 데는 추가로 일주일이 더 걸렸던 것 같습니다. 거기에는 여러 가지 문제가 있었는데, 저는 큰 그림의 최종 결과는 염두에 두고 있었지만 그곳에 도달할 수 있을지는 확실하지 않았습니다. 네, 첫 단계들, 즉 첫 1-2주 동안은 코드를 보면 알 수 있듯이, 그리고 사람들도 봤겠지만 복잡한 코드는 아닙니다. 아니죠. 첫 버전은 약 10,000줄 정도였던 것 같은데 한 번에 거의 다 읽을 수 있는 분량입니다. 네. 꽤 간단하고 오류 검사 같은 것도 많이 하지 않습니다. 정말로 이것을 작동시키는 데 집중했죠. 왜냐하면 더 중요하다고 생각하는 다른 프로젝트로 돌아가야 했기 때문입니다. 정말로 그랬습니다. 제 말은, 그리고 실제로 그렇게 되었는데 제가 도달하고자 했던 지점에 이르렀을 때일부 변경이 필요한 문제에 부딪혔습니다. 첫 번째 버전에서는 그렇지 않았죠. 결국 우리는 한 시점에 하위 호환성이 없는 객체 저장소 전송을 수행했던 것 같습니다. FSCK가 일부 오래된 객체에 대해 불평합니다. 데이터 형식을 변경했기 때문입니다. 그게 어디서 왔는지 몰랐어요. 네. 그래서 문제가 있었던 것들이 있었죠. 첫 번째 버전은 필요한 모든 것을 수행하지 않았습니다. 네. 그리고 실제로 변환을 했는지 기억이 나지 않습니다. 변환이 필요 없었을 수도 있어요. 네. 그리고 커널의 몇몇 객체에 대해 약간의 경고만 있습니다. FSCK가 "이건 더 이상 지원되지 않는 오래된 형식입니다"라고 말하는 정도죠. 하지만 전반적으로 정말 잘 작동했습니다. 놀랍게도요. 네. 큰 문제는 항상 사람들의 수용이었죠. 맞아요. 그리고 그건 오랜 시간이 걸렸습니다. 네. 우리는 병합이 어떻게 구현되었지만 2주차나 3주차까지 기능하지 않았는지에 대해 조금 이야기했습니다. 다른초기 버전에서 제외했지만 나중에 프로젝트에 필수적이라고 깨달은 기능들이 있나요? 사실 나중에 깨달았다기보다는 내가 신경 쓰지 않았던 것들이었죠. 하지만 이게 어딘가로 갈 거라면 누군가는 신경 쓸 거라는 걸 알았어요. 처음 일주일 동안 커널에 사용할 때는 지금은 plumbing 명령어라고 불리는 걸 그대로 수동으로 사용했어요. 아무것도 없었죠. 이른바 porcelain도 없었고, 그 위에 사용 가능하게 만드는 것도 없었어요. 커밋을 하려면 매우 난해한 작업들을 해야 했죠. Commit tree예요. 네, commit tree죠. 그게 그냥 SHA를 반환하면 당신이 직접 head 파일에 써넣어야 했어요 그게 다였죠. 첫 버전에 hash object가 있었나요? 그게 제가 가진 첫 바이너리 중 하나였던 것 같아요 거기서 모든 걸 수동으로 해시할 수 있는지 확인하고 표준 출력으로 해시를 반환했죠. 그러면 원하는 대로 할 수 있었어요. 하지만 초기 porcelain은 이런 사용하기 어려운 것들을 쉘 스크립트로 감싸는 정도였어요 사용하기 정말 어려웠죠. 솔직히 제 쉘 스크립트로도 쉽게 사용할 수 없었어요셸 스크립트입니다. 하지만 공정하게 말하자면, 초기 목표 대상은 BitKeeper를 사용하지 않았던 상당히 핵심적인 커널 개발자들이었습니다. 그들은 적어도 제가 목표로 하는 많은 개념들을 알고 있었고 사람들이 이를 받아들였습니다. 제 생각에는 오래 걸리지 않아 다른 커널 개발자들이 실제로 사용하기 시작했습니다. 그리고 일부 버전 관리 시스템 전문가들이 얼마나 빨리 관심을 보였는지 놀랐습니다. 첫 번째 Git 버전이 공개된 지 며칠 만에 외부에서 패치를 받기 시작했습니다. 우리는 Git의 첫 몇 주에 대해 많이 이야기했습니다. 조금 앞으로 넘어가 보겠습니다. 프로젝트 초기에 June에게 관리를 넘기기로 결정하셨죠. 그가 프로젝트를 운영하는 것과 커뮤니티가 그와 상호 작용하는 것을 이 모든 세월 동안 약간 거리를 두고 지켜보신 소감이 어떠신지 말씀해 주시겠습니까? 솔직히 말해서, 저는 Git을 3-4개월 정도 유지보수했습니다. 8월 즈음에 넘겼던 것 같습니다. 그리고 넘길 때는 정말로 완전히 넘겼습니다. 저는 이렇게 생각했죠,저는 여전히 남아있습니다. 예전에는 git 메일링 리스트를 읽곤 했는데, 이제는 더 이상 하지 않습니다. 주니오는 제게 뭔가 물어보면 제가 괜찮을지 확인하고 싶어 했습니다. 하지만 동시에 저는 이것이 내가 하고 싶은 일이 아니라고 생각했죠. 아직도 어리석다고 느낍니다. 제 큰 딸이 대학에 갔는데 두 달 후 문자를 보내왔습니다. 그 내용은 컴퓨터 과학 실험실에서 저는 리눅스보다 Git으로 더 유명하다는 것이었습니다. 거기서 모든 것에 Git을 사용하기 때문이죠. 저는 Git이 제게 큰 의미가 없었다고 말했습니다. 그저 커널 작업을 위해 필요해서 만든 것뿐이었죠. 그리고 좀 우스운 점은, 제가 4개월 동안 유지보수를 했지만, 20년이 지난 지금, 여러분은 제게가 아니라 주니오에게 물어봐야 합니다. 그가 훌륭하게 일을 해왔고 저는 그 결과에 매우 만족합니다. 솔직히 말해서, 저는 인터넷에서 오랫동안 사람들과 일한 경험 덕분에 4개월 동안 유지보수를 하면서 누가 좋은 안목을 가졌는지 꽤 잘 파악할 수 있었습니다. 좋은 유지보수자가 될 수 있는 사람을요.당신에게는 취향의 문제겠죠. 저에게는 설명하기 어려운 부분이에요. 네, 당신은 해야 해요. 부분적으로 볼 수 있죠. 다른 사람의 코드에 대한 반응이나 그들의 사고방식에서 볼 수 있어요. 그리고 그는 프로젝트의 첫 번째 사람은 아니었지만, 초기 멤버 중 한 명이었어요. 제가 공개한 지 거의 첫 주부터 참여했죠. 그래서 그는 초기 멤버 중 한 명이었어요. 하지만 '너가 첫 번째니까 너야'라는 식은 아니었어요. 더 정확히는, '이 사람이 3개월 동안 일하는 것을 봤고, 나는 이 프로젝트를 유지보수하고 싶지 않아. 그에게 메인테이너가 되고 싶은지 물어볼 거야'였죠. 처음에는 좀 긴장했던 것 같아요. 하지만 정말 잘 해냈죠. 네, 그는 확실히 프로젝트를 매우 훌륭하게 운영했어요. 네, 저에게 취향은 매우 중요해요. 하지만 실질적으로, 20년 동안 프로젝트에 남아있었다는 사실이 더 중요한 부분이에요. 맞아요. 그리고 그는 물어봐요. 네, 그는 트리의 거의 모든 영역에 대해 놀라울 정도로 잘 알고 있어요. 거의 모든 영역에 대해 놀라울 정도로 지식이 풍부해요. 좋아요, 우리는 초기 Git에 대해 많이 이야기했네요. 이제 Git의 중기에 대해 조금 이야기해보고 싶어요.이 도구에 대해 제가 매우 흥미롭게 생각하는 점 중 하나는, 얼마나 보편화되었는지를 고려할 때, 분명히 효과적이었다는 것입니다 커널 개발을 돕는 데 있어서, 하지만 또한 매우 효과적이었습니다 노트북으로 작은 수업 프로젝트를 작성하는 대학생들에게도. Git의 어떤 특별한 점이 소프트웨어 엔지니어링 스펙트럼의 양 극단에서 모두 효과적이었다고 생각하시나요? 분산된 특성이 정말로 많은 것들을 매우 쉽게 만들었습니다. 그리고 그것이 Git을 다른 모든, 사실상 모든 이전 SCM들과 구별짓는 큰 부분 중 하나였죠. 네, 맞아요. 분산 SCM들이 있긴 했지만, 제가 아는 한, 그것이 가장 중요한 설계 목표였던 것은 없었습니다. 다른 주요 목표들과 함께, Git으로 순수하게 로컬에서 작업할 수 있고 나중에 다른 곳에서 사용 가능하게 하고 싶다면 매우 쉽습니다. 그리고 이는 CVS와는 매우 다릅니다. CVS에서는 작업하기 위해 이런 중앙 집중식 저장소를 설정해야 하고, 만약 다른 곳으로 옮기고 싶다면, 그것은 매우 어렵습니다.매우 고통스럽고 다른 사람과 공유할 수 없습니다 추적을 잃지 않고는 말이죠. 전통적인 SCM을 사용할 때는 항상 특별한 저장소 하나가 있어야 합니다. Git이 그렇게 하지 않았다는 사실, 의도적으로 그렇게 하지 않았다는 점이 GitHub 같은 서비스를 간단하게 만들었죠. GitHub을 단순화시키고 있지만, Git 주변의 인프라를 만드는 데 많은 작업이 필요하다는 걸 알고 있습니다. 하지만 동시에 기본적인 Git 호스팅 측면은 사실상 아무것도 아닙니다 Git의 전체 설계가 복사를 쉽게 만들도록 설계되어 있기 때문이죠 모든 저장소가 동일하고 평등합니다. 이것이 개인 개발자가 쉽게 사용할 수 있게 만든 이유라고 생각합니다. 새로운 Git 저장소를 만들 때, 대단한 일이 아닙니다. git init을 하면 끝이고 인프라를 설정할 필요도 없고 전통적인 SCM에서 필요했던 작업을 할 필요가 없습니다. 그리고 나중에 그 프로젝트가 성장해서 다른 사람들과 공유하고 싶다고 결정하면그것도 괜찮습니다. 그리고 다시 말하지만, 당신은 아무것도 할 필요가 없습니다. GitHub에 푸시하기만 하면 끝입니다. 그것은 제가 정말 원했던 것이었고 다른 사람들도 얼마나 많이 원하는지 몰랐습니다. 사람들이 CVS와 SVN에 만족한다고 생각했습니다. 글쎄, 사실 그렇게 생각하지 않았지만, 당시 대부분의 사람들에게 충분하다고 생각했습니다. 우리는 방금 Git이 소프트웨어 엔지니어링의 양 극단에 모두 적용 가능하다는 점에 대해 조금 이야기했습니다. 소프트웨어 개발의 한 부분으로서의 버전 관리와 함께 평생을 살았습니다. 제가 궁금한 점 중 하나는 오늘날 소프트웨어 개발이 이루어지는 방식을 형성하는 데 있어 Git의 역할을 어떻게 보시는지입니다. 소프트웨어 개발이 이루어지는 방식을 형성하는 데 있어 Git의 역할 말입니다. 그건 너무 큰 질문입니다. 저는 모르겠습니다. 그건 제가 Git을 만든 이유가 아닙니다. 저는 제 자신의 문제를 위해 만들었습니다. GitHub와 다른 호스팅 서비스들이 이제 얼마나 쉽게 이런 무작위의 작은 프로젝트들을 만들 수 있는지 보여주었다고 생각합니다. 예전에는 그렇지 않았던 방식으로 말이죠. 그 결과 많은 죽은 프로젝트들도 생겼습니다. 누군가가 뭔가를 하고 남겨둔 일회성 프로젝트들을 발견할 수 있죠. 그게 아직도 거기 있습니다. 하지만 그게그것이 정말로 큰 그림에서 소프트웨어 개발 방식을 변화시켰나요? 잘 모르겠어요. 세부적인 것들은 바뀌었죠. 어느 정도 협업을 더 쉽게 만들었어요. 일회성 프로젝트를 더 쉽게 할 수 있게 되었고 잘 안 되면 그만두고, 잘 되면 이제 다른 사람들과 함께 작업할 수 있죠. 하지만 소프트웨어 개발에서 근본적으로 뭔가 바뀌었는지는 확신할 수 없어요. 조금 더 나아가서, 현대 소프트웨어 개발은 그 어느 때보다 빠르게 변화하고 있어요. AI라는 말을 하려나요? 저는 AI라는 말을 하지 않을 거예요. 원한다면 모르지만요. 아니요, 아니요. 도구의 어떤 영역이 발전했거나 아직 발전이 필요하다고 생각하시나요? 새롭고 까다로운 워크플로우를 지원하기 위해서요. 버그 추적 기능이 더 많아졌으면 좋겠어요. 모든 사람들이 그걸 하고 있죠. 버그 추적이든 이슈든 뭐라고 부르든 간에, 모두가 하고 있어요. 그게 더 통합되었으면 좋겠어요. 지금은 매우 파편화되어 있거든요. 모든 호스팅 사이트가 자체 버전을 만들고 있어요. 그 이유를 이해합니다. 첫째, 표준화된 좋은 기반이 없고 둘째, 그들 나름의 이유가 있겠죠. 하지만 더 통합되었으면 좋겠어요.이것은 또한 가치를 더하고 사람들을 그 생태계에 머물게 하는 방법이기도 합니다. Git 자체가 코드를 쉽게 이동할 수 있게 해주지만 말이죠. 하지만 저는 바랍니다 버그 추적과 이슈 관리가 호스팅 사이트들 간에 더 통합된 형태로 공유되었으면 좋겠습니다. 그렇군요. 당신은 앞서 언급했는데 아주 빠르진 않았지만 적어도 한동안 메일링 리스트를 정기적으로 팔로우하지 않으셨다고요. 네. 사실, 프로젝트에 커밋한 지도 꽤 시간이 지났습니다. 제가 확인한 바로는 2022년 8월이 마지막 커밋이었던 것 같습니다. 네. 제 트리에 몇 가지 실험적인 패치들이 있는데 그냥 갖고 있습니다. 요즘은 Git 소스를 풀 받아서 4-5개 정도의 패치를 직접 사용하고 있고 그 중 몇 개는 Git 메인 리스트에 올렸지만 그리 중요하진 않습니다. 제 워크플로우에 매우 특화된 세부 사항들이죠. 하지만 솔직히 말해서 이건 리눅스 커널에도 해당되는 얘기인데 35년 동안 리눅스를 해왔고첫 해에 필요한 모든 것을 했습니다. 맞아요. 그리고 커널 쪽에서 계속 나아갈 수 있게 하는 것은 하드웨어가 계속 발전하고 있고 당연히 커널도 그에 맞춰 발전해야 한다는 점입니다. 그리고 다른 사람들의 모든 요구사항들이 있죠. 제 평생 커널이 하는 모든 기능이 필요하진 않을 겁니다. 하지만 저는 커널에 관심이 있고 35년이 지난 지금도 여전히 그 일을 하고 있죠. Git에 관해서는, Git은 첫 해 안에 제가 필요한 걸 다 해냈어요. 사실 대부분 처음 몇 달 안에 말이죠. 그리고 제가 필요한 걸 다 했을 때 흥미를 잃었습니다. 왜냐하면 커널에 대해서는 정말 관심이 있고 이게 제가 하는 일이지만 소스 코드 관리 시스템에 대해서는 전혀 관심이 없거든요. 최근 몇 년간 프로젝트에서 흥미롭다고 생각한 기능이 있나요? 병합 전략이 조금 더 똑똑해진 게 마음에 들었어요. 일부 스크립트들이 마침내 C로 다시 작성되어 더 빨라진 것도 좋았습니다. 제가 더 이상 100개의 패치 시리즈를 적용하지는 않지만, 테스트 트리를 위해 리베이스 같은 작업을 하게 되는데, 이런 성능 개선이 도움이 됐습니다.하지만 그런 것들은 꽤 작은 구현 세부사항입니다. 결국에는 큰 변화는 아닙니다. 제가 생각하기에 가장 큰 변화는 몇 년 전에 여전히 추적하고 있었던 다중 해시 기능인데, 이는 정말 매우 고통스러워 보였습니다. 제게는 말이죠. 생태계에서 함께 사용한 도구들이 있나요? 저는 틱(tick)을 많이 사용하는데, 당신은 어떠신가요? 저는 한 번도... 아니요, 초기에도 Git이 정말 사용하기 어려웠고 추가 UI들이 있었을 때도 Git 주변의 유일한 래퍼로 제가 사용한 것은 Git K뿐이었고, 그것도 빠르게 Git에 통합되었죠. 하지만 저는 여전히 전적으로 명령어 인터페이스만 사용합니다. 에디터 통합 기능은 전혀 사용하지 않아요. 그런 것들은 사용하지 않습니다. 제 에디터가 너무 단순해서 어떤 것과도 통합되기 어렵거든요. 훨씬 덜 좋죠. 그래서 가끔 제 Git 사용 기록에 대한 통계를 내보는데, 어떤 명령어를 사용하는지 궁금해서요. 그리고 알게 된 것은 제가 다섯 가지 Git 명령어를 사용한다는 거예요. Git merge와 Git blame, 그리고 Git log가 그 중 세 가지입니다. 꽤 많이 사용하죠.많이요. 저는 그런 의미에서 매우 가벼운 git 사용자입니다. 다른 두 가지가 무엇인지 물어봐야겠네요. 물론 Git commit과 git push는 알겠는데 언젠가 이 상위 5개 목록을 만들었고 변경되었을 수 있지만, 많지는 않습니다. Git rev-list를 사용해서 프로젝트 통계를 내는 몇 가지 스크립트는 있긴 합니다. 아주 세밀하게 말이죠. 하지만 그건. 프로젝트와의 상호작용 측면에서. 네, 네. 초기부터 또는 그 이후에 프로젝트에서 어떤 기능들이 충분히 인정받지 못했다고 느끼시나요? 오. 음, 사실 받아야 할 것보다 훨씬 더 많은 인정을 받았죠. 제가 물어본 것과는 반대의 질문이네요. 제게 중요했던 건 사람들이 Git이 얼마나 다른지 불평하는 대신 Git이 할 수 있는 일을 실제로 인정하기 시작했을 때였어요. 네. 그리고 그건, 음 그건. Git이 처음 나온 지 몇 년이 지난 후였던 것 같아요. 어떻게 됐더라? 그랬죠. 이상한 웹 개발자들이 Git을 대대적으로 사용하기 시작했어요. Ruby onRails인 것 같아요. 저는 전혀 몰랐죠. 아직도 Ruby가 뭔지도 모르겠어요. 맞아요. 하지만 Ruby on Rails 사용자들이 2008년 즈음에 git을 사용하기 시작했어요. 그렇죠. 그리고 그것은 이상했어요. 왜냐하면 완전히 새로운 종류의 Git 사용자를 불러왔기 때문이에요. 적어도 제가 전에 본 적 없는 사용자들이었죠. 맞아요. 배경에 있었겠지만 갑자기 드러났어요. 갑자기 SCM을 한 번도 사용해본 적 없는 젊은 사람들이 많이 생겼고 Git이 그들이 처음 사용한 것이었어요. 그들이 사용하는 프로젝트가 사용하고 있어서 기본이 된 거죠. 그리고 저는 이게 역학을 바꿨다고 생각해요. 평생 매우 다른 SCM을 사용한 노련한 사용자들이 아니라 다른 것을 본 적 없는 젊은 사람들이 갑자기 생겼고 그들은 이를 높이 평가했어요. 그리고 Git이 너무 어렵다고 말하는 대신, 이 사람들이 이 오래된 프로젝트가 CVS에 있을 때 어떻게 해야 하는지 불평하는 걸 보기 시작했어요. 그래서 그게 재미있었죠. 하지만 네, 이제 사람들이 git을 높이 평가한다는 사실이,생각했던 것보다 훨씬 더 많았죠. 특히 고려해보면 처음 몇 년 동안 많은 비난을 받았어요. 정말 인터뷰를 받으려고요. 오, 불평이 계속 들어왔죠. 말씀해 주세요 그것에 대해. 음, 제 말은... 그건 더 like... 정확히 지적할 순 없어요. 구글에서 찾아봐야 할 거예요. 하지만 많은 사람들이 저에게 보냈죠, "왜 이렇게 되는 거죠?"라고 그리고 제가 선택한 이름에 대한 논쟁도 있었고요. 이름에 대해서요. 예를 들어, 'git status' 같은 게 없었어요. 사실 그건 제가 꽤 자주 사용하는 명령어 중 하나죠. 상위 5개 안에 들어요. 아마 상위 5개는 아니겠지만, 여전히 꽤 일반적인 거죠. 제가 CVS에서는 너무 느려서 거의 사용하지 않았던 것 같아요. 사람들은 많은 기대를 가지고 있었죠. 그래서 처음 몇 년간 기억나는 건 불평이에요. 왜 하위 명령어 이름들이 아무 이유 없이 다른지에 대해서요. 주된 이유는 제가 그냥 CVS를 별로 좋아하지 않았기 때문이에요. 그래서 때때로 일부러 다르게 했죠. 그리고 그 변화는 말 그대로 2007년과 2010년 사이, 그 몇 년 동안이었어요. 네,네. 사람들이 Git이 사용하기 어렵다고 불평하다가 Git의 강력함을 진정으로 인식하게 된 것이 제게는 흥미로웠습니다. 그렇죠. 우리는 초기 단계와 프로젝트의 시작에 대해 이야기했습니다. Git이 현재 어떻게 사용되고 있는지도 조금 얘기했고요. 오늘은 잠시 시간을 내어 프로젝트의 미래에 대해 생각해보고 싶습니다. 우선 시작하자면, 당신이 생각하기에 Git이 직면하고 있거나 직면할 가장 큰 과제는 무엇인가요? 잘 모르겠습니다. Git은 제가 예상했던 것보다 훨씬 더 성공적이었거든요. 통계가 말도 안 되게 대단합니다. Git은 커널과 몇몇 프로젝트에서만 쓰이다가 꽤 인기를 얻더니 이제는 98%의 SCM 점유율을 차지하고 있어요. 그게 맞죠. 작년 어떤 보고서에서 본 숫자예요. 그게 얼마나 정확한지는 모르겠지만, 엄청난 수치죠. 네. 그런 의미에서 저는 과제에 대해 걱정하지 않습니다. SCM은 매우 강력한 네트워크 효과가 있기 때문이에요. 그래서 아마도 한번 인기를 얻자 급속도로 퍼진 것 같아요. 다른 모든 프로젝트가 Git을 사용하고 있다면 그냥... 다른 모든 프로젝트가 Git을 사용하고 있을 때기본적으로 모든 새 프로젝트는 git을 사용할 것입니다. 두 개의 다른 프로젝트에 두 가지 다른 SCM을 사용하는 고통은 그만한 가치가 없기 때문입니다. 그래서 저는 이것을 git의 도전으로 보지 않고 더 나은 것이 있다고 생각하는 다른 사람들의 도전으로 봅니다. 솔직히 git이 제가 필요한 모든 것을 수행하기 때문에, 도전은 아마도 새로운 사용 사례에서 올 것입니다. 우리는 그런 일부를 보았습니다. 우리는 git을 명시적으로 잘못된 접근 방식이라고 생각한 방식으로 사용한 사람들을 보았습니다. 예를 들어 Microsoft가 모든 것에 대해 모노 레포를 사용한 것처럼요. 이는 확장성 문제를 보여주었습니다. Microsoft가 그렇게 한 것이 잘못됐다고 말하는 것은 아닙니다. 이것은 말 그대로 git이 설계되지 않은 용도라고 말하는 것입니다. Microsoft가 그렇게 한 것이 잘못되었다고 말하는 게 아닙니다. 이것은 말 그대로 git이 설계되지 않은 용도입니다. 불만을 듣지 못하고 있어서 대부분의 문제가 해결되었다고 생각합니다. 하지만 동시에 예전만큼 git 메일링 리스트를 따라가지 않고 있습니다. 대용량 파일 문제가 해결된 것으로 간주되는지도 모르겠습니다. git에 DVD 이미지를 넣으려고 한다면 그건 왜 그렇게 하고 싶어 하는지 모르겠습니다. 하지만 그것이 도전입니다. git에 DVD 이미지를 넣으려고 한다면 그건 왜 그렇게 하고 싶어 하는지 모르겠습니다. 하지만 그것이 도전입니다.Git이 모든 곳에 있을 때, 당신은 이상한 일을 하는 사람들을 발견하게 됩니다 내가 상상도 못했고 완전히 잘못됐다고 생각한 일들을 말이죠 하지만 그건 개인적인 의견이에요. 분명히 다른 사람들은 매우 다른 개인적인 의견을 가지고 있죠. 그래서 항상 도전이 됩니다 이건 커널에서도 보는 것인데, 제가 '왜 그렇게 하는 거지?'라고 생각하는 거죠 그건 작동하지 않을 텐데. 하지만 당신은 분명히 그렇게 하고 있어요 도대체 왜 그러는 거죠? 그건 작동하지 않을 텐데. 하지만 당신은 분명히 그렇게 하고 있어요 그 정도로 말이에요. 우리가 얘기했듯이, 98%인지 아닌지는 모르겠지만 Git이 소프트웨어 개발에서 확실히 지배적인 요소라는 거죠 동시에 새로운 버전 관리 시스템들이 계속 나타나고 있어요 Pjool이 떠오르네요. Jiu Jitsu, Piper 같은 것들이요. 혹시 그것들을 사용해 보신 적이 있나요? 아니요, 전혀요 사실 저는 소스 컨트롤에 전혀 관심이 없었던 사람이었기 때문에 제가 쓰는 게 있는데 왜 다른 대안을 찾아보겠어요? 제가 사용하는 게 잘 작동하는데 말이죠 지금 제게 잘 맞는 게 있는데 왜 다른 걸 찾아보겠어요? 네, 저는 정말로 소스 컨트롤을 좋아하지 않는 상태에서 Git을 접했고 이제는 더 이상 싫어하지 않아요 그리고 제가 생각하기에 데이터베이스가 제게는 특히, 삶에서 가장 지루한 것 같아요 하지관심있는 분야가 아니었습니다. 마지막 질문에 대한 답변을 어느 정도 해주셨네요. 예정대로라면 리눅스는 34년 전에 나왔습니다. 그렇죠, Git은 20년 전이고요. 그 질문에 대해서는, 아마 다음 큰 일이 5년 정도 지연되고 있는 것 같습니다. 아니요, 저는 다르게 봅니다. 제가 만들어야 했던 모든 프로젝트는 다른 사람이 만든 더 나은 것을 찾지 못해서 만들어야 했습니다. 하지만 저는 다른 사람들이 제 문제를 해결해주는 걸 훨씬 더 선호합니다. 그래서 제가 프로젝트를 만들어야 하는 건 사실 세상의 실패입니다. 그리고 지난 20년 동안 세상은 저에게 실패하지 않았습니다. 맞아요. 저는 운영체제가 필요했고 제 요구를 충족시키는 것이 없어서 리눅스를 시작했습니다. 같은 이유로 Git을 시작했고, 제 다이빙 로그 소프트웨어인 subsurface도 시작했습니다. 더 이상 제 것은 아니지만, 그건 너무 특화되어 있어서 크게 성공하지 못했고 특정 문제를 해결하려 했습니다. 하지만 제 컴퓨터 사용은 실제로 매우 제한적이어서제가 모든 문제를 해결했다고 생각합니다. 아마도 그 이유 중 하나는 오랫동안 해왔기 때문에 특정 방식으로만 할 수 있다는 것입니다. 저는 여전히 대학 시절에 사용하던 동일한 에디터를 사용하고 있습니다. 왜냐하면 제 손가락이 하나만 배웠고 돌이킬 수 없기 때문입니다. 그 에디터가 형편없다는 걸 알지만, 더 이상 아무도 사용하지 않는 죽은 프로젝트이기 때문에 제가 유지보수합니다. 소스 트리가 있어서 새 기계를 설치할 때마다 제 버전을 직접 컴파일합니다. 그리고 저는 누구도 그 에디터를 사용하지 말라고 제안하겠지만, 저는 그럴 수 없습니다. 시도해봤습니다. 여러 번 더 현대적이고 멋진 기능이 있는 에디터를 찾으려고 노력했습니다. 소스 코드에 색상을 입히고 그런 일들을 하는 에디터 말이죠. 하지만 매번 시도할 때마다 '그래, 이 손은 이제 너무 늙었어'라고 생각합니다. 그래서 정말 '이건 꼭 해야 해'라고 생각하게 만드는 프로젝트가 없기를 바랍니다. 음, 그런 의미에서, 그런 의미에서, 20년간의 선물에 감사드립니다. 글쎄요, 제가 매우 이기적인 이유로 했습니다. 정말로, 이 시점에서 다시 한 번 말씀드리자면 20년 중에서 4개월만 투자했고, 사실 그게 전부입니다.모든 공로는 주니어와 Git에 관여한 다른 모든 사람들에게 돌아갑니다. 그들은 이제 제가 했던 것보다 훨씬 더 많은 일을 해냈습니다. 감사합니다.