<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title type="text">Journal of Martin Michlmayr</title>
<subtitle type="html"><![CDATA[
Martin Michlmayr's journal
]]></subtitle>
<id>http://www.cyrius.com/journal/index.atom</id>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal" />
<link rel="self" type="text/xml" href="http://www.cyrius.com/journal/index.atom" />

<author>
<name>Martin Michlmayr</name>
<uri>http://www.cyrius.com/journal/index.atom</uri>
<email>tbm@cyrius.com</email>
</author>
<rights>Copyright 2003-2006 Martin Michlmayr</rights>
<generator uri="http://pyblosxom.sourceforge.net/" version="1.3.2 2/13/2006">
PyBlosxom http://pyblosxom.sourceforge.net/ 1.3.2 2/13/2006
</generator>

<updated>2008-05-12T21:18:01Z</updated>
<!-- icon?  logo?  -->

<entry>
<title type="html">The NSLU2 causing trouble recently...</title>
<category term="/debian/nslu2" />
<id>http://www.cyrius.com/journal/2008/05/12/#recent-trouble</id>
<updated>2008-05-12T21:18:01Z</updated>
<published>2008-05-12T21:18:01Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/debian/nslu2/recent-trouble" />
<content type="html">
<p>

We've had two serious bugs on the NSLU2 recently that both caused the
system not too boot anymore.  The <a href =
"http://bugs.debian.org/478236">first one</a> was related to
initramfs-tools.  Kevin Price reported that after upgrading to
initramfs-tools 0.92 the system would hang during boot waiting for the root
filesystem.  When I booted my NSLU2 and looked at the output, I noticed
that no root device was set.  When I mentioned this to maks, the maintainer
of the initramfs-tools package, he immediately knew what was wrong and
uploaded a fix.  On the NSLU2, the boot loader doesn't pass a root device
to the kernel so we set one in the initramfs itself.  The code that loads
this config variable is not used by many devices so nobody noticed that
this got broken in 0.92 until the package moved to testing.

</p>

<p>

The <a href = "http://bugs.debian.org/480310">second problem</a>, reported
on Saturday by Paul Collins and diagnosed today with some help from Kevin
Price is also related to the strange way the NSLU2 boots.  The NSLU2 has 6
MB available for the ramdisk but due to a <a href =
"http://bugs.debian.org/451882">bug in APEX</a> (the second stage loader
used on the NSLU2 by Debian) only 4 MB are actually used.  When you write a
ramdisk that is larger than 4 MB but smaller than 6 MB, flash-kernel will
happily write the full image, but APEX will only tell the kernel about the
first 4 MB.  As it turns out, everything works fine on arm with 2.6.25, but
on armel some additional SCSI modules are enabled that result in the
ramdisk becoming too large.  The short term solution is to disable these
modules, but really APEX should finally be fixed (patches have been
available for quite a while thanks to Gordon Farquharson).  Fortunately
2.6.25 hasn't moved to testing yet and this problem only occurs on armel,
so few people were impacted.

</p>

<p>

The nice thing about the NSLU2 is that you can write a new flash image via
the network, so you can flash a good image in case your machine no longer
boots.  Nevertheless, we have to make sure such serious bugs don't occur in
the future or that they are at least caught very early.  Special thanks go
to testers like Kevin Price.

</p>

<!-- time: 2008-05-12 21:18:01 +0200 -->

</content>
</entry>

<entry>
<title type="html">QNAP TS-109/TS-209 and TS-409 experimental developer release</title>
<category term="/debian/orion/qnap" />
<id>http://www.cyrius.com/journal/2008/05/12/#exp-dev-release</id>
<updated>2008-05-12T20:32:40Z</updated>
<published>2008-05-12T20:32:40Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/debian/orion/qnap/exp-dev-release" />
<content type="html">
<p>

Yesterday I completed the first successful installation of Debian on a
QNAP TS-209 using a custom debian-installer image with 2.6.25 from
unstable.  I made the installer image for QNAP TS-109 and TS-209
available as an <a href =
"http://lists.debian.org/debian-arm/2008/05/msg00035.html">experimental
developer release</a> and today I also uploaded images for the TS-409.
More on my plans to support the QNAP TS-109/TS-209 and TS-409 in the
upcoming release of Debian (starting with beta3 of debian-installer)
soon.

</p>

<!-- time: 2008-05-12 20:32:40 +0200 -->

</content>
</entry>

<entry>
<title type="html">GCC 4.3 porting guide</title>
<category term="/gcc" />
<id>http://www.cyrius.com/journal/2008/01/23/#gcc-4.3-porting-guide</id>
<updated>2008-01-23T20:48:40Z</updated>
<published>2008-01-23T20:48:40Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/gcc/gcc-4.3-porting-guide" />
<content type="html">
<p>

Benjamin Kosnik of Red Hat put together a guide on the GCC web site with
information on porting applications to the upcoming GCC 4.3 release.  He
integrated some information from my blog and added a number of new items.
If you run into any issues while moving to GCC 4.3, I suggest you <a href =
"http://gcc.gnu.org/gcc-4.3/porting_to.html">consult this guide</a>.

</p>

<!-- time: 2008-01-23 20:48:40 +0100 -->


</content>
</entry>

<entry>
<title type="html">Installer finally working again on Linksys NSLU2</title>
<category term="/debian/nslu2" />
<id>http://www.cyrius.com/journal/2007/12/27/#etchr2-update</id>
<updated>2007-12-27T20:33:55Z</updated>
<published>2007-12-27T20:33:55Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/debian/nslu2/etchr2-update" />
<content type="html">
<p>

The release release team of Debian released 4.0r2 today which fixes the bug
that kept the installer from working on ARM based systems, such as the
Linksys NSLU2.  This means that installations are finally possible again.
I've updated my <a href =
"http://www.cyrius.com/debian/nslu2/install.html">installation instructions
accordingly</a>.

</p>

<p>

I've also updated the tar ball used for the manual installation to 4.0r2
but I doubt many people are interested in this method now that the
installer is working again.

</p>

<!-- time: 2007-12-27 20:33:55 +0100 -->

</content>
</entry>

<entry>
<title type="html">Joining HP</title>
<category term="/hp" />
<id>http://www.cyrius.com/journal/2007/12/24/#joining-hp</id>
<updated>2007-12-24T15:55:59Z</updated>
<published>2007-12-24T15:55:59Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/hp/joining-hp" />
<content type="html">
<p>

I joined HP's Open Source and Linux Organization (OSLO) at the beginning
of the month as an Open Source Community Expert.  I spent the last three
weeks in Ft.&nbsp;Collins for some training and to get to know the team,
but normally I'll be working from home in Europe.  The main focus of my
work will be governance issues related to the deployment of FOSS in
enterprise environments.  However, I've already started to get involved
in a number of other areas I'm interested in, such as community relations.
I'm pretty excited about my new position because it is a good fit for my
skills and interests.

</p>

<!-- time: 2007-12-24 15:55:59 +0100 -->

</content>
</entry>

<entry>
<title type="html">GCC 4.3 related build problems: duplicate function parameters</title>
<category term="/gcc" />
<id>http://www.cyrius.com/journal/2007/12/07/#gcc-4.3-multiple-params</id>
<updated>2007-12-07T21:04:40Z</updated>
<published>2007-12-07T21:04:40Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/gcc/gcc-4.3-multiple-params" />
<content type="html">
<p>

GCC 4.3 now prints an error message when C++ code contains duplicate
function parameter names in function prototypes.  You'd think that's a
pretty obvious problem, but we still have about 15 packages in the archive
that contain such code.

</p>

<p>

Anyway, for code like this:

</p>

<pre>
class foo {
    foo(int w, int w);
};
</pre>

<p>

GCC will as of 4.3 show the following error message:

</p>

<pre>
t.cc:2: error: multiple parameters named 'w'
</pre>

<!-- time: 2007-12-07 21:04:40 -0700 -->

</content>
</entry>

<entry>
<title type="html">N2100 network troubles due to r8169 bug</title>
<category term="/debian/iop/n2100" />
<id>http://www.cyrius.com/journal/2007/11/30/#r8169-alignment-fix</id>
<updated>2007-11-30T22:12:59Z</updated>
<published>2007-11-30T22:12:59Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/debian/iop/n2100/r8169-alignment-fix" />
<content type="html">
<p>

Daniel Smolik <a href = "http://bugs.debian.org/452069">reported problems
with NFS on a Thecus N2100</a> a few days ago.  I confirmed the bug with
2.6.18 and 2.6.22 but found that the problem didn't occur with 2.6.23.  I
started a git bisect and a few hours later located a fix that Francois
Romieu, the maintainer of the r8169 driver, had put in.  Apparently the
driver had some confusion regarding hardware and IP header alignment.  The
good news is that the patch is very small and can easily be backported to
our 2.6.18 kernel in stable.  Also, packages of 2.6.23 were uploaded today
and should be in the archive soon.

</p>

<!-- time: 2007-11-30 22:12:59 +0100 -->

</content>
</entry>

<entry>
<title type="html">Tips on reducing memory and running Linux on a flash device</title>
<category term="/debian/nslu2" />
<id>http://www.cyrius.com/journal/2007/11/11/#tips-ram-flash</id>
<updated>2007-11-11T20:54:04Z</updated>
<published>2007-11-11T20:54:04Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/debian/nslu2/tips-ram-flash" />
<content type="html">
<p>

David Härdeman has contributed two really valuable guides to my <a href =
"http://www.cyrius.com/debian/nslu2/index.html">Debian on NSLU2 site</a>
that will be of great interest to many NSLU2 users:

</p>

<ul>

<li>The first guide is for people running Linux on a flash device, such as
a USB flash stick.  Since flash only supports a limited number of writes,
it is important to reduce the wear and tear on the underlying flash device.
David's guide gives <a href =
"http://www.cyrius.com/debian/nslu2/linux-on-flash.html">some practical
advice</a> of how to achieve this.</li>

<li>The second guide gives a few tips and tricks that can be used to <a
href = "http://www.cyrius.com/debian/nslu2/reducing-memory.html">reduce the
amount of RAM</a> a system uses.  This is particularly interesting to NSLU2
users since 32&nbsp;MB of RAM is not a lot.</li>

</ul>

<p>

These guides mention Debian but most of the advice applies to other NSLU2
firmware flavours and to Linux in general.

</p>

<!-- time: 2007-11-11 20:54:04 +0100 -->

</content>
</entry>

<entry>
<title type="html">NSLU2 tar ball for Debian 4.0r1</title>
<category term="/debian/nslu2" />
<id>http://www.cyrius.com/journal/2007/09/28/#etchr1-update</id>
<updated>2007-09-28T13:47:14Z</updated>
<published>2007-09-28T13:47:14Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/debian/nslu2/etchr1-update" />
<content type="html">
<p>

I updated the tar ball for the <a href =
"http://www.cyrius.com/debian/nslu2/unpack.html">manual Debian/NSLU2
installation</a> to Debian 4.0r1 (including the new 2.6.18-5 kernel)
today.  The proprietary NPE microcode from Intel is now included in
the tar ball since the code no longer has a click-through license.

</p>


<!-- time: 2007-09-28 13:47:14 +0200 -->

</content>
</entry>

<entry>
<title type="html">Dr Michlmayr</title>
<category term="/uni" />
<id>http://www.cyrius.com/journal/2007/07/21/#phd</id>
<updated>2007-07-21T23:53:49Z</updated>
<published>2007-07-21T23:53:49Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/uni/phd" />
<content type="html">
<p>

<img src="http://www.cyrius.com/images/phd_graduation.jpg"
 alt="Martin at his PhD graduation" class = "right" width="225" height="300" />

Having passed all requirements for the Doctor of Philosophy, I had
my graduation today.

</p>

<!-- time: 2007-07-21 23:53:49 +0100 -->

</content>
</entry>

<entry>
<title type="html">GCC 4.3 related build problems: pedantic preprocessor warnings in C++</title>
<category term="/gcc" />
<id>http://www.cyrius.com/journal/2007/05/11/#gcc-4.3-pedwarn</id>
<updated>2007-05-11T14:37:55Z</updated>
<published>2007-05-11T14:37:55Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/gcc/gcc-4.3-pedwarn" />
<content type="html">
<p>

<b>Update:</b> This change has been reverted from 4.3 again and won't be in
the final release of 4.3.

</p>

<p>

GCC 4.3 <a href =
"http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24924">changed</a> pedantic
preprocessor warnings in C++ code into errors, in line with the
C++ front-end.  Because of this change, preprocessor warnings are now
errors.

</p>

<p>

This change has caused at least the twofollowing errors which are all
fairly common:

</p>

<h3>error: "xxx" redefined</h3>

<p>

It's not allowed to #define something twice, as in this example:

</p>

<pre>
#define TEST "foo"
#define TEST "bar"
</pre>

<p>

This code will lead to the following error:

</p>

<pre>
test2.cc:2:1: error: "TEST" redefined
test2.cc:1:1: error: this is the location of the previous definition
</pre>

<p>

Most typically, this occurs because something is defined in a header that
is included and then redefined in the current source file.  It can also
happen when a #define is put in the code but also on the command line, e.g.
via <tt>-DTEST="bar"</tt>.  This will lead to:

</p>

<pre>
test2.cc:1:1: error: "TEST" redefined
&lt;command line&gt;:1:1: error: this is the location of the previous definition
</pre>

<p>

The correct solution is to avoid redefinitions directly or to use #ifndef
to make sure that something has not been defined already.

</p>

<h3>extra tokens at end of #endif directive</h3>

<p>

While an <tt>#ifdef</tt> obviously needs a second parameter, it's not
allowed to give one to <tt>#else</tt> and <tt>#endif</tt>.  Unfortunately,
this is commonly done as a reminder for what is being tested for:

</p>

<pre>
#ifdef TEST
#endif TEST
</pre>

<p>

This code will lead to the following error:

</p>

<pre>
test3.cc:2:8: error: extra tokens at end of #endif directive
</pre>

<!-- time: 2007-05-11 14:37:55 +0200 -->

</content>
</entry>

<entry>
<title type="html">GCC 4.3 related build problems: missing #include</title>
<category term="/gcc" />
<id>http://www.cyrius.com/journal/2007/05/10/#gcc-4.3-include</id>
<updated>2007-05-10T15:56:10Z</updated>
<published>2007-05-10T15:56:10Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/gcc/gcc-4.3-include" />
<content type="html">
<p>

In GCC 4.3 the C++ header dependencies have been <a href =
"http://gcc.gnu.org/PR28080">cleaned up</a>.  In the past, compilation
would often be quite slow because including a simple header would
indirectly include a lot of other headers, even if they were not needed to
compile the current code.  Many headers have now been cleaned up with the
result that compilation is quicker.  The downside is that programmers
cannot rely on indirect inclusion of headers they may need anymore.
Instead, everything that is needed has to be directly referenced with an
#include.

</p>

<p>

Typical errors look like these:

</p>

<pre>
error: 'find' is not a member of 'std'
error: 'exit' was not declared in this scope
</pre>

<p>

Below is a table showing which header needs to be included for a number of
common functions:

</p>

<table>
<tr><td><b>Functions and defines</b></td><td><b>Header</b></td></tr>
<tr><td>find, for_each, sort</td><td>algorithm</td></tr>
<tr><td>isalnum, toupper</td><td>cctype</td></tr>
<tr><td>INT_MIN, RAND_MAX</td><td>climits</td></tr>
<tr><td>printf</td><td>cstdio</td></tr>
<tr><td>atoi, free, rand</td><td>cstdlib</td></tr>
<tr><td>EXIT_FAILURE</td><td>cstdlib</td></tr>
<tr><td>strcmp, memcpy</td><td>cstring</td></tr>
<tr><td>auto_ptr</td><td>memory</td></tr>
<tr><td>fd_set, mode_t</td><td>sys/types.h</td></tr>
<tr><td>typeid</td><td>typeinfo</td></tr>
</table>

<!-- time: 2007-05-10 15:56:10 +0200 -->

</content>
</entry>

<entry>
<title type="html">GCC 4.3: common build failures</title>
<category term="/gcc" />
<id>http://www.cyrius.com/journal/2007/05/10/#gcc-4.3-common-problems</id>
<updated>2007-05-10T14:48:01Z</updated>
<published>2007-05-10T14:48:01Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/gcc/gcc-4.3-common-problems" />
<content type="html">
<p>

Even though GCC 4.2 has seen many delays and still hasn't been released
(although it's finally getting close), a lot of development has already
been done on trunk for the release of GCC 4.3.  I started testing 4.3 in
March and in addition to finding and reporting compiler issues I have <a
href =
"http://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-gcc-4.3;users=tbm%40cyrius.com">filed
bugs</a> on packages that fail to build with GCC 4.3.  The idea is to give
people an advance warning and to be ready for GCC 4.3 when it will be
released.

</p>

<p>

We have almost 500 bugs related to GCC 4.3 already, mostly due to a clean-up
of C++ headers in GCC that has exposed sloppy programming in many programs.
Fortunately, these bugs are easy to fix.  As I'm finding common mistakes in
packages, I will document these problems and way to make sure a program is
ready for GCC 4.3.

</p>

<h3>Common problems</h3>

<ul>

<li><a href =
"http://www.cyrius.com/journal/gcc/gcc-4.3-include.html">Missing
#include</a> directives</li>

<li><a href =
"http://www.cyrius.com/journal/gcc/gcc-4.3-multiple-params.html">
Duplicate parameters in function prototypes</a></li>

</ul>

<p>

<b>Update:</b> there is now a <a href =
"http://gcc.gnu.org/gcc-4.3/porting_to.html">GCC 4.3 porting guide</a> that
describes the most common problems people will face when moving to GCC 4.3.

</p>

<!-- time: 2007-05-10 14:48:01 +0200 -->

</content>
</entry>

<entry>
<title type="html">Links</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/04/28/#links</id>
<updated>2007-04-28T11:30:29Z</updated>
<published>2007-04-28T11:30:29Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/links" />
<content type="html">
<p>

Here are a number of links to various postings and other information
related to my research about release management in free software projects:

</p>

<ul>

<li>Bruce Byfield <a href = "http://www.linux.com/articles/114247">wrote an
article</a> about my research for Linux.com.</li>

<li>I recently gave a presentation about my research at Google as part of
their Tech Talks series.  A <a href =
"http://video.google.com/videoplay?docid=-5503858974016723264">video of
this talk</a> is now available.</li>

<li>MORITA Hajime kindly <a href =
"http://www.hyuki.com/yukiwiki/wiki.cgi?QualityImprovementInFreeSoftware">translated
my blog postings</a> about my research to Japanese.</li>

<li>Matt Asay briefly discussed my work in his blog and relates it to <a
href =
"http://weblog.infoworld.com/openresource/archives/2007/03/timebased_relea.html">commercial
and proprietary software development</a>.  Roberto Galoppini relates my
findings to his work and concludes that <a href =
"http://robertogaloppini.net/2007/04/02/open-source-production-time-based-release-management/">hierarchy
is a must</a>.  Murray Cumming summarizes what he believes are the <a href
=
"http://www.murrayc.com/blog/permalink/2007/03/19/martin-michlmayrs-research-on-time-based-releases/">key
findings of my research</a>.

</li>

</ul>

<!-- time: 2007-04-28 11:30:29 +0200 -->

</content>
</entry>

<entry>
<title type="html">X.org</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/03/17/#xorg</id>
<updated>2007-03-17T11:49:18Z</updated>
<published>2007-03-17T11:49:18Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/xorg" />
<content type="html">
<p>

In previous times, most Linux distributions and other free software
projects relied on the XFree86 system.  Over the years, the structures
within the XFree86 project became were rigid and the project failed to
innovate and keep up with the pace of the wider free software community.
When XFree86 changed its license in February 2004, the active community and
the majority of vendors quickly moved to X.org.  X.org is a very active
community and they decided to break up the monolithic code base and to
adopt a more modern build system.  As of X.org 7.0, the project moved to
the modular system in which components are developed and released
separately.  Effectively, the project introduced a development mechanism
which features two release mechanisms: individual components can be
released as needed and there is an overall release of X.org in which all
stable components are put together.  These roll-up releases take place
every six months.

</p>

<table cellspacing="5">
<tr><td><b>Version</b></td><td align = "center"><b>Date</b></td><td><b>Months</b></td></tr>
<tr><td>7.0</td><td>2005-12-21</td><td></td></tr>
<tr><td>7.1</td><td>2006-05-22</td><td align = "right">5</td></tr>
<tr><td>7.2</td><td>2007-02-15</td><td align = "right">9</td></tr>
</table>

<h3>Past problems</h3>

<ul>

<li>XFree86 made only infrequent releases every few years, had no plan, and
the project's structures were very rigid.</li>

<li>The code base was huge and monolithic.  It had an archaic build system
that few new developers were comfortable with.  This made it hard for new
contributors to get involved and was bad for testing.</li>

</ul>

<h3>Solutions</h3>

<ul>

<li>X.org moved from a monolithic to a modular system.  This made it easier
to perform testing and it made it possible to give contributors write
access to specific components.</li>

<li>The move to the modular system allowed them the introduction of two
release mechanisms: individual components can make releases on an ongoing
basis and roll-up releases take place every six months.</li>

<li>The roll-up releases have a fall back mechanism in case a specific
component is not ready for release: the former release of this component
can be incorporated.</li>

</ul>

<h3>Outstanding problems</h3>

<ul>

<li>The project needs to work the interface between the server and drivers,
so updates to hardware drivers can be released more often than other
components.</li>

</ul>

<!-- time: 2007-03-17 11:49:18 +0100 -->

</content>
</entry>

<entry>
<title type="html">Plone</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/03/16/#plone</id>
<updated>2007-03-16T19:52:56Z</updated>
<published>2007-03-16T19:52:56Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/plone" />
<content type="html">
<p>

Plone is a content management system that is built on the powerful Zope
application server.  The project experienced many delays with its 2.1
release.  This made it difficult for Plone consultants to choose whether to
use the old release or wait for the new one, and users faced many upgrade
issues when 2.1 was finally released and had many changes.  Partly to
address these problems and partly in order to sync their releases with
Zope, they decided in 2005 to move to a six month time based release cycle.

</p>

<table cellspacing="5">
<tr><td><b>Version</b></td><td align = "center"><b>Date</b></td><td><b>Months</b></td></tr>
<tr><td>1.0</td><td>2003-02-06</td><td></td></tr>
<tr><td>2.0</td><td>2004-03-23</td><td align = "right">13</td></tr>
<tr><td>2.1</td><td>2005-09-06</td><td align = "right">17</td></tr>
<tr><td>2.5</td><td>2006-06-16</td><td align = "right">9</td></tr>
</table>

<h3>Past problems</h3>

<ul>

<li>Releases, in particular version 2.1, took a long time to get out.</li>

<li>Releases had many changes and caused some migration problems.</li>

<li>Many Plone developers work as consultants building web sites.  Because
of the unpredictability of Plone, it was difficult for them to decide which
version to use for future projects.</li>

</ul>

<h3>Solutions</h3>

<ul>

<li>Plone moved to a time based release, partly because the Zope framework
on which it builds has done so.  This allows them to make use of new Zope
features in their software.</li>

<li>Time based releases allowed the project to implement more structure.
For example, new features have to be proposed as a Plone Improvement
Proposals (PLIP) which the framework team reviews.</li>

<li>Deadlines have motivated developers to get their features done within a
certain time frame.</li>

<li>Plone consultants can decide in advance which version of Plone to use
for future commercial projects.</li>

</ul>

<h3>Outstanding problems</h3>

<ul>

<li>As the project has moved to time based releases only recently, they
still need to show whether they can consistently release on time.</li>

</ul>

<!-- time: 2007-03-16 19:52:56 +0100 -->

</content>
</entry>

<entry>
<title type="html">OpenOffice.org</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/03/16/#openoffice</id>
<updated>2007-03-16T08:44:50Z</updated>
<published>2007-03-16T08:44:50Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/openoffice" />
<content type="html">
<p>

OpenOffice.org is an office suite offering various integrated applications,
such as a word processor and a spreadsheet.  Originally developed by
StarDivision, StarOffice was acquired by Sun who released it as free
software as OpenOffice.org in July 2000.  While Sun still maintains fairly
tight control over the development of OpenOffice.org, many other vendors,
in particular Novell, are important contributors to the project.  The
project had a fairly long release cycle of about 18 months to accommodate
StarOffice, the commercial product from Sun.  There were many delays,
making it hard for vendors to decide which version to include.
OpenOffice.org moved to a three month release cycle after their
long-delayed 2.0 release, published 26 months after 1.1.  The new release
cycle is viewed as a positive development by contributors who get their
features and fixes out to users faster.  Nevertheless, at the end of 2006 a
discussion took place in which a six month interval was suggested.
Apparently users didn't want new features every three months and the short
interval between releases put a lot of pressure on the QA team.

</p>

<table cellspacing="5">
<tr><td><b>Version</b></td><td align = "center"><b>Date</b></td><td><b>Months</b></td></tr>
<tr><td>1.0</td><td>2002-05-01</td><td></td></tr>
<tr><td>1.1</td><td>2003-09-02</td><td align = "right">16</td></tr>
<tr><td>2.0</td><td>2005-10-20</td><td align = "right">26</td></tr>
<tr><td>2.0.1</td><td>2005-12-21</td><td align = "right">2</td></tr>
<tr><td>2.0.2</td><td>2006-03-08</td><td align = "right">3</td></tr>
<tr><td>2.0.3</td><td>2006-06-29</td><td align = "right">4</td></tr>
<tr><td>2.0.4</td><td>2006-10-13</td><td align = "right">3</td></tr>
<tr><td>2.1.0</td><td>2006-12-12</td><td align = "right">2</td></tr>
</table>

<h3>Past problems</h3>

<ul>

<li>The long release cycle of 18 months, bound to the commercial StarOffice
product, meant that little testing occurred for a long time because
developers believed the release was far away.</li>

<li>Many changes accumulated during the long development phase, making
testing towards the end very difficult, and leading to a `big bang'
release.</li>

<li>Features were put in very late, even during the beta cycle, because of
the perceived 18 month delay to the next release.</li>

<li>There was very little code review.  The QA team only tested the
program.</li>

<li>Vendors shipped unreleased versions because the significant delays
during the 2.0 cycle made planning impossible.</li>

</ul>

<h3>Solutions</h3>

<ul>

<li>After the 2.0 release, the project moved to a 3 month release interval.
This model promises a tight feedback loop with users.</li>

<li>Because planning is now possible, collaboration between vendors on the
same code base is far easier.</li>

<li>The faster release cycle and more collaboration among vendors has
promoted code review.</li>

<li>Motivation in the project has increased because people see their
contributions getting out to users within a reasonable time.</li>

<li>The release process has become more transparent, allowing voluntary
contributors to take a more active part in release preparations.</li>

</ul>

<h3>Outstanding problems</h3>

<ul>

<li>There are <a href =
"http://www.mail-archive.com/releases@openoffice.org/msg01964.html">discussions</a>
about changing the release interval to six months.  There is some evidence
that some users do not want new features every three months and that the
aggressive release cycle of three months puts a lot of pressure on the QA
team.</li>

</ul>

<!-- time: 2007-03-16 08:44:50 +0100 -->

</content>
</entry>

<entry>
<title type="html">Linux kernel</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/03/15/#linux</id>
<updated>2007-03-15T16:31:49Z</updated>
<published>2007-03-15T16:31:49Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/linux" />
<content type="html">
<p>

The Linux kernel project has seen major changes to its development and
release strategy in the last few years, in particular since the first
stable release of the 2.6 series in December 2003.  This series was opened
almost three years after the 2.4 series in January 2001, which many felt
was too long.  A problem that resulted from the long interval between major
releases was that vendors had to back- and forward-port a lot of patches.
Nowadays, major development happens on the 2.6 series and new releases are
published every three to four months.  This new development model has faced
much controversy.  While some people, in particular developers of the
kernel, claim that the new model is working very well, some users are
worried about the number of significant changes and lack of stability in
the kernel.  Andrew Morton, a lead developer, has expressed several times
that he believes the kernel is getting buggier.

</p>

<table cellspacing="5">
<tr><td><b>Version</b></td><td align = "center"><b>Date</b></td><td><b>Months</b></td></tr>
<tr><td>1.0</td><td>1994-03-14</td><td></td></tr>
<tr><td>1.2</td><td>1995-03-07</td><td align = "right">12</td></tr>
<tr><td>2.0</td><td>1996-06-09</td><td align = "right">15</td></tr>
<tr><td>2.2</td><td>1999-01-25</td><td align = "right">31</td></tr>
<tr><td>2.4</td><td>2001-01-04</td><td align = "right">23</td></tr>
<tr><td>2.6</td><td>2003-12-17</td><td align = "right">35</td></tr>
</table>

<h3>Past problems</h3>

<ul>

<li>Because of the long release cycle, many changes accumulated.  It was
hard to get the development stable and there were few testers.</li>

<li>Features got out very slowly because of the long release cycle.</li>

<li>Hardware support and crucial features had to be backported to the
latest stable kernel.</li>

<li>Vendors backported many features to their own releases.  The code base
from different vendors diverged a lot from each other and from the official
development version.</li>

</ul>

<h3>Solutions</h3>

<ul>

<li>New versions are now released every two or three months.  There is a
two week merge window after each release during which new features are
accepted; subsequently, the focus is on stabilization.</li>

<li>There is now a steady flow of code into production and many people get
to test the new code.</li>

<li>Features get out more quickly.</li>

<li>Vendors can directly work with current releases and get their changes
into official versions easily.</li>

</ul>

<h3>Outstanding problems</h3>

<ul>

<li>There is no long-term stable version based on the 2.6 kernel.  This is
being addressed with Adrian Bunk's 2.6.16 long-term maintenance tree but
whether it will have a big impact remains to be seen.</li>

<li>Regressions between versions are introduced more frequently.  Better
control and tracking of regressions are needed.</li>

<li>The Bugzilla bug tracker needs to be integrated better into the
development process and it would be helpful to have a QA person.  In
January 2007, Google announced that they're looking for a kernel QA person
who'd work together with Andrew Morton.</li>

</ul>

<!-- time: 2007-03-15 16:31:49 +0100 -->

</content>
</entry>

<entry>
<title type="html">GNOME</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/03/15/#gnome</id>
<updated>2007-03-15T08:21:36Z</updated>
<published>2007-03-15T08:21:36Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/gnome" />
<content type="html">
<p>

GNOME provides a complete desktop environment that is easy to use.  The
project experienced major problems, such as delays, during its 1.x series
and in particular during the preparation of its 2.0 release.  GNOME
introduced time based releases after its 2.0 release and has significantly
improved release management.  The project has published time based releases
every six months for a number of years now and is considered as the
reference model for a good implementation of time based release management.
They have shown that it's possible to set and meet deadlines in volunteer
projects and to release on time.

</p>

<table cellspacing="5">
<tr><td><b>Version</b></td><td align = "center"><b>Date</b></td><td><b>Months</b></td></tr>
<tr><td>1.0</td><td>1999-03-03</td><td></td></tr>
<tr><td>1.2</td><td>2000-05-25</td><td align = "right">15</td></tr>
<tr><td>1.4</td><td>2001-04-02</td><td align = "right">10</td></tr>
<tr><td>2.0</td><td>2002-06-27</td><td align = "right">15</td></tr>
<tr><td>2.2</td><td>2003-02-06</td><td align = "right">7</td></tr>
<tr><td>2.4</td><td>2003-09-11</td><td align = "right">7</td></tr>
<tr><td>2.6</td><td>2004-03-31</td><td align = "right">7</td></tr>
<tr><td>2.8</td><td>2004-09-15</td><td align = "right">6</td></tr>
<tr><td>2.10</td><td>2005-03-09</td><td align = "right">6</td></tr>
<tr><td>2.12</td><td>2005-09-07</td><td align = "right">6</td></tr>
<tr><td>2.14</td><td>2006-03-15</td><td align = "right">6</td></tr>
<tr><td>2.16</td><td>2006-09-06</td><td align = "right">6</td></tr>
<tr><td>2.18</td><td>2007-03-14</td><td align = "right">6</td></tr>
</table>

<h3>Past problems</h3>

<ul>

<li>The main goal of version 2.0 was to change internal interfaces but
after more than a year of work the project felt they had to deliver more
user-visible changes, therefore leading to delays.</li>

<li>Developers were disappointed with delays and that their work was not
available to users.</li>

<li>It was not clear what was going on.  Developers constantly had to ask
about the release status.</li>

<li>Freezes were announced and people worked towards them but then they
were delayed.  Freezes also often came unexpectedly.</li>

<li>Vendors had deadlines but the GNOME schedule was unpredictable.
Vendors did not know whether they should aim for the next version or focus
on the previous version and backport fixes.</li>

<li>Vendors had to backport many changes to a version that the GNOME
project considered as old.</li>

</ul>

<h3>Solutions</h3>

<ul>

<li>The project introduced a rigorous schedule promising a release every
six months.</li>

<li>There was a core team so few people had to agree to the introduction of
a schedule.</li>

<li>GNOME introduced policies to keep the development tree fairly
stable.</li>

<li>The project introduced the idea of reverting: if a feature was not
ready on a certain cut-off date, it would be taken out again.</li>

<li>The project gained credibility because releases were actually performed
on time.</li>

<li>The schedule allowed vendors better planning, and hence vendors could
implement their features on the main development tree.</li>

</ul>

<h3>Outstanding problems</h3>

<ul>

<li>The six month schedule has been successful in the delivery of
incremental updates.  There are some concerns whether this release cycle
makes the project less innovative and ambitious regarding major changes
that would lead to GNOME&nbsp;3.0.</li>

</ul>

<!-- time: 2007-03-15 08:21:36 +0100 -->

</content>
</entry>

<entry>
<title type="html">GCC</title>
<category term="/phd" />
<id>http://www.cyrius.com/journal/2007/03/14/#gcc</id>
<updated>2007-03-14T15:41:55Z</updated>
<published>2007-03-14T15:41:55Z</published>
<link rel="alternate" type="text/html" href="http://www.cyrius.com/journal/phd/gcc" />
<content type="html">
<p>

The GNU Compiler Collection (GCC) is a compiler suite which supports a
number of programming languages, such as C and C++.  It is a very important
development tool and is the standard compiler among free software projects.
GCC was quite stagnant in the middle of the 1990s until the EGCS project
formed.  EGCS took over development of the official GCC in October 1998 and
instituted rigorous processes, such as high levels of peer review, and
created a steering committee which has the power to appoint maintainers and
make important decisions.  In theory, the project follows a time based
release with an interval of six months.  In practice, the project has
released only one new version every year in recent times.

</p>

<table cellspacing="5">
<tr><td><b>Version</b></td><td align = "center"><b>Date</b></td><td><b>Months</b></td></tr>
<tr><td>3.0</td><td>2001-06-18</td><td></td></tr>
<tr><td>3.1</td><td>2002-05-15</td><td align = "right">11</td></tr>
<tr><td>3.2</td><td>2002-08-14</td><td align = "right">3</td></tr>
<tr><td>3.3</td><td>2003-05-13</td><td align = "right">9</td></tr>
<tr><td>3.4.0</td><td>2004-04-18</td><td align = "right">11</td></tr>
<tr><td>4.0.0</td><td>2005-04-20</td><td align = "right">12</td></tr>
<tr><td>4.1.0</td><td>2006-02-28</td><td align = "right">10</td></tr>
</table>

<h3>Past problems</h3>

<ul>

<li>The GCC project suffered from a closed development style in the past:
few people could make code changes and the mailing list was by invitation
only.</li>

<li>There was a long time between releases and development snapshots, which
contained bug fixes and features, were not available to the public.</li>

<li>When development opened and picked up, significant code changes were
often made which required a long stabilization phase.</li>

</ul>

<h3>Solutions</h3>

<ul>

<li>The project moved to a more open development style and established a
steering committee which has the power to appoint new maintainers and make
important decisions.</li>

<li>The development process was divided into <a href =
"http://gcc.gnu.org/develop.html">three stages</a> in order to coordinate
code submissions and keep the development tree reasonable stable.  Major
changes that developers wish to make during stage 1 and stage 2 have to be
<a href = "http://gcc.gnu.org/wiki/GCC_4.3_Release_Planning">proposed on
the project's wiki</a>.  Proposals are reviewed by the release manager who
also assign a sequence to proposed projects which says when they can be
applied to the development tree.</li>

<li>All patches are peer reviewed on the development mailing list and need
approval before they can be applied.  The steering committee appoints
maintainers who can approve patches that touch particular areas.  There are
maintainers for the C front-end, various port maintainers, and maintainers
for other areas.</li>

<li>Each development stage lasts two months, theoretically yielding a
release every six months.  A regular release cycle ensures that it is not
the end of the world if a feature does not make it into the following
release.</li>

</ul>

<h3>Outstanding problems</h3>

<ul>

<li>The release manager is busy and has not pushed the release forwards as
much as would be possible.</li>

<li>The branch criteria may need revision to make it easier to create a
branch which leads to the next stable version.  At the moment, the branch
criteria is to have 100 or less regressions on the development tree.
However, this number may include regressions that are also present in
previous releases, which makes it fairly hard to reach this criteria.</li>

</ul>

<!-- time: 2007-03-14 15:41:55 +0100 -->

</content>
</entry>
</feed>
