What is the difference between newlib and newlib-nano ?

Q: What is the difference between newlib and newlib-nano ?

A: Recently ARM decided to make two versions of the library: one that would really work in Linux without the need to tweak it, and a smaller one optimized for "small" embedded applications. They chose to modify the existing one to make it more easy to use with Linux, and to create a new one, which they called "nano" for small embedded apps. So the standard one became larger but the new one is much smaller (faster, uses less stack, etc.). You can optionally disable floating-point support from it for even more performance (if you don't use floating-point of course).

Historically, the GCC and its libraries were originally designed for producing applications that operate in Unix-like OSes. Until recently the library in the ARM port of GCC was still oriented this way, although not completely finished. As a result those who actually tried to use it in Unix-like OSes (Linux) in ARM applications had to tweak it before it worked, while those who did not use Linux (most embedded applications) were losing a lot of code and execution time, wasted by compatibility with an absent OS.