3 ms·
The idea of extending file-related system calls to remote pathnames was present in a few systems in the 1980s: ITS, Lisp Machines, VMS, probably a bunch of othe
by sedachv 9y ago
The idea of extending file-related system calls to remote pathnames was present in a few systems in the 1980s: ITS, Lisp Machines, VMS, probably a bunch of others I am not aware of. You can see the vestiges of this in Common Lisp pathnames. Kent Pitman provides a good summary in a comp.lang.lisp post from 2002: https://groups.google.com/d/msg/comp.lang.lisp/UCeOl3sUlFQ/VkdFCoAXW4gJ https://groups.google.com/d/msg/comp.lang.lisp/UCeOl3sUlFQ/V...
This approach is much more powerful than the Unix style of mounting. FUSE provides some degree of extensibility, but it is not composable. Pitman's post mentions the "chained hosts" of VMS. GNU Emacs TRAMP has a completely general and composable mechanism called "multi-hops": https://www.gnu.org/software/tramp/#Ad_002dhoc-multi_002dhops https://www.gnu.org/software/tramp/#Ad_002dhoc-multi_002dhop...
Using explicit remote pathnames as opposed to mounting is a very powerful idea, and I am glad it is becoming practical today. I think it is possible to write something like a portable Parrot as a library and set of shadow include files you could use to recompile applications.
- sedachv 9y ago> This approach is much more powerful than the Unix style of mounting. It occurred to me I should provide a qualifier here. Single-tree Unix pathnames have one very powerful property that qualified schemes from the 1980s lack: self-similarity at every level of the directory hierarchy. This is why filesystem virtualization schemes like loop devices (CD and disk images, and things like EncFS), chroot, and overlays are possible and work so well. The 1980s schemes did not support these use cases and were more tedious to type out, and they rightly died out. But it is not either-or: TRAMP shows that you can have Unix pathnames for your local machine and qualified pathnames for when you need to specify where/how to access files.
- happyguy43 9y agoJust curious, in what way is FUSE not composable where TRAMP is?
- sedachv 9y agoFor example, if you want to use SSHFS to access files on a machine that is only reachable via a gateway, you would have to change your SSH configuration with the details of the gateway, or set up port forwarding: https://undeadly.org/cgi?action=article&sid=20070925181947 https://undeadly.org/cgi?action=article&sid=20070925181947 TRAMP provides a pathname syntax for this kind of connection: /ssh:bird@bastion|ssh:you@remotehost:/path So the steps to get to the remote files are part of the pathname, and you can compose several steps with |. With FUSE, or any kind of mounting, this information is not part of the pathname; next time you need to access somewhere convoluted you have to set up the proxying/forwarding again. You can also share the pathname. It is easy to copy-paste an SHH to sudo to Docker container multi-hop; setting up and tearing down the mounts to do the same thing would be fairly involved.