It is unfortunate that there has been divergence in the core APIs of the 3rd party boards platforms at such a fundamental level. It harms the portability that is so important in the Arduino project.
Ideally, the community would let Arduino set the standards for the API, making changes via proposals such as the one I linked above rather than unilateral action. But of course Arduino has not always held up their end of that arrangement by making a conclusive decision on such proposals in a timely manner and the nature of open source is that each 3rd party project is managed according to the whims of its maintainer.
If I'm using an ESP or ARM board, it's likely because I need features or capabilities beyond that of a basic ARV-based Arduino. So, in that case, portability is not a factor.
However, I was surprised to see that Arduino's ARM-based boards don't support printf() while those from PJRC and Adafruit do.
My understanding is that Arduino's concern about printf is that its use results in beginner unfriendly code. A series of multiple print calls is very intuitive, while the equivalent string sprinkled with cryptic printf format specifiers is not.