# Reliance Edge

Reliance Edge is a small, portable, highly reliable power-fail safe file system
for resource-constrained embedded systems like microcontrollers.  It is written
in C and provides a familiar POSIX-like file system API, making it easy to use
in your application; or an alternate minimalist API if your application has
simple storage needs.  Reliance Edge is highly configurable and can be tuned to
the precise needs of your application.

## Documentation

The complete documentation for Reliance Edge is distributed separately.  It
includes an API reference and detailed discussions of various aspects of using
Reliance Edge, including porting, building, configuring, and testing.  This
complete documentation, called the _Developer's Guide_, can be obtained for free
from here:

<http://www.datalight.com/reliance-edge>

In addition this README, see [doc/release_notes.md](doc/release_notes.md) for a
list of updates to Reliance Edge and a list of known issues.  There is also a
quick-start guide in the doc/ directory that describes step-by-step how to
compile and run Reliance Edge in a simulated Windows environment.

## Why Use Reliance Edge?

Reliance Edge is ideal for small embedded systems with data storage
requirements, especially if there is a chance of sudden power loss or other
system failures.  Compared to "raw" disk access, using a file system like
Reliance Edge removes the burden of tracking which sectors belong to which
objects, and allows data to be updated more reliably.  Compared to the FAT file
system, using Reliance Edge eliminates the possibility that file system data
will be left in an inconsistent state, corrupting the disk; Reliance Edge does
not need a fsck/CHKDSK utility.  Compared to journaling file systems, Reliance
Edge has less overhead and results in less storage media wear for longer device
lifetimes.

Reliance Edge uses a unique transactional model that not only prevents file
system corruption but also allows a set of changes to be made in an atomic "all
or nothing" fashion.  This is very useful for applications that make sets of
interrelated changes.  By using the features of Reliance Edge, a set of changes
can be incorporated into a single atomic transaction, which is committed in its
entirety or not at all even if interrupted by power loss; this means the
application does not need code to recover from partially-finished updates.

## Hardware

The typical hardware for Reliance Edge is a 32-bit microcontroller, but other
targets are possible.  In its typical configurations, Reliance Edge needs at
least 4 KB to 5 KB of RAM, 11 to 18 KB of code space (on the ROM or NOR flash),
and 500 to 700 bytes of stack.

Reliance Edge is not designed for high-end embedded systems that run complicated
operating systems like Linux or Windows Embedded Compact.  Embedded systems of
that variety are better served by other file systems, like Datalight's
[Reliance Nitro](http://www.datalight.com/products/embedded-file-systems/reliance-nitro).

## Getting Reliance Edge Working

Before you can use Reliance Edge, it must be ported and configured.  At a
minimum, porting includes filling-in functions so that Reliance Edge can issue
commands to your storage medium; depending on your needs, other functions may
need to be filled in as well.  These functions reside in a subdirectory in the
os/ directory; see os/stub/ for a blank set of functions.  Configuring includes
creating a project directory (start by copying projects/newproj) and creating
the two configuration files (redconf.h/redconf.c) using the Reliance Edge
Configuration Utility (which can be downloaded from
<http://www.datalight.com/reliance-edge>).

These topics are covered in much greater detail in the _Developer's Guide_,
linked above.

## Using Reliance Edge

Using Reliance Edge is a simple matter of including the primary Reliance Edge
application header in your application (either include/redposix.h or
include/redfse.h) and compiling and linking against Reliance Edge binaries.
The Reliance Edge driver must be initialized before it is used (via the
red\_init() or RedFseInit() functions) and then volumes can be mounted and file
and directory functions invoked.  The Reliance Edge API is documented in the
_Developer's Guide_ (linked above) and also via comments in the source code.

## Licensing

Reliance Edge is an open-source project licensed under the GNU General Public
License v2 (GPLv2).  Businesses and individuals that for commercial or other
reasons cannot comply with the terms of the GPLv2 license may obtain a
commercial license before incorporating Reliance Edge into proprietary software
for distribution in any form.  Visit <http://www.datalight.com/reliance-edge>
for more information.  The commercial distribution also includes extra tests and
tools not distributed with the GPLv2 version.

See LICENSE.txt for the full license terms of this distribution of the product.

## Getting Help

If you need assistance using Reliance Edge, and you have already consulted the
_Developer's Guide_, contact <RelianceEdgeSupport@datalight.com>.

In the near future, a community forum or message board will be set up to
facilitate discussion of Reliance Edge and allow users to get help from
Datalight and from each other.  In the meantime, please use the email address
given above.

## Contributing

Contributions to Reliance Edge are welcome.  Our policy is that Datalight must
own the copyright of all code incorporated into Reliance Edge; if contributing a
significant amount of code, you will be asked to file a copyright assignment
agreement.  See CONTRIBUTING.txt for further details and contribution
guidelines.

To report bugs, please create a GitHub issue or contact
<RelianceEdgeSupport@datalight.com>.

