The basic design decisions outlined so far determine much of the implementation, but there are still many details that must be considered. Not least of these is the choice of programming language. Given that the program should run2.7 on Unix-type systems, the clear choice was C. However, to provide flexibility in design (see Section 2.4.3) C++ was used, and should be available on most platforms. The nature of the final executable also had to be decided -- should it, for example, run from inetd, or be a simple executable? For greatest portability it was designed as normal executable that sits in an infinite loop until it is killed. Finally, the functions supported and protocol used to communicate them between client and server had to be decided. These are detailed in Appendix A.