And if your VM is sufficiently weird
enough (Jikes RVM with m-n threading), then you might actually want to
do something different about files. We used to have our own version
of FileDescriptor and do non-blocking I/O with hooks back into our threading
layer instead of using the default classpath implementation. This
got out of sync with classpath at some point and we don't use it currently,
but something like it will come back eventually.
On VMFoo vs. NativeFoo vs. PlatformFoo,
I really don't care. I only observe that one person's VMFoo is another
person's native/platfrom so perhaps it makes sense to just pick one name
(VM) and leave it. I suspect you are unlikely to be able to "nicely"
divide the classes along these lines so why waste any intellectual effort
(and silly flame wars) arguing about whether something is a VMFoo vs a
NativeFoo.