The basic idea of GNU Astronomy Utilities is for an interested astronomer to be able to easily understand the code of any of the programs or libraries, be able to modify the code if s/he feels there is an improvement and finally, to be able to add new programs or libraries for their own benefit, and the larger community if they are willing to share it. In short, we hope that at least from the software point of view, the “obscurantist faith in the expert’s special skill and in his personal knowledge and authority” can be broken, see Gnuastro manifesto: Science and its tools. With this aim in mind, Gnuastro was designed to have a very basic, simple, and easy to understand architecture for any interested inquirer.
This chapter starts with very general design choices, in particular Why C programming language? and Program design philosophy. It will then get a little more technical about the Gnuastro code and file/directory structure in Coding conventions and Program source. The TEMPLATE program discusses a minimal (and working) template to help in creating new programs or easier learning of a program’s internal structure. Some other general issues about documentation, building and debugging are then discussed. This chapter concludes with how you can learn about the development and get involved in Gnuastro project webpage, Developing mailing lists and Contributing to Gnuastro.