The Freedom software design process is based on a gray box model of a software system. A gray box is characterized as all information about the system that is knowable (i.e., "visible") when the individual software modules that comprise the system are viewed as black boxes. Such information includes the identification of, and relationships among, the individual modules. Because the modules are viewed as black boxes, it also includes all module stimuli, responses external to the module, and module programmatic interface details.
At the gray box level of detail, the design methodology employed becomes relevant. Freedom recommends object-oriented development using Java for most software projects (although Freedom is not limited to Java, or object-oriented development). Object-oriented development can reduce software maintenance labor cost at the expense of less efficient utilization of machine resources. The industry shift to object-oriented development can be explained by continuing declines in computer hardware cost, which favors sacrificing relatively inexpensive machine resources to reduce the long-term labor cost of software maintenance.
In the case of an object-oriented design, each software module consists of several access programs that encapsulate hidden-information. An access program is equivalent to a Java method. Hidden information is any software information that is likely to change over time, such as data structures, host hardware, and (especially) requirements. The module external interface is the sum of the programmatic stable interfaces (i.e., unchanging calling protocols, or unchanging message communication protocols) of the access programs of the module. The external response of each access program of a module is specified using Program Design Language (PDL). The relationships among the modules include composition, inheritance, polymorphism, and the association, or "uses," relationship.
The gray box view of an object-oriented software system therefore consists of