oss

When GCC adopted its own fork

9 sources 4 primary sources September 19, 2026

Loading reads and saves…
Text
Bradley M. Kuhn and David Edelsohn talking at the USENIX conference in Boston.

Bradley M. Kuhn and David Edelsohn at USENIX in Boston, June 28, 2001, after the GNU Project received USENIX’s achievement award. Edelsohn was an original EGCS steering committee member. Source: Kuhn’s photo archive.[4][9]

In April 1999, the Free Software Foundation gave responsibility for GCC to the steering committee of a project that had forked it. EGCS would supply the development process, the CVS repository, and the team responsible for future releases.[5] That handover makes an unusually revealing case in open-source governance: the parent project adopted a way of working that contributors had built elsewhere.

The question worth asking is how EGCS became credible enough to inherit that responsibility. The record contains new compiler features, but also less glamorous changes: a place to submit patches, a way to watch them land, and a public account of who could make decisions.

A fork intended to gather forks

The August 15, 1997 announcement carried an unexpected subject line: “A new project to merge the existing GCC forks.” David Henkel-Wallace described developers whose improvements had remained outside the GCC2 tree despite years of effort. His account acknowledged the FSF's emphasis on stability while arguing that divergent development streams were making cooperation increasingly difficult.[1]

Read that as the organizers' explanation of the dispute, rather than a neutral verdict on every rejected patch. Its practical proposal was clear: bring work together in a more experimental project while preserving a relationship with GCC2. Code would still be assigned to the FSF and offered to the GCC2 maintainers. The communities would overlap, with some people maintaining language front ends in both efforts.[1]

EGCS therefore began with an integration problem. Contributors already had code; they needed somewhere to combine it. A separate development tree gave them room to establish different priorities without requiring GCC2 to accept every experiment immediately.

A release makes the promise testable

EGCS 1.0 arrived on December 3, 1997. It brought together an integrated GNU Fortran compiler, C++ runtime libraries including SGI's Standard Template Library, a new instruction scheduler, and new alias analysis code. The release was based on a development snapshot of GCC 2.8.[2]

That collection made the appeal tangible. A developer could try a compiler containing work from several communities in one release. The project described broad testing of experimental features as an explicit goal.[2]

The same release history records the costs. Changes to exception-handling interfaces in libgcc created potential compatibility problems between shared C++ libraries built with EGCS 1.0 and GCC 2.8.0. EGCS 1.0.1 generated code using the new interface and supplied support routines for both old and new interfaces; the project urged shared-library distributors to upgrade.[2]

This is an important limit on the success story. A common source ancestry did not guarantee that separately evolving binaries would cooperate. The fork had to earn confidence through fixes and compatibility work as well as feature development.

Make the work visible

EGCS's public infrastructure grew alongside its releases. The project's news archive records remote access to CVS sources in January 1998. In May, it announced two mailing lists: gcc-cvs for automatic check-in notifications and egcs-patches for submissions. The stated reason for the latter was to prevent patches getting lost in the main list's traffic. An online test-results database followed in November.[3]

Those changes addressed different failures of coordination. Repository access let people obtain the evolving code. Notifications made changes observable. A dedicated submission channel helped separate proposed work from general discussion. Test results gave collaborators evidence about what that evolving code could do.

My reading is that these ordinary services were part of EGCS's governance achievement. Rules about participation become more useful when contributors can see where a change is waiting and what happened after it was accepted.

A committee with a defined purpose

On November 10, 1998, EGCS publicly formalized its steering committee. The announcement described an existing informal group drawn from different backgrounds and communities, and an intention to prevent any single individual or company from controlling the project. The committee would make major decisions and uphold the project's principles.[4]

The distinction still appears on GCC's steering page: membership belongs to individuals, and their listed employers do not hold the seats. The page describes interests such as Fortran users, embedded developers, and kernel developers as the constituencies the committee was intended to encompass.[4]

That arrangement is a design choice, not proof that influence is perfectly balanced. Personal membership alone cannot demonstrate that every contributor has equal access or that every dispute is handled well. It does, however, make a specific commitment available for scrutiny: an employer's investment is not formally the same thing as ownership of a committee seat.

What came back to GCC

Richard Stallman's April 1999 announcement made the transfer concrete. The renamed GCC Steering Committee became the collective GNU maintainer, with responsibility for accepted changes, fixes, and releases. It would appoint the release manager, then Jeff Law, to handle daily technical matters. EGCS's development process would largely continue, and its CVS archive would become GCC's.[5]

GCC 2.95, released on July 31, was the first release after reunification. Its announcement also explained the expanded name: GNU Compiler Collection, reflecting languages beyond C.[6] The institutional handover now had a downloadable result.

Contemporary reception adds a useful boundary. LWN welcomed the reunification in its April 22 development report while noting that the Pentium-focused pgcc would remain separate.[7] Reuniting GCC and EGCS did not mean every specialized compiler effort had disappeared.

The surviving commitments are explicit in GCC's mission statement, dated June 1, 2021: open mailing lists, multiple maintainers, publicly available code, and consideration of patches on technical merit.[8] That document describes the intended process; it cannot by itself establish how consistently the process works.

The EGCS episode offers a more concrete standard for judging a fork. Look for the people doing integration, the evidence produced by testing, and the authority to turn accepted changes into releases. In 1999, GCC could adopt EGCS because there was an operating development organization to adopt. The return carried working habits along with code.

Sources

  1. David Henkel-Wallace, “The initial egcs project announcement,” August 15, 1997 — organizers' account of the split and proposed collaboration.
  2. GCC project, “EGCS 1.0” — release dates, integrated features, and the 1.0.1 exception-handling compatibility repair.
  3. GCC project, “GCC news and announcements” — January, May, and November 1998 infrastructure entries.
  4. GCC project, “GCC steering committee” — original November 10, 1998 announcement and explanation of personal membership.
  5. Richard Stallman, “New maintenance team for GCC,” message dated April 15, 1999, preserved by LWN — transfer of responsibility, repository, and development process.
  6. GCC project, “GCC 2.95” — July 31, 1999 release after reunification and the GNU Compiler Collection name.
  7. LWN, “Development tools,” April 22, 1999 — contemporary independent reception in the “Gcc/egcs” section.
  8. GCC project, “GCC Development Mission Statement,” June 1, 2021 — published participation and development principles.
  9. Bradley M. Kuhn, “Pictures of Bradley M. Kuhn” — photograph with David Edelsohn at USENIX, June 28, 2001.
Previous Liquidsoap gives dead air a place in the program

Recommended In oss

Matched by subject and format