I did not read all changes you suggest yet but: wouldn't it make sense to have a abstract `initOutPath(..)` in `FileSystems` and implement the cases for local and distributed in their respective classes.
With the current approach, we would have to add a method for each new file system we add to the system.