I'd argue that, for future APIs, we don't export variadic ones. These are generally just for convinience. But plugins can easily do their own string formatting and give us the result.
Of course it's for convenience. Imagine writing the following line of code without using any functions with variadic arguments:
```c printf("%s is %d", name, age); ``` Even if you did use one variadic function (ex. `g_strdup_printf`), it's still 3 lines of code and a potential source for leaking memory.
This part of GI is not buggy.
Ok, it's not buggy, it's just a missing feature which makes it impossible to export all of the C API to other languages, thus requiring any bindings to C be incomplete or rewriting the C API to be less convenient.