Factor/GSoC/2009/Factor VFS


Doug Coleman

Skills required

  • Knowledge of Factor
  • Knowledge of network protocols


Beginning to Advanced

Existing work

Factor has an HTTP client library, an FTP client library, first class pathname objects, and lots of code to handle pathnames on different platforms. The student will need to see if there are pathnames the existing code cannot handle, such as Windows URI and UNC pathnames.

Technical outline

Implement an extandable Virtual File System, so that a consistent API can be used to access local files, HTTP resources, files on FTP servers, and so on. The most promising way to come up with a good API in Factor is to attempt certain tasks and write high-level words which accomplish those tasks. After factoring the code to avoid duplication while solving all the tasks, the API falls out for free.

FTP support

Integrating FTP support with the current pathname code should not be too hard. There are words to download a remote FTP file to a certain location on the local disk, but they are not integrated with the current dispatching code.

High-level API

Since the essence of this project is accessing files from addresses specified in various protocols, the project involves making sure all permutations of downloading/uploading, copying, moving, files works for whichever protocols it makes sense. The student will write unit tests to ensure that these operations have a high probability of continuing to work in the future.

Additional protocols

The student could add support for more protocols such as NFS, Apple's AFP, SMB or Samba, or WebDav as time permits.

Benefit to the student

The student will learn about integrating libraries and writing APIs in Factor.

Benefit to the community

Being able to programatically download a file from a remote computer, HTTP or FTP server is useful for configuring and updating applications. Tools which do this, such as package managers and backup utilities can be written on top of this layer. Furthermore, a file browser can be built on top of this library once completed.

This revision created on Fri, 13 Mar 2009 23:52:50 by erg