Differences between Newlib and Newlib-Nano include:
Newlib-Nano is optimized for size.
The printf and scanf family of routines have been re-implemented in Newlib-Nano to remove a direct dependency on the floating-point input/output handling code. Projects that need to handle floating-point values using these functions must now explicitly request the feature during linking, as described above.
The printf and scanf family of routines in Newlib-Nano support only conversion specifiers defined in C89 standard. This provides a good balance between small memory footprint and full feature formatted input/output.
Newlib-Nano removes the now redundant integer-only implementations of the printf/scanf family of routines (iprintf/iscanf, etc). These functions now alias the standard routines.
In Newlib-Nano, only unwritten buffered data is flushed on exit. Open streams are not closed.
In Newlib-Nano, the dynamic memory allocator has been re-implemented