From Fedora Project Wiki

Revision as of 18:32, 10 November 2022 by Fweimer (talk | contribs) (Add Contributing section)

Porting Fedora to Modern C

This page collects some technical details related to Changes/PortingToModernC.

Status

  • Gathering data on implicit function declarations (e.g., exit (0) called without #include <stdlib.h>).
  • Gathering data on implicit ints (e.g., const TWO = 2).
  • Preparing infrastructure for fix verification for Fedora developers.

Overall Approach

We build packages with instrumented gcc and redhat-rpm-config packages that fail the build if certain errors occur anywhere during the build. These forced failures are guaranteed to happen even if the build system ignores the exit status of a gcc command and continues regardless (for example, during configure checks). This is implemented by patching gcc in a special buildroot to log certain errors to a 1777 (sticky bit permission) directory. After the build, redhat-rpm-config checks if the directory is empty (or more precisely, only contains expected errors), and fails the build otherwise.

Cross-Distribution Collaboration

A mailing list has been set up to exchange issues and observations of wider interest: c-std-porting@lists.linux.dev (archive)

Further resources will follow as needed.

Fedora Bug Tracking

Not every build issue will have a bug in Bugzilla. But if there is no upstream with a mailing list or issue tracker to submit fixes to, it makes sense to create a bug in Bugzilla, especially for cross-distribution collaboration.

Currently, these trackers exist:

  • PortingToModernC Umbrella tracker for the tracker bugs below.
  • PortingToModernCExemptions Bugs which document that certain packages could not be switched to C99 or later language standards. Typically these packages keep building with -std=gnu89.
  • PortingToModernCHelpNeeded Bugs where help from the package maintainer is needed to address the issue(s).

Contributing To The Porting Effort

If you want to contribute to this effort, you should subscribe to the c-std-porting list mentioned above. If you create a Red Hat Bugzilla account, log in, and visit the Bugzilla tracker bugs linked above, a Add me to CC list check mark will appear on the bug pages. If you check that and click the Save Changes button, you will be notified of future bug changes, including bug dependency changes that indicate new issues. You can also subscribe to individual bugs that interest you.

At this point, it is too early to tell what level of knowledge and open-source experience is typically needed to successfully contribute to this project.