sapling/eden/fs/docs/Overview.md
Ratnadeep Joshi ce4b8122ae Some minor modifications to verbiage in documentation
Summary: [edenfs] Some minor modifications to verbiage in documentation

Reviewed By: chadaustin

Differential Revision: D22394129

fbshipit-source-id: 2d662e56d621fd5e5d5ba6de284ca3d08f8bd4e5
2020-07-06 22:20:17 -07:00

82 lines
3.1 KiB
Markdown

EdenFS Overview
===============
EdenFS is a virtual filesystem designed for efficiently serving large source
control repositories.
In particular, EdenFS is targeted at massive
[monorepos](https://en.wikipedia.org/wiki/Monorepo), where a single
repository may contain numerous projects, potentially spanning many millions of
files in total. In most situations individual developers may only need to
interact with a fraction of the files in the repository when working on their
specific projects. EdenFS speeds up workflows in this case by lazily fetching
file data, so that it only needs to fetch file information for portions of the
repository that are actually used.
EdenFS aims to speed up several different types of operations:
* Determining files modified from the current source control state.
(e.g., computing the output for `hg status` or `git status`)
* Switching the filesystem state from one commit to another.
(e.g., performing an `hg checkout` or `git checkout` operation).
* Tracking and delivering notifications about modified files.
EdenFS can deliver notifications of file changes events through Watchman,
to allow downstream tools like build tools and IDEs to build functionality
that depends on file notification events.
Additionally, EdenFS also provides several additional features like efficiently
returning file content hashes. This allows downstream build tools to retrieve
file hashes without actually needing to read and hash the file contents.
Operating System Interface
--------------------------
EdenFS is supported on Linux, macOS, and Windows. The mechanism used to
interact with the filesystem layer is different across these three different
platforms.
On Linux, EdenFS uses
[FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) to provide
filesystem functionality. On macOS EdenFS uses [FUSE for
macOS](https://osxfuse.github.io/), which behaves very similarly to Linux FUSE.
On Windows, EdenFS uses Microsoft's
[Projected File System](https://docs.microsoft.com/en-us/windows/win32/projfs/projected-file-system).
This behaves fairly differently from FUSE, but EdenFS still shares most of the
same internal logic for tracking file state.
Parts of this design discussion focus primarily on the Linux and
macOS implementations. On Windows, the interface to the OS behaves a bit
differently, but internally EdenFS still tracks its state using the same inode
structure that is used on Linux and macOS.
High-Level Design
=================
The following documents describe the design of relatively high-level aspects of
EdenFS's behavior:
* [Process Overview](Process_State.md)
* [Source Control Data Model](Data_Model.md)
* [Inodes](Inodes.md)
* [Glossary](Glossary.md)
Design Specifics
================
The following documents cover specific features and implementation details in
more depth:
* [Configuration](Config.md)
* [Caching](Caching.md)
* [Globbing](Globbing.md)
* [Inode Lifetime Management](InodeLifetime.md)
* [Inode Locking](InodeLocks.md)
* [Inode Storage](InodeStorage.md)
* [Path Handling](Paths.md)
* [Rename Handling](Rename.md)
* [Redirections](Redirections.md)
* [Threading](Threading.md)