In a desktop environment, these all correspond to operating system calls
– libc is just a code library, ultimately it needs access to an operating system
API. In order to use newlib, we must provide the missing functionality in the
form of procedures. Some of these we will replace with simple stubs, others
(read and write) with code that accesses a uart.