As I have been working on porting FileStream to Gemstone, I have found that AbstractBinaryStream could be made more generic if the references to File were handled slightly differently. The idea is to delegate the call of File in AbstractBinaryStream to the instance side of File.
For example: AbstractBinaryFIleStream >>#flush File flush: handle
From a compatibility perspective, GemStone would then also implement a GsFile>>#flush: and handle the flush as appropriate for GemStone.
I have looked at the VA Smalltalk code as well and this would also work well with their code base.
The methods that would need to be changed are: 1) AbstractBinaryFileStream atEnd flush next:intoBuffer: next:putAll: position position: readInto:startingAt: size sync 2) BinaryFileStream close closed truncate: 2) StdioStream next:
Other references to File in the FileSystem classes, could the be changed to a FileSystem fileClass which would return the file class for the variation of Smalltalk. Pharo would return File, GemStone would return GsFile, VA Smalltalk would return CfsFileDescriptor.