I'm not particularly opinionated on either options. Could we rely on .so versioning to flag incompatible API changes? I cant really comment on the versioning of C APIs.
The current implemented methods in libhdfs that are related are
hdfsFileInfo *hdfsGetPathInfo(hdfsFS fs, const char* path);
char*** hdfsGetHosts(hdfsFS fs, const char* path,
tOffset start, tOffset length);
int hdfsSetReplication(hdfsFS fs, const char* path, int16_t replication);
so in a sense, we have both kinds of methods going on here.
Arun is the original libhdfs contributor, so perhaps he can comment on a preferred API style?