The C Charter outlines fifteen basic principles intended to guide the committee when considering changes to the standard. A significant number of recent proposals for changes have been at odds with two of those principles: to codify existing practice, and to avoid invention. This paper discusses the historical foundations of the principles, their value, and some of the problems that have stemmed from disregarding them. It concludes by proposing concrete steps for bringing future committee practice into harmony with the principles.
In the development of the original C standard (C89) the committee was guided by a small set of general, high-level goals. Their focus was primarily on facilitating portability of existing C programs to known or future implementations without sacrificing the expressiveness of the language, compromising the efficiency of implementations, or invalidating important extensions to the common subset. After C89 was ratified, as the committee started work on a revision of the standard, the goals were outlined in the form of specific principles in [The C99 Charter]. As the committee learned from its experience with the successes and failures of each subsequent revision of C, the process it followed to develop it, and important developments in the industry, it updated the charter with additional principles. An important goal of the charter has been to establish an agreed-upon set of acceptance criteria for submitters of change proposals to adhere to. They let the committee evaluate proposals based on objective criteria, and reduced the time spent in protracted and often emotionally charged debates, and lower the risk of failing to judge all proposals consistently.
As the committee was starting to work on the first revision of C, one of the first principles added in 1994 to the original six was the goal of codifying existing practice to fix bugs or limitations. The full description of the principle reads: