# FTPFS
**Wikidata**: [Q145938](https://www.wikidata.org/wiki/Q145938)  
**Wikipedia**: [English](https://en.wikipedia.org/wiki/FTPFS)  
**Source**: https://4ort.xyz/entity/ftpfs

## Summary
FTPFS is a file-system driver that lets Linux, FreeBSD and other Unix-like systems mount an FTP server as if it were a local disk, turning the remote FTP site into a browsable directory tree. It is implemented as a FUSE (Filesystem in Userspace) module, so no kernel recompilation is required; users simply run “ftpfs <server> <mountpoint>” and then read, write or delete files with normal shell commands.

## Key Facts
- Instance of: file system (Wikidata Q-class “file system”)
- Project home page: http://ftpfs.sourceforge.net/ (archived SourceForge page, still reachable)
- Freebase identifier: /m/07msgd
- Wikipedia coverage: 4 language editions—German, English, Korean, Chinese (sitelink count = 4)
- Implementation type: FUSE-based virtual file system; no kernel module needed
- Protocol spoken: FTP (RFC 959) over TCP/IP; passive mode supported
- Typical mount command: ftpfs <host> <local-dir> [user[:pass]] [-o options]
- License: GNU GPL v2 (inferred from SourceForge “GNU/Linux” tag and era)
- First public release: circa 2003–2004 (date inferred from SourceForge file stamps and Linux 2.6/FUSE timeline)
- Last upstream commit: ~2010 (project now in maintenance-only state)

## FAQs
### Q: Do I need root privileges to mount an FTP site with FTPFS?
A: No. Because FTPFS uses FUSE, any user in the “fuse” group can mount the remote FTP server as a directory inside their own filesystem tree.

### Q: Does FTPFS support write access or is it read-only?
A: It supports both read and write; however, every file operation translates to an FTP command, so saving a file triggers an upload and deleting removes the remote copy.

### Q: How is FTPFS different from curlftpfs?
A: curlftpfs is a separate FUSE project that relies on libcurl, whereas FTPFS was the earlier, standalone implementation. Both achieve the same goal but are maintained by different authors.

### Q: Is FTPFS still safe to use today?
A: The code itself is stable, but FTP sends credentials in clear text. Unless you wrap the session in TLS (FTPS), it should only be used over trusted networks or VPNs.

## Why It Matters
Before cloud storage and ubiquitous SSH/SFTP, system administrators needed a quick way to edit web-site content or distribute large files stored on anonymous FTP servers. FTPFS bridged the gap between the FTP protocol born in the 1970s and the modern Linux desktop of the early 2000s. By turning an FTP account into a mount-point, it let GUI applications—text editors, photo managers, IDEs—access remote data through the standard POSIX file API without any special FTP awareness. This lowered the barrier for content creators who could now drag-and-drop files onto an FTP-backed folder instead of learning command-line clients. Although superseded by curlftpfs and later by SSHFS and cloud-sync tools, FTPFS remains a textbook example of how FUSE democratized filesystem development: a few hundred lines of user-space code turned a legacy protocol into a first-class citizen of the Unix directory hierarchy.

## Notable For
- One of the first FUSE filesystems to ship in major Linux distributions (Debian Sarge, Ubuntu 5.04)
- Provided transparent random-access reads/writes over a protocol that was originally designed for simple batch uploads
- Requires no server-side agent—works with any stock FTP daemon
- Demonstrated that FUSE could deliver practical, not just academic, filesystems
- Still cited in OS-course labs as a minimal example of network-to-VFS translation

## Body
### Technical Architecture
FTPFS is a thin FUSE layer that translates POSIX calls into FTP commands. Opening a file issues “RETR”, closing after write sends “STOR”, stat() uses “LIST” or “MLST”, and mkdir/rmdir emit “MKD”/“RMD”. Directory caching and file handle reuse keep latency tolerable over high-latency links.

### Installation & Usage
1. Install fuse and ftpfs packages (Debian/Ubuntu: apt install ftpfs).
2. Add your user to the fuse group: sudo usermod -a -G fuse $USER.
3. Mount: ftpfs ftp.example.com ~/mnt/ftp -o user=myname,pass=mypass,allow_other.
4. Treat ~/mnt/ftp like any local directory; unmount with fusermount -u ~/mnt/ftp.

### Limitations
- No built-in encryption; credentials and data travel in cleartext unless you tunnel through FTPS or stunnel.
- No locking semantics; concurrent writes from multiple clients can race.
- Performance is bound by FTP’s chatty command/response model; large file trees take time to cache.
- ASCII vs. binary auto-detection can corrupt non-text files if the server mis-reports types.

### Current Status
Development ceased around 2010; the SourceForge CVS repository is frozen. Modern alternatives—curlftpfs, SSHFS, Rclone, or cloud-specific drivers—offer better security and performance, but FTPFS source remains a valuable reference for learning FUSE API usage.