<?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" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The OSS History Newsletter]]></title><description><![CDATA[We study the history of open-source software.]]></description><link>https://osshistory.org</link><image><url>https://substackcdn.com/image/fetch/$s_!MLMX!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697a9f4e-a213-44f9-b750-b7ebdc0f7000_512x512.png</url><title>The OSS History Newsletter</title><link>https://osshistory.org</link></image><generator>Substack</generator><lastBuildDate>Sun, 19 Apr 2026 09:13:51 GMT</lastBuildDate><atom:link href="https://osshistory.org/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[CodeCrafters Inc.]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[support@osshistory.org]]></webMaster><itunes:owner><itunes:email><![CDATA[support@osshistory.org]]></itunes:email><itunes:name><![CDATA[Sarup Banskota]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sarup Banskota]]></itunes:author><googleplay:owner><![CDATA[support@osshistory.org]]></googleplay:owner><googleplay:email><![CDATA[support@osshistory.org]]></googleplay:email><googleplay:author><![CDATA[Sarup Banskota]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Story of Elixir]]></title><description><![CDATA[How did the programming language Elixir come to be?]]></description><link>https://osshistory.org/p/elixir</link><guid isPermaLink="false">https://osshistory.org/p/elixir</guid><dc:creator><![CDATA[Jiahao]]></dc:creator><pubDate>Mon, 15 Jan 2024 04:41:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/09881116-b693-4d3f-910a-ed044b54f429_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, Elixir powers companies like Discord with millions of concurrent users.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> </p><p>In this article, we look at the origin story of Elixir and its creator, Jos&#233; Valim.&nbsp;</p><p>What led Jos&#233; to create Elixir? What were the early days like? How did it grow?</p><h2><strong>Who is Jos&#233; Valim?</strong></h2><p>Jos&#233; Valim is a Brazilian software engineer, who developed an interest in multi-core systems at a young age.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><blockquote><p>Going back to my first computer that I got when I was 8 to 10 years old, it was a powerful computer at the time, but two years later, not even that&#8230; So I had a Pentium 100, and a boy at school told me he had a Pentium 233. And I was like, &#8220;How come? We just got this computer, we&#8217;ve barely finished paying for it. How come you have a machine that is more than twice as fast as mine?</p></blockquote><p>Jos&#233; understood early that the next step in computing would not simply be more powerful single-core machines, but rather machines with multiple cores.</p><p><strong>Jos&#233; and Ruby</strong></p><p>The first programming language Jos&#233; got really good at was Ruby.&nbsp;</p><p>A year after graduating from University in 2009, Jos&#233; founded Platformatec, a Ruby-focused software development agency. A year into Platformatec, he became part of the Rails core team, and continued contributing for another four years.&nbsp;</p><p>In his Rails projects, Jos&#233; frequently kept running into hard-to-reproduce bugs related to race conditions. In a multi-core system, it&#8217;s possible that two cores try to modify the same place in memory, or handle the same resource at the same time. Languages such as Ruby didn&#8217;t protect against such race conditions caused by improper synchronization of memory access.<br><br>Jos&#233; started thinking about how he might tackle this problem.</p><p>It&#8217;s this curiosity that led him to create Elixir.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://osshistory.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe to the OSS History newsletter for free, and learn the origin stories behind the software you use every day.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Converging Ideas</strong></h2><p>In his search for a solution, Jos&#233; attributes two points of no return.</p><p>The first was discovering functional programming &#8212; specifically, immutability. The concept of immutability meant that data was not shared across processes. This eliminated a category of problems plaguing other procedural and object-oriented programming languages. The second was his discovery of the Erlang Virtual Machine.</p><p>Erlang was first developed as proprietary software within Ericsson in 1986. It was later released as free and open-source in 1988. It was designed to scale telephony systems that required fault tolerance and distribution. Erlang supported concurrency both within a single machine and communication between machines. The latter was something other languages did not support easily.</p><p>Jos&#233;'s exploration into functional programming wasn't limited to Erlang. He delved into languages like Frink and Clojure, enriching his understanding of functional paradigms. However, it was the capabilities of the Erlang VM that ultimately inspired him. </p><p>Recognising its potential, Jos&#233; chose it as the foundation for his own programming language &#8212; Elixir.</p><h2><strong>Early Days of Elixir</strong></h2><p>By April 2011, Jos&#233; had v0.3 of Elixir ready, and was using it for personal projects. </p><p>However, his initial prototype did not meet the complete vision he had for Elixir.</p><p>Replicating Ruby- features within the Erlang VM required adding extra layers of abstraction over Erlang, reducing Elixir's interoperability with it. Any new function or module in new Erlang releases would have to be wrapped first in Elixir, which meant that Elixir would constantly be playing catch up with Erlang.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>As a result, Jose took a break to first study other languages and gather insights for improving Elixir. He became more critical of features added to Elixir. For every feature, he questioned its necessity and optimal implementation. </p><p>After months of research, Elixir&#8217;s foundation was formed. Jos&#233; approached Plataformatec in February 2012 to discuss the possibility of sponsoring Elixir, and got their green signal. He published v0.5 of Elixir in May 2012, the very first release on the Elixir website. </p><p>To get others excited about Elixir, Jos&#233; attended events and met other programmers. He shared about Elixir and gathered feedback about the language. During the Oredev Conference in 2012, Jos&#233; expressed his vision for Elixir. He wanted Elixir to enhance developer productivity and promote language extensibility. He also wanted to preserve a high degree of compatibility with Erlang. <a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><p>The early iterations of Elixir did not have as many features as the language today. In fact, the Stream module was only introduced in v0.10 in July 2013, a year after the release of v0.5. Another milestone for Elixir was the announcement of ElixirConf in April 2014.</p><p>Nowadays, major releases are less frequent, often focusing on "quality of life" improvements. However, the ecosystem has been growing, supporting Elixir's use in modern systems.</p><h2><strong>Elixir&#8217;s Ecosystem</strong></h2><p>One of Elixir's greatest strengths is its community of developers who contribute libraries and frameworks. These are five of the projects that have become the cornerstones of the Elixir ecosystem.</p><h3><strong>Phoenix</strong></h3><p><a href="https://github.com/ScenicFramework/scenic">Phoenix</a> was first developed in 2014 by Elixir developer Chris McCord. Phoenix is a server-side web framework inspired by Ruby on Rails. It brings the familiarity of the Rails framework to Elixir. One of its modules is<a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html"> LiveView</a>. It flips the traditional client-server architecture on its head. It uses a persistent web socket/long polling instead of client-server HTTP requests. This reduces latency and removes the network overhead of HTTP requests.</p><h3><strong>Scenic</strong></h3><p><a href="https://github.com/ScenicFramework/scenic">Scenic</a> is a client application library. Scenic provides GUIs for fixed screen connected devices. These devices are often used in the Internet of Things (IoT). Boyd Multerer, the person behind Scenic, is also responsible for Xbox Live. He founded and led the team that worked on the Xbox One operating system.</p><h3><strong>Nerves</strong></h3><p><a href="https://nerves-project.org/">Nerves</a> is an open-source platform for building embedded systems with Elixir. It creates a specialized environment that runs the BEAM VM. This brings all the benefits of Elixir and the BEAM VM to the embedded system.</p><h3><strong>Nx</strong></h3><p><a href="https://github.com/elixir-nx/nx">Nx</a> (or Numerical Elixir) is a multi-dimensional tensor library that leverages multi-staged compilation to the CPU/GPU. It is a newer addition to the Elixir ecosystem and it is an attempt to bring AI/ML capabilities to Elixir.</p><h3><strong>Membrane</strong></h3><p><a href="https://membrane.stream/">Membrane</a> is a multimedia processing framework that supports a wide range of multimedia types. It can be used to develop real-time communication applications like Zoom.</p><h2><strong>Elixir&#8217;s Popularity</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UZAv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UZAv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 424w, https://substackcdn.com/image/fetch/$s_!UZAv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 848w, https://substackcdn.com/image/fetch/$s_!UZAv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 1272w, https://substackcdn.com/image/fetch/$s_!UZAv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UZAv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png" width="1456" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UZAv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 424w, https://substackcdn.com/image/fetch/$s_!UZAv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 848w, https://substackcdn.com/image/fetch/$s_!UZAv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 1272w, https://substackcdn.com/image/fetch/$s_!UZAv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff802d674-331e-46e0-9d8c-fadaef0e99a5_1600x508.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://trends.google.com/trends/explore?date=2012-01-05%202023-12-12&amp;q=%2Fm%2F0pl075p&amp;hl=en">Google Trends</a> of &#8220;Elixir&#8221; worldwide</figcaption></figure></div><p>Interest in Elixir has grown over the years as the language and its ecosystem have matured. According to the Stack Overflow Developer Survey, Elixir has consistently ranked in the top three "most loved languages by developers". Phoenix has also become the most liked web framework of 2022 and 2023. <a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><p>Elixir&#8217;s popularity has also risen among companies. Companies like Discord use Elixir to support five million concurrent users. Elixir has also seen growing use cases in areas like embedded systems and web development.</p><h3><strong>Embedded Systems with Elixir</strong></h3><p>Embedded systems programming is dominated by lower-level languages like C or C++. This is because these Internet of Things (IoT) devices need to be performant given their limited processing power. Yet, Elixir has found a niche in the embedded systems space. Elixir focuses on solving problems outside of writing performant systems.</p><p>IoT devices may be used in areas with external factors like network connectivity and physical accessibility. These factors influence the maintainability of such devices. In these cases, performance is not the only consideration when building the embedded system. In such scenarios, Elixir can help to maintain the connection between devices and the central server. This reduces the amount of manual intervention necessary for such systems.</p><p>Connor Rigby, a former embedded systems engineer at Farmbot, has mentioned how using Elixir allowed Farmbot to build lean systems that worked well in low-bandwidth areas. <a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a></p><h3><strong>Web Development with Elixir</strong></h3><p>Elixir has also grown in the web development space with the introduction of Phoenix. Companies like Heroku and Mozilla have adopted Elixir. They use it to develop and migrate their web applications and core services.</p><p>Using Elixir allowed Heroku's analytics service to handle 3,000 to 4,000 requests per second. The average response time was also reduced to about 1ms.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> Mozilla uses Phoenix to build REST endpoints, implement chat messaging, and create real-time avatar tracking features.</p><h2><strong>Flaws of Elixir</strong></h2><p>Elixir has a low adoption rate in industry. Languages like Javascript for web development remain the go-to language for most teams. This is likely due to the greater diversity of tools available for these languages.</p><p>The functional programming paradigm also introduces a learning curve for those learning Elixir. Elixir's module system and immutability is a departure from imperative languages like Java. This means that developers will take time adjusting to this new way of solving problems.</p><p>Elixir also has a lack of educational resources compared to other languages. This can make it trickier to learn the language for those accustomed to languages with more resources like Javascript.</p><h2><strong>Conclusion</strong></h2><p>Elixir is proof that the growth of a language relies on its community. <br><br>Individuals like Chris McCord, Frank Hunleth, and Boyd Multerer have contributed libraries, as well as their time and expertise for the community. These contributions have shaped Elixir's ecosystem.</p><p>Elixir&#8217;s development also highlights the importance of keeping high-level objectives in software development. Every feature of a project should always be met with two questions, &#8220;Why do we need it?&#8221; and &#8220;What is the best way to do it?&#8221;. This helps to keep the project lean and focused.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Discord has been an early adopter of Elixir and have extensively written about its usage on <a href="https://discord.com/blog/how-discord-scaled-elixir-to-5-000-000-concurrent-users">an engineering blog post</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>An <a href="https://www.welcometothejungle.com/en/articles/btc-elixir-Jos&#233;-valim">interview transcript</a> with Jose Valim.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Elixir v0.5.0 was released on May 25, 2012. The release blog post contains a <a href="https://elixir-lang.org/blog/2012/05/25/elixir-v0-5-0-released/">&#8220;Looking Back&#8221;</a> section that goes into the history.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Jose Valim&#8217;s <a href="https://vimeo.com/53221562">talk</a> at Oredev Confererence, going over the main goals and features of Elixir.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>Phoenix was voted most liked web framework of <a href="https://survey.stackoverflow.co/2022#technology-most-loved-dreaded-and-wanted">2022</a> and <a href="https://survey.stackoverflow.co/2023/">2023</a> on Stack Overflow.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Elixir has published a <a href="https://elixir-lang.org/blog/2020/08/20/embedded-elixir-at-farmbot/">case study</a> of Farmbot&#8217;s usage on its blog.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>Elixir has published a <a href="https://elixir-lang.org/blog/2020/09/24/paas-with-elixir-at-Heroku/">case study</a> of Heroku&#8217;s usage on its blog.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[The World Before Git]]></title><description><![CDATA[What was version control like before Git?]]></description><link>https://osshistory.org/p/the-world-before-git</link><guid isPermaLink="false">https://osshistory.org/p/the-world-before-git</guid><dc:creator><![CDATA[Sarup Banskota]]></dc:creator><pubDate>Mon, 18 Dec 2023 08:41:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3b755656-a791-4931-9228-2e1434e02ed2_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Unless you've been writing code for decades, you've likely never used a VCS<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> besides Git. However Git is far from being the first important VCS.&nbsp;</p><p>In this post, we trace the history of VCS, leading up to the creation of Git.&nbsp;</p><h3><strong>The Earliest Forms of VCS: </strong>Manual</h3><p>In the early 1970s, developers managed versions by manually storing copies of their files. If they thought an iteration was significant, they&#8217;d save a copy. There was no standard practice, and every developer had a personal technique.</p><p>As computers got more capable, software got more complex, and so did the process of creating it. Developers iterated more, and they needed dedicated tools to be able to store and retrieve past versions of their code.</p><h3><strong>The First &#8220;Proper&#8221; VCS: SCCS and RCS</strong></h3><p>The first formal VCS was SCCS<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>, launched in 1972 by Marc J. Rochkind at Bell Labs. It pioneered many concepts that we take for granted today.&nbsp;</p><p>For example, SCCS was the first to introduce <em>automatic</em> revision tracking. Developers could now write a command, and trigger automatic storage of the current version of their file. They could trigger another command to retrieve a past version. Later versions of SCCS supported branching and merging as well. </p><p>SCCS was a giant leap in the developer workflow.</p><p>Most unique among its features, was its storage mechanism. Instead of saving full duplicate of the file being versioned, SCCS stored just changes. It treated the first version of a file as the base and stored it in full. For subsequent updates, it stored only the changes as <em>&#8220;deltas&#8221;</em> within a file internal to SCCS.</p><p>This technique was great for optimising file storage.</p><p>As the tool got more usage, it became evident that the delta storage technique SCCS employed wasn&#8217;t very ideal for performance. To reconstruct the file for any given version, it had to start with the base version, and then apply deltas sequentially. It&#8217;s also why it&#8217;s called "forward delta".</p><p>Forward delta was like trying to assemble a jigsaw puzzle from scratch each time you want to see the complete picture. For common usage patterns, it was just inefficient.</p><p>Ten years later in 1982, Walter F. Tichy of Purdue University launched RCS<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> &#8212; a more performant alternative to SCCS.</p><p>Walter retained the idea of delta storage, but flipped the mechanism with its &#8220;reverse delta&#8221; method. Instead of using the first version as base, he smartly chose the latest version. RCS deltas compared changes compared to the latest version of the code. <br><br>This was a lot more efficient for common tasks, since developers were rarely going too far back in their file history. In addition to improving performance, RCS also improved on the user experience with simpler commands, and introduced a branching and merging system that was more intuitive for developers in that era.&nbsp;</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://osshistory.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe to the OSS History newsletter for free, and learn the origin stories behind the software you use every day.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3><strong>CVS: RCS, but better</strong></h3><p>As programs continued to get more complex, SCCS and RCS were no longer able to meet the needs of developers. Both worked best for projects on a single machine. Both could version just individual files, not entire projects. When a file was being edited by one developer, it was locked to prevent getting edited by others simultaneously on the same network.</p><p>To overcome these shortcomings, Dick Grune launched CVS<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> in 1986, while working at the Dutch University Vrije Universiteit.</p><p>CVS still used RCS on the back-end, but added multi-file support, and introduced a client-server collaboration model. This meant that the codebase could now be stored on a central server and accessed by developers from different locations, facilitating collaborative work. In its heyday, CVS was a significant leap forward.&nbsp;</p><h3><strong>The 1990s: The Era of Proprietary VCS</strong></h3><p>In the mid-1990s, the software world was saw many new proprietary VCS enter the scene and innovate in different areas.&nbsp;</p><p>ClearCase by Atria Software introduced a robust branching model, and the ability to configure workflows to the preferences of&nbsp;individual teams within enterprises. SourceSafe by One Tree Software was known for its user-friendly interface, and got acquired by Microsoft. Perforce was known for its exceptional performance.</p><p>As for the open source VCS ecosystem, it was mostly quiet.</p><h3><strong>SVN and BitKeeper: Centralised vs Distributed</strong></h3><p>In 2000, BitKeeper<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> arrived on the scene. Although proprietary, it would go on to be critical in the Git story. Also in 2000, work started on SVN<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a>, which would go on to be the next major open source VCS after CVS.</p><p>SVN was created by CollabNet Inc. with key contributions from Karl Fogel and Jim Blandy. It was designed to overcome the shortcomings of CVS, and got very popular in the open-source community. Some developers use it to this day.</p><p>A key idea SVN introduced was that of atomic commits. With CVS, when a commit operation failed halfway, it would lead to data getting corrupted. Part of the files would get saved, and part of them would be lost. SVN&#8217;s commits took an all or nothing approach, ensuring reliability.</p><p>SVN also innovated in its data storage mechanism. In CVS, when you created a branch, it essentially made a full copy of all the files from the original branch at that point in time. This would consume a lot of storage space, especially for large projects. When you created a branch in SVN, it didn&#8217;t duplicate all the files. Instead, it created a new directory for the branch that initially only held references to the original files. As changes were made in the new branch, SVN would store only those changes.</p><p>SVN was centralised, like all other VCS up to that point. Developers would write their code locally, but they had to depend on a central repository for versioning information. Operations such as viewing history, committing changes, or creating branches required connectivity to the central server, and weren&#8217;t possible offline.</p><p>BitKeeper is significant for being the first popular distributed VCS. Unlike SVN, it allowed developers to have full local copies of the projects they were working on, which was a novel concept at the time. While SVN&#8217;s restrictive approach was seen as an advantage in some corporate settings, BitKeeper&#8217;s distributed model was more naturally suited for the nature of open source collaboration.<br><br>For these reasons, it enjoyed adoption from its most notable user, the Linux Kernel Project.</p><h3><strong>The Linux Kernel Controversy</strong></h3><p>Technology-wise, BitKeeper was perfect for the kernel project. However, it wasn&#8217;t open source software. While Linus Torvalds liked BitKeeper and adopted it, he couldn&#8217;t continue to use it due to backlash from the kernel core team.&nbsp;</p><p>Using a proprietary system was seen as misaligned with the principles of a flagship free project. There were other VCS available at the time, but none that met the performance requirements for a project as complex as the Kernel.&nbsp;</p><p>Despite not actually wanting to<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a>, Linus decided to write his own tool, and ended up launching Git within two weeks.&nbsp;He described git as "the stupid content tracker". <a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-8" href="#footnote-8" target="_self">8</a></p><p>The rest, as we know, is history.</p><div><hr></div><p>Special thanks to Tyler Von Harz for his contributions to this article.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Short for &#8220;Version Control System&#8221;. <a href="https://www.perforce.com/blog/vcs/what-is-version-control">Source</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p><a href="https://en.wikipedia.org/wiki/Source_Code_Control_System">SCCS</a> (Source Code Control System) is regarded as the first proper VCS. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p><a href="https://www.gnu.org/software/rcs/">RCS</a> (Revision Control System) was a performance improvement over SCCS. <br>Also see <a href="https://www.cs.purdue.edu/homes/trinkle/RCShome/">Purdue RCS Homepage</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p><a href="https://cvs.nongnu.org/">CVS</a> (Concurrent Versions System) was a front-end to RCS. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p><a href="http://www.bitkeeper.org/">BitKeeper</a> was the first distributed VCS.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Apache <a href="https://subversion.apache.org/">SVN</a> (Subversion) was a popular centralised VCS in the early 2000s.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>In <a href="https://www.linuxfoundation.org/blog/blog/10-years-of-git-an-interview-with-git-creator-linus-torvalds">this interview</a>, Linus Torvalds shares how he didn&#8217;t actually have any interest in writing a new version control system, but was forced to, because nothing else met the needs of the Linux Kernel project at the time.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-8" href="#footnote-anchor-8" class="footnote-number" contenteditable="false" target="_self">8</a><div class="footnote-content"><p><a href="https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitFaq.html#Why_the_.27Git.27_name.3F">Quoting</a> Linus: "I'm an egotistical bastard, and I name all my projects after myself. First 'Linux', now 'Git'". "git" can mean anything, depending on your mood:</p><ul><li><p>Random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.</p></li><li><p>Stupid. Contemptible and despicable. Simple. Take your pick from the dictionary of slang.</p></li><li><p>"Global information tracker": you're in a good mood, and it actually works for you. Angels sing and light suddenly fills the room.</p></li><li><p>"Goddamn idiotic truckload of sh*t": when it breaks</p></li></ul></div></div>]]></content:encoded></item></channel></rss>