GCC

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.

Version Date Months
3.0 2001-06-18
3.1 2002-05-15 11
3.2 2002-08-14 3
3.3 2003-05-13 9
3.4.0 2004-04-18 11
4.0.0 2005-04-20 12
4.1.0 2006-02-28 10

Past problems

  • 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.
  • There was a long time between releases and development snapshots, which contained bug fixes and features, were not available to the public.
  • When development opened and picked up, significant code changes were often made which required a long stabilization phase.

Solutions

  • 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.
  • The development process was divided into three stages 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 proposed on the project's wiki. 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.
  • 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.
  • 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.

Outstanding problems

  • The release manager is busy and has not pushed the release forwards as much as would be possible.
  • 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.