I've always kept as far away as possible from commercial (or free!) RTOS for board products. Usually just write a simple scheduler (only one stack), probably written half a dozen (maybe more) over the years. My nios code is just a single C function with a for (;;) {...} in it (after the compiler has inlined things).
Most embedded code isn't ever going to be run in any other environment, and certainly doesn't need to constrain itself to POSIX (aka unixlike) interfaces. If you have a UART, you want a function read_bytes_from_uart(uart_control_data_t *, void *buf, int len); that directly calls the function that reads the hardware registers, not some long convoluted code path invoded by scanf().