<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Delvia]]></title><description><![CDATA[Learning, building, and sharing. 
CSE engineering student learning by building, experimenting, and writing about what I discover along the way.]]></description><link>https://delvia.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6a8bd38944ed7365b6baebe8/2aa5b517-b89d-4c9c-be95-efc3b39c9486.png</url><title>Delvia</title><link>https://delvia.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 04:58:17 GMT</lastBuildDate><atom:link href="https://delvia.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The Lore I Found in My Git Rabbit Hole]]></title><description><![CDATA[When I first started learning Git, I was terrified of the terminal and commands, so I left that responsibility to my future self.
Well, that future self is here. A few days ago, I started actually lea]]></description><link>https://delvia.hashnode.dev/the-lore-i-found-in-my-git-rabbit-hole</link><guid isPermaLink="true">https://delvia.hashnode.dev/the-lore-i-found-in-my-git-rabbit-hole</guid><category><![CDATA[Git]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Linux]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[technology]]></category><category><![CDATA[Programming Blogs]]></category><category><![CDATA[Learning Journey]]></category><category><![CDATA[C]]></category><category><![CDATA[version control]]></category><dc:creator><![CDATA[Sneha Satapathy]]></dc:creator><pubDate>Fri, 28 Aug 2026 07:52:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a8bd38944ed7365b6baebe8/7e2ff30e-0085-45aa-bfd9-241501cc550f.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started learning Git, I was terrified of the terminal and commands, so I left that responsibility to my future self.</p>
<p>Well, that future self is here. A few days ago, I started actually learning Git, and I came across this somewhere: “Git is written in C”. At first I interpreted it as the commands being in C, but a while later I realised it was the actual making of Git that was primarily in C.</p>
<p>And then, there I was, in my rabbit hole, exploring the whys and hows of everything about Git. And you can see the result of the rabbit hole in front of you.</p>
<hr />
<h1>A Quick History</h1>
<h2>The Relationship between Linux Kernel and BitKeeper</h2>
<p>In the early 2000s, the Linux Kernel started using BitKeeper. Larry McVoy (the copyright holder of BitKeeper) allowed the Linux developers to use BitKeeper on one condition: “They couldn’t reverse-engineer or create a competing open-source tool based on BitKeeper”.</p>
<h2>The Crisis</h2>
<p>In 2005, Larry McVoy, the copyright holder of BitKeeper, claimed that Andrew Tridgell, the creator of Samba, used SourcePuller to reverse-engineer BitKeeper’s protocol. Some sources say he analyzed the network traffic between BitKeeper’s client and server.</p>
<p>BitKeeper saw this as a violation of their agreement and revoked the free access, cutting off the Linux project from BitKeeper.</p>
<h2>The Replacement</h2>
<p>So, now the Linux Kernel needed a replacement for BitKeeper as soon as possible. At the time, the two of the Source-Code Management Systems were Concurrent Version System (CVS) and Subversion (SVN).</p>
<p>However, neither of them met Linus’s criteria, eliminating all the existing systems. This called for the making of a system that was actually needed, and Git was born.</p>
<h2>The Birth of Git</h2>
<p>Linus Torvalds started the development of Git on 3rd April 2005, and announced the project on 6th April 2005, with the main development part of Git taking 10 days (so to the ones whose birthdays fall here, do not forget to wish Git too!).</p>
<h2>Linus’s Approach</h2>
<p>Linus didn’t build an SCM; he built a Content-Addressable filesystem. These were his lines:</p>
<blockquote>
<p>In many ways you can just see git as a filesystem—it's content-addressable, and it has a notion of versioning, but I really designed it coming at the problem from the viewpoint of a filesystem person (hey, kernels is what I do), and I actually have absolutely zero interest in creating a traditional SCM system.</p>
</blockquote>
<p>His focus was on the snapshot objects, SHA-1 hashing (Secure Hash Algorithm), and fast DAG (directed acyclic graphs) traversals. I remember studying these for the semesters. Haha.</p>
<p>The main goals that Torvalds designed Git for were: <em>[Source:</em> <a href="https://git-scm.com/book/ms/v2/Getting-Started-A-Short-History-of-Git"><em>here</em></a><em>]</em></p>
<ul>
<li><p>Speed: Efficient handling of large repositories.</p>
</li>
<li><p>Distributed Architecture: Every developer has a complete repository copy.</p>
</li>
<li><p>Data Integrity: Secure tracking of changes.</p>
</li>
<li><p>Non-linear Development: Strong branching and merging support.</p>
</li>
</ul>
<p><em>[Further Reading of Git's History [</em><a href="https://en.wikipedia.org/wiki/Git#History"><em>here</em></a><em>]]</em></p>
<h2>The Onset Of GitHub</h2>
<p>I will be honest, a year ago I thought Git was an extension to GitHub itself, but it turns out to be kind of the other way around.</p>
<p>GitHub emerged as a platform built around Git, making it easier for developers to host, manage, and collaborate on Git repositories. Its development began in 2007 and was launched in 2008.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a8bd38944ed7365b6baebe8/7c4abfd4-960d-42c8-a41c-042fdfae314f.jpg" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>Photo by <a href="https://unsplash.com/@synkevych?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Roman Synkevych</a> on <a href="https://unsplash.com/photos/black-and-white-penguin-toy-wX2L8L-fGeA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
</blockquote>
<p>A bit unrelated, but I've got to say this.</p>
<p>This mascot you see here was originally created by a graphic designer to sell on iStock, which eventually became GitHub's mascot "Mona," an anthropomorphized "octocat" with five octopus-like arms.</p>
<hr />
<h1>Why C as Starters?</h1>
<p>At the time, given how much the languages had evolved, C came out to be a better option. But we could wonder why Linus did not choose C++ instead.</p>
<h2>The Git Mailing List Debate</h2>
<p>On 5th September 2007, a developer (Dmitry Kakurin) posted to the Git mailing list asking why Git was written in pure C instead of C++.</p>
<p>To this, Linus replied, saying: <em>[A reference:</em> <a href="https://zivukushingai.medium.com/linus-torvalds-c-is-really-a-terrible-language-2248b839bee3"><em>here</em></a><em>]</em></p>
<blockquote>
<p>“C++ is a horrible language!”</p>
</blockquote>
<p>One of his arguments in an earlier thread was that C++ was limited because of its abstractions at the time, quoting;</p>
<blockquote>
<p>“Hides things like memory allocations behind your back”</p>
</blockquote>
<p><em>[It gets a little technical here~ and we are talking about the level of C++ back in 2005]</em></p>
<p>The general reasoning we could make is that C++ abstractions like the standard template libraries, implicit memory allocations, and complex object models can create a hidden overhead, unstable compilation across platforms, and poor design habits for low-level systems.</p>
<h2>Some Inferences</h2>
<p>Looking at some of Quora's lines, while they don’t have a direct relation, we could infer something from them. They basically talk about why some foundational libraries and system tools favor C. <em>[You can refer to the Quora discussion</em> <a href="https://www.quora.com/Why-was-Git-written-in-C-and-not-C?topAns=388869389"><em>here</em></a><em>]</em></p>
<p>C has predictable codepaths and memory overhead, which avoids C++ virtual method table lookups and class metadata. It has direct ABI (Application Binary Interface) stability and standard C linkage without the name-mangling issues common in C++. And C also has compact runtime efficiency framework bloat.</p>
<h2>Git Architecture &amp; Linux Kernel Principles</h2>
<p>Git's core interacts heavily with the operating system: files, processes, pipes, memory, sockets, and filesystem metadata. C provides direct access to these Unix/POSIX interfaces with relatively little runtime machinery.</p>
<p>Basically, all of this means Git's original problem was fundamentally a low-level systems problem, and C gave Linus direct control over the data structures, memory, files, and processes involved.</p>
<hr />
<h1>The Ecosystem Evolves: Git Reimplemented</h1>
<h2>Why Reimplement?</h2>
<p>As Git became infrastructure rather than merely a command-line tool, developers increasingly wanted Git functionality embedded directly into applications and services.</p>
<p>What does it mean? It means that they exist because different ecosystems wanted Git functionality implemented natively in their own environments.</p>
<h2>The Major Ports</h2>
<h3>Java (JGit):</h3>
<p>A Git implementation for the JVM, allowing Java applications to work with Git repositories without depending on the C Git executable.</p>
<h3>C-as-a-library (libgit2):</h3>
<p>It keeps C but changes the delivery model. Instead of Git primarily being an executable that users invoke, libgit2 provides Git functionality as a library that applications can link against.</p>
<h3>Go (Go-Git):</h3>
<p>Git implemented directly in Go. Applications written in Go can interact with Git repositories through Go APIs rather than invoking the external Git executable.</p>
<h3>Rust (Gitoxide):</h3>
<p>This term genuinely sounds like a chemical. Anyways, a Rust-based reimplementation exploring memory safety, performance, and modern systems-programming techniques.</p>
<hr />
<h1>A Fun Nuance</h1>
<p>A fun thing I found about Git, which I was definitely not expecting, was the meaning behind its name.</p>
<p>Git is actually a British English slang for an unpleasant or silly person. The man page (manual page) of Git describes it as “the stupid content tracker”.</p>
<p>It came out rather funny and very humane to me when I read this. I can’t mention any further, but if you are interested in getting a laugh at the silliness of humanity, you can give a read [<a href="https://en.wikipedia.org/wiki/Git#Naming"><em>here</em></a><em>]</em>.</p>
<hr />
<h1>The Takeaway</h1>
<p>What started as a simple “Git is written in C” fact somehow led me through a licensing crisis, distributed systems, content-addressable storage, DAGs, and multiple programming languages. And I think that is what makes Git interesting: behind a command as simple as git commit is a history of engineering decisions that still shape how we work with software today.</p>
<hr />
<p><em>Sources</em>:</p>
<ul>
<li><p><a href="https://en.wikipedia.org/wiki/Git">Wikipedia</a></p>
</li>
<li><p><a href="https://git-scm.com/book/ms/v2/Getting-Started-A-Short-History-of-Git">Git</a></p>
</li>
<li><p><a href="https://github.com/shawnanastasio/BasilC/issues/9">A GitHub reference of Linus's lines</a></p>
</li>
<li><p><a href="https://fossbytes.com/linux-creator-linus-torvalds-c-programming-horrible/#google_vignette">An article on Linus’s stance on C++</a></p>
</li>
<li><p><a href="https://github.com/git/git">The source code of Git</a></p>
</li>
<li><p><a href="https://www.quora.com/Why-was-Git-written-in-C-and-not-C?topAns=388869389">Some arguments on Git being written in C</a></p>
</li>
<li><p><a href="https://zivukushingai.medium.com/linus-torvalds-c-is-really-a-terrible-language-2248b839bee3">A later discussion on Rust and a reference to Linus’s lines on the 2007 Git Mailing List Debate</a></p>
</li>
</ul>
]]></content:encoded></item></channel></rss>