It is way too complicated. Why have a separate function for `printk` and `printf`? It doesn't make a whole lot of sense. Just restrict the ability to do `printk` things with `printf` and it's not a huge deal
printf doesn't have to deal with any of these issues.
But the userspace "solution" is to just forbid such usage.
which is totally not something the kernel developers want because printk is the one thing that remains even when everything else has gone belly-up.
They need a reliable method to log even under the harshest of circumstances because without a reliable log, how should they be able to ever cause those circumstances to not happen?
They could and perhaps should have just called it "printf", but it doesn't really matter much.