Filesystems are a special case, not just because HDFS adds stuff, but because there are fundamental differences between different filesystems (case sensitivity, full posix seek+write, atomic dir rename, o(1) File rename, consistent world view....). You can't declare that something supports this just through an interface, as (a) it varies at runtime and (b) FSDataOutputStream shows how base classes declare functionality which subclasses end up rejecting by dynamically throwing exceptions.
without getting into the versioning row, note HADOOP-9565 has narrowed down to some method on FileSystem to probe for features, something like
boolean hasFeature(Path, String)
Implementations can switch on the feature string, return true iff the feature is present and enabled. There's been discussion of a similar problem related to output stream features, we could do some similar interface here.