-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta name="generator" content=
-"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
-<meta http-equiv="Content-Type" content=
-"text/html; charset=us-ascii">
-<title>To Fork or Not To Fork</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084"
-alink="#0000FF">
-<div class="article">
-<div class="titlepage">
-<div>
-<div>
-<h2 class="title"><a name="paper-11194" id="paper-11194"></a>To
-Fork or Not To Fork</h2>
-</div>
-<div>
-<h3 class="subtitle"><i>Lessons From Ubuntu and Debian</i></h3>
-</div>
-<div>
-<div class="author">
-<h3 class="author"><span class="firstname">Benjamin</span>
-<span class="othername">Mako</span> <span class=
-"surname">Hill</span></h3>
-<div class="affiliation"><span class="orgname">Canonical
-Limited<br></span></div>
-<div class="affiliation"><span class="orgname">The Debian GNU/Linux
-Project<br></span></div>
-<div class="affiliation"><span class="orgname">Software in the
-Public Interest, Inc.<br></span></div>
-</div>
-</div>
-<div>
-<p class="copyright">Copyright © 2005 Benjamin Mako
-Hill</p>
-</div>
-<div>
-<div class="legalnotice"><a name="idp27154528" id=
-"idp27154528"></a>
-<p>This material is licensed under the <a class="ulink" href=
-"http://creativecommons.org/licenses/by-sa/2.0/" target=
-"_top">Creative Commons Attribution-Sharealike 2.0 License</a>.</p>
-<p>The canonical location for the most recent version of this
-document is <a class="ulink" href="http://mako.cc/" target=
-"_top">at the author's website</a>.</p>
-</div>
-</div>
-<div>
-<div class="revhistory">
-<table style="border-style:solid; width:100%;" summary=
-"Revision History">
-<tr>
-<th align="left" valign="top" colspan="2"><b>Revision
-History</b></th>
-</tr>
-<tr>
-<td align="left">Revision 0.2</td>
-<td align="left">August 7, 2005</td>
-</tr>
-<tr>
-<td align="left" colspan="2">Correction and improvements.</td>
-</tr>
-<tr>
-<td align="left">Revision 0.1</td>
-<td align="left">May 15, 2005</td>
-</tr>
-<tr>
-<td align="left" colspan="2">
-<p>The first version of this paper was written to an accepted talk
-given at Linuxtag 2005 given in Karlsruhe, Germany.</p>
-</td>
-</tr>
-</table>
-</div>
-</div>
-</div>
-<hr></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="section"><a href=
-"#idp27161152">Introduction</a></span></dt>
-<dt><span class="section"><a href="#idp27077936">"Fork" Is A Four
-Letter Word</a></span></dt>
-<dt><span class="section"><a href="#idp27089792">Case
-Study</a></span></dt>
-<dd>
-<dl>
-<dt><span class="section"><a href="#idp26985776">The Debian
-Project</a></span></dt>
-<dt><span class="section"><a href=
-"#idp26996864">Ubuntu</a></span></dt>
-<dt><span class="section"><a href=
-"#idp32030512">Applicability</a></span></dt>
-</dl>
-</dd>
-<dt><span class="section"><a href="#idp26879744">Balancing Forking
-With Collaboration</a></span></dt>
-<dd>
-<dl>
-<dt><span class="section"><a href="#idp26880432">Derivation and
-Problem Analysis</a></span></dt>
-<dt><span class="section"><a href="#idp32061728">Distributed Source
-Control</a></span></dt>
-<dt><span class="section"><a href="#idp32075664">Problem Specific
-Tools</a></span></dt>
-<dt><span class="section"><a href="#idp32079568">Social
-Solutions</a></span></dt>
-</dl>
-</dd>
-<dt><span class="section"><a href=
-"#idp32092080">Conclusions</a></span></dt>
-</dl>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h2 class="title" style="clear: both"><a name="idp27161152" id=
-"idp27161152"></a>Introduction</h2>
-</div>
-</div>
-</div>
+{% extends 'latex-like-layout.tmpl' %}
+{% set page_title = 'To Fork or Not To Fork: Lessons From Ubuntu and Debian' %}
+
+{% block content_box %}
+
+<h2 class="date">May 15 2005; Revised August 7, 2005</h2>
+
+<blockquote>
+ <p><em>Translated into <a href="http://science.webhostinggeeks.com/fork">Serbo-Croatian (Srpskohrvatski)</a> by Anja Skrba.</em></p>
+
+ <p><em>The first version of this paper was written to an accepted talk given at Linuxtag 2005 given in Karlsruhe, Germany.</em></p>
+</blockquote>
+
+<h2>Introduction</h2>
+
<p>The explosive growth of free and open source software over the
last decade has been mirrored by an equally explosive growth in the
ambitiousness of free software projects in choosing and tackling
producing millions of lines of code. Their software is being used
by millions of users with diverse sets of needs. This paper focuses
on two major effects of this situation:</p>
-<div class="itemizedlist">
-<ul class="itemizedlist" style="list-style-type: disc;">
+
+<ul class="itemizedlist">
<li class="listitem">
<p>The communities that free software projects — and in
particular large projects — serve are increasingly diverse.
to even track and maintain a fork of a large project over time.</p>
</li>
</ul>
-</div>
+
<p>Taken together, these facts imply an increasingly realized free
software community in which programmers frequently derive but where
traditional forking is often untenable. "Forks," as they are
products that have forked but that maintain a close relationship as
they develop parallelly and symbiotically. To do this, developers
should:</p>
-<div class="itemizedlist">
-<ul class="itemizedlist" style="list-style-type: disc;">
+
+<ul class="itemizedlist">
<li class="listitem">
<p>Break down the process of derivation into a set of different
types of customization and derivation and prioritize methods of
emphasis on maintaining differences over time.</p>
</li>
</ul>
-</div>
+
<p>This paper is an early analysis of this set of problems. As
such, it is highly focused on the experience of the Ubuntu project
and its existence as a derived Debian distribution. It also pulls
Distribution (CDD) community. Since I participate in both the
Ubuntu and CDD projects, these are areas that I can discuss with
some degree of knowledge and experience.</p>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h2 class="title" style="clear: both"><a name="idp27077936" id=
-"idp27077936"></a>"Fork" Is A Four Letter Word</h2>
-</div>
-</div>
-</div>
+
+<h2></a>"Fork" Is A Four Letter Word</h2>
+
<p>The act of taking the code for a free software project and
bifurcating it to create a new project is called "forking." There
have been a number of famous forks in free software history. One of
Project Management HOWTO</a> more than four years ago, I included a
small subsection on forking which described the concept to future
free software project leaders with this text:</p>
-<div class="blockquote">
+
<blockquote class="blockquote">
<p>The short version of the fork section is, don't do them. Forks
force developers to choose one project to work with, cause nasty
political divisions, and redundancy of work.</p>
</blockquote>
-</div>
+
<p>In the <span class="emphasis"><em>best</em></span> situations, a
fork means that two groups of people need to go on developing
features and doing work they would ordinarily do <span class=
become increasingly unclear. In part due to the same systems, the
benefits and drawbacks of what is increasingly problematically
called forking is equally debatable.</p>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h2 class="title" style="clear: both"><a name="idp27089792" id=
-"idp27089792"></a>Case Study</h2>
-</div>
-</div>
-</div>
+
+<h2>Case Study</h2>
+
<p>In my introduction, I described how the growing scope of free
software projects and the rapidly increasingly size and diversity
of user communities is spearheading the need for new type of
forking. Nowhere is this more evident than in the largest projects
with the broadest scope: a small group of projects that includes
operating system distributions.</p>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp26985776" id="idp26985776"></a>The
-Debian Project</h3>
-</div>
-</div>
-</div>
+
+<h3>The Debian Project</h3>
+
<p>The Debian project is by many counts the largest free software
distribution in terms of code. It is the also, arguably, the
largest free software project in terms of the number of volunteers.
wide selection of packages to choose from, and strong commitment to
software freedom which ensures derivability, Debian provides an
ideal point from which to create a GNU/Linux distribution.</p>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp26996864" id=
-"idp26996864"></a>Ubuntu</h3>
-</div>
-</div>
-</div>
+
+<h3>Ubuntu</h3>
+
<p>The Ubuntu project was started by Mark Shuttleworth in April
2004 and the first version was built almost entirely by a small
group of a Debian developers employed by Shuttleworth's company
It was released to the world in late 2004. The second version was
released six months later in April 2005. The goals of Ubuntu are to
provide a distribution based on a subset of Debian with:</p>
-<div class="itemizedlist">
-<ul class="itemizedlist" style="list-style-type: disc;">
+
+<ul class="itemizedlist">
<li class="listitem">
<p>Regular and predictable releases — every six months with
support for eighteen months.</p>
usable for most desktop users "out of the box."</p>
</li>
</ul>
-</div>
+
<p>The Ubuntu project provides an interesting example of a project
that aims to derive from Debian to an extensive degree. Ubuntu made
code-level changes to nearly 1300 packages in Debian at the time
Canonical and Ubuntu:<a href="#ftn.idp27008624" class="footnote"
name="idp27008624" id="idp27008624"><sup class=
"footnote">[7]</sup></a></p>
-<div class="blockquote">
+
<blockquote class="blockquote">
<p>I don't think Ubuntu is a "fork" of Debian, at least not in the
traditional sense. A fork suggests that at some point we go our
but it's exactly what every derivative should do in the first
place.</p>
</blockquote>
-</div>
+
<p>There is some debate on the degree to which Ubuntu developers
have succeeded in accomplishing the goals laid out by Remnant.
Ubuntu has filed hundreds of patches in the bug tracking system but
diverge; it is always in Ubuntu's advantage to minimize the delta
where possible.</p>
</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp32030512" id=
-"idp32030512"></a>Applicability</h3>
-</div>
-</div>
-</div>
+
+<h3>Applicability</h3>
+
<p>Ubuntu and Debian are distributions and — as such —
operate on a different scale than the vast majority of free
software projects. They include more code and more people. As a
tools will find themselves employed productively in a wide variety
of projects with a broad spectrum of sizes, needs, scopes and
descriptions.</p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h2 class="title" style="clear: both"><a name="idp26879744" id=
-"idp26879744"></a>Balancing Forking With Collaboration</h2>
-</div>
-</div>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp26880432" id=
-"idp26880432"></a>Derivation and Problem Analysis</h3>
-</div>
-</div>
-</div>
+
+<h2></a>Balancing Forking With Collaboration</h2>
+
+<h3>Derivation and Problem Analysis</h3>
+
<p>The easiest step in creating a productive derivative software
project is to break down the problems of derivations into a series
of different classes of modification. Certain types of modification
according to the intrusiveness inherent in solving the problem and
the severity of the long-term maintainability problems that they
introduce):</p>
-<div class="orderedlist">
+
<ol class="orderedlist" type="1">
<li class="listitem">
<p>Selection of individual pieces of software;</p>
of changes to the packages code);</p>
</li>
</ol>
-</div>
+
<p>By breaking down the problem in this way, Debian derivers have
been able to approach derivation in ways that focus energy on the
less intrusive problems first.</p>
also the most promising and powerful if it can be done sustainably.
Changes of this type involve bifurcations of the code-base and will
be the topic of the remainder of this paper.</p>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp32061728" id=
-"idp32061728"></a>Distributed Source Control</h3>
-</div>
-</div>
-</div>
+
+<h3>Distributed Source Control</h3>
+
<p>One promising method of maintaining deltas in forked or branched
projects lies in distributed version control systems (VCS).
Traditional VCS systems work in a highly centralized fashion. CVS,
arbitrary delta, or sets of deltas, are maintained over time.</p>
<p>Distributed version control aims to solve a number of problems
introduced by CVS and alluded to above by:</p>
-<div class="itemizedlist">
+
<ul class="itemizedlist" style="list-style-type: disc;">
<li class="listitem">
<p>Allowing people to work disconnected from each other and to sync
<p>Allowing deltas to be maintained over time.</p>
</li>
</ul>
-</div>
+
<p>Ultimately, this requires tools that are better at merging
changes and in <span class="emphasis"><em>not</em></span> merging
certain changes when that is the desired behavior. It also leads to
"footnote" name="idp32069728" id="idp32069728"><sup class=
"footnote">[9]</sup></a></p>
</blockquote>
-</div>
+
<p>At the time of the switch, free distributed version control
tools were less advanced than they are today. At the moment, an
incomplete list of free software VCS tools includes GNU Arch,
In doing so, the project is focusing on integrating these into
problem specific tools built on top of distributed version
control.</p>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp32075664" id=
-"idp32075664"></a>Problem Specific Tools</h3>
-</div>
-</div>
-</div>
+
+<h3>Problem Specific Tools</h3>
+
<p>Another technique that Canonical Ltd. is experimenting with is
the creation of high level tools built on top of distributed
version control tools specifically designed for maintaining
an example of the way that problem and context specific tools may
play an essential role in the maintenance of derived code more
generally.</p>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h3 class="title"><a name="idp32079568" id="idp32079568"></a>Social
-Solutions</h3>
-</div>
-</div>
-</div>
+
+<h3>Social Solutions</h3>
+
<p>It has been said that it is a common folly of a technophile to
attempt to employ technical solutions toward solving social
problems. The problem of deriving software is both a technical
<p>Scott James Remnant compares the relationship between
distributions and derived distributions as similar to the
relationship between distributions and upstream maintainers:</p>
-<div class="blockquote">
+
<blockquote class="blockquote">
<p>I don't think this is much different from how Debian maintainers
interact with their upstreams. As Debian maintainers we take and
we're no more a fork of Debian than a Debian package is a fork of
its upstream.</p>
</blockquote>
-</div>
+
<p>Scott alludes the fact that, at least in the world of
distributions, parallel development is already one way to view the
<span class="emphasis"><em>modus operandi</em></span> of existing
branched because of social disagreements, a certain level of
collaboration on a social level will be essential to the long term
viability of the derivative.</p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage">
-<div>
-<div>
-<h2 class="title" style="clear: both"><a name="idp32092080" id=
-"idp32092080"></a>Conclusions</h2>
-</div>
-</div>
-</div>
+
+<h2>Conclusions</h2>
+
<p>As the techniques described in this paper evolve, the role that
they play in free software development becomes increasingly
prominent and increasingly important. Joining them will be other
processes. Ultimately, it will help free software capture more
users, bring in more developers, and produce more free software of
a higher quality.</p>
-</div>
-<div class="footnotes"><br>
+
<hr style="width:100; text-align:left;margin-left: 0">
<div id="ftn.idp26988128" class="footnote">
<p><a href="#idp26988128" class="para"><sup class=
"http://kerneltrap.org/mailarchive/1/message/48393/thread" target=
"_top">http://kerneltrap.org/mailarchive/1/message/48393/thread</a></p>
</div>
-</div>
-</div>
-</body>
-</html>
+
+{% endblock %}