This article is from the Apple II GNO FAQ, by Devin Reade with numerous contributions by others.
A#11.12: There are a few reasons for this. The first one is that when the libraries (which are mostly written in C) are compiled, aggressive optimizations are not currently used. This is because certain optimizations in ORCA/C are known to be broken. This, combined with the fact that we are missing a lot of automated test suites for the GNO (non-ORCA/C) additions to the libraries, indicated that it would be best to ship the libraries without much in the way of optimizations. The second reason is probably more significant. When Jawaid provided a libc and ORCALib for GNO v2.0.4, he made significant changes to the stdio portion of ORCALib so that it would work with pipes and sockets. Unfortunately, for whatever reason, the two versions of ORCALib (the original version from Byte Works, and the modified version from Procyon) were never merged. Therefore, when ORCALib was updated for ORCA/C v2.1.x, the GNO-specific changes were effectively lost. When Devin took over maintenance of the GNO libraries in the spring of 1997, he was (in order to get a stdio package that worked with pipes) faced with the choice of either reimplementing Jawaid's changes to stdio, or to use another implementation of stdio that was written with pipes in mind. The tradeoff is one of development time versus code size (and probably speed). The ORCA stdio implementation is in assembly, so it is small and fast. On the other hand, GNO v2.0.6 had been in the "it's not ready yet" stage for quite a while. The choice was made to use the 4.4BSD stdio implementation. This is the primary reason why programs which use stdio are now larger than they were. If your program does not use stdio, but is still significantly larger, then it may be due to dependancies in libc; there are some routines which currently depend on stdio but which need not. These dependancies will be removed as time is available to do so.
 
Continue to: