The best bits

Royalty Free...

100% ROYALTY FREE

Of course there's no royalty when you use Yaffs under the GPL; it's the GPL!

Our commercial licences are paid for once at the time of buying the Licence, and so they are also royalty free. No accounting and no need to worry about increasing costs as you make or sell more units.

A robust flash file system...

As part of our regular testing, we run power-fail tests. Whether it's during a read or a write, Yaffs is designed to preserve your existing data during a device power failure. And because Yaffs is open source, you can download the tests and run them yourself in the most severe conditions you expect the product to encounter. See:- http://www.yaffs.net/documents/yaffs-robustness-and-testing

Yaffs is Open Source...

Yaffs is downloadable with a GNU General Public Licence v.2, as at  http://www.gnu.org/licenses/gpl-2.0.html   You get the source code, with all the benefits that brings. And of course, if you buy a commercial licence, you get the source code too, but without the encumberance of your responsibilities under the GNU GPL

Because it's Open Source, you can always see what the code is doing and trace through; and having the code means you'll never be in a situation where you are critically dependent on us, either from a technical or a business perspective.

Tried and tested in millions of devices...

Yaffs is the leading Flash file system, running in millions of devices. It's been used on Linux computers, in cameras, mobile phones, hard drives, and on many custom boards. People and companies trust it to keep their data safe. Read more about how we test Yaffs in our Robustness and Testing white paper.

Booting is fast...

Being quick to boot was one of the fundamental requirements in Yaffs' design. Boot-time scanning to build the file structure lists should require just one pass reading NAND memory.

An active community...

You can learn from the experience of people and companies who are working with Yaffs. Thousands of developers have used Yaffs successfully, and commercially-licensed Yaffs has many customers that use it repeatedly. Have a look at the mailing list - it's a great place to start if you have some questions.
http://stoneboat.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs

The searchable archive of postings is at http://lists.aleph1.co.uk/lurker/list/yaffs.html   Or search online to see the variety of work done with Yaffs as its basis - from research papers through to skunkworks projects for testing particular concepts.

Suitable for open and closed source projects...

If you want to use Yaffs on an Open Source project, then go ahead and download the GNU General Public Licence v.2 now. You can get it straight away from the link on the right of the page.

Yaffs is also available under a Commercial Licence for projects that don't want to disclose their source code.  This Licence does not have the obligations of GPL, but is perpetual, world-wide, non-exclusive and carries no continuing royalty.

You can use the Open Source code to investigate and evaluate Yaffs, then before shipping your product to anyone outside of your organisation you buy a licence from Aleph One which does not have the GNU GPL obligation to release your Source Code.  Contact  sales@aleph1.co.uk  for more information or have a look at our licensing information.

For closed source projects - try before you buy...

When shopping for a software component, it's always useful to be able to try it out before buying.

For your proprietary projects, the GPL version of Yaffs lets you do just that - download it, examine the code and test it out. Check out our documentation and videos.

It's perfectly acceptable and safe to use the GNU GPL code inside your company, providing you don't ship a binary to anyone beyond it. That's when code disclosure and licensing provisions of the GNU GPL kick in. So before you do that, you'll want to talk to us about acquiring a paid Licence.

Yaffs is a safe choice...

Having started in 2002 Yaffs embodies more than ten years of experience with Flash memory and its specialised needs, coupled with continued growth in the number of people and companies using Yaffs.

Since its inception numerous features and refinements have been added. The code continues to evolve, growing in value to users whilst retaining backward compatibility. The community of users continues to grow as more and more people and companies opt to use Yaffs, providing a pool of knowledge which is accessible to new users. 

The availability of the GNU General Public Licence version means that there's always an exit route for open source projects, and since it's open-source, existing commercial projects will at the very least always have the source code and the licence to continue to use it, and likely much more. Plus commercial projects benefit from the open source experience in Yaffs - both with respect to developers and knowledge. 

Yaffs is a safe choice for any project needing a Flash file system: it has well over ten years of history, proven sustainability, a continuously improving codebase, a growing user base, and exit routes, since it will continue to be available regardless of Yaffs.net.

Yaffs is fully supported...

Yaffs support is available through the Yaffs community - primarily via the mail list - with help coming from our key developers as well as other people who use Yaffs. For those times when you don't feel comfortable asking a question in a public forum, perhaps because the project is sensitive, we will normally answer a few questions off-list before we offer you the opportunity of consultancy and direct access to our developers. And of course we are always willing to discuss other forms of support for customers who buy licences.

Data is safe with Yaffs...

Yaffs provides bad block handling and ECC algorithms to handle deficiencies in NAND flash.

It is a log-structured file system which makes it very robust to corruptions caused by power failures.

We spend about 60% of development time on testing Yaffs, and our test harness is available for download so you can check the testing and perform some yourself.

We've performed hundreds of thousands of tests to make sure that Yaffs is as safe as we can make it, even in the even of a power failure during a firmware update.

You can find full details of the Yaffs testing regime in our paper http://www.yaffs.net/documents/yaffs-robustness-and-testing  including all the details on the power-fail stress tests, the Yaffs Direct API tests for commercial RTOSs, Linux testing, and fuzz testing where we deliberately corrupt Yaffs file systems to check that Yaffs can still mount.

High and low level interfaces...

We provide a high level interface with the GPL version of Yaffs, so it's easy to use with Linux and other OS's that support POSIX.  This support includes directories, symbolic and hard links, through standard file system interface calls.

But when you want to integrate Yaffs directly into your OS or your code, you'll most likely want to make use of the Yaffs Direct Interface or other low-level interfaces:

  • Application Interface: This is the interface that the application code uses to access the YAFFS file system.
  • RTOS Integration Interface: These are the functions that much be provided for YAFFS to access the RTOS system resources.
  • NAND Configuration and Access Interface: These are the functions that must be provided for YAFFS to access the NAND flash.

Have a look at the guides in the Documents section, to find out more about integrating Yaffs.

Cross-platform and portable...

Yaffs is easy to port. It is written in C, with particular attention paid to making it portable. It's CPU independent, high/low bit independent (endian neutral) and doesn't rely on any particular operating system.  Look at the schematic in the Yaffs Overview to see the relationship of the different elements.

It's already been used under Linux, eCos, VxWorks, Win CE and more. 

Yaffs has been used successfully with many different 32-bit and 64-bit CPUs including MIPS, 68000, many from ARM, ColdFire, PowerPC and x86 variants. Yaffs works with 16-bit CPUs too, but this is less tested and might need some tuning, depending on compiler options. 

We've found it easy to move to different processor architectures because it was designed to do this; as long as your processor is greater than 8-bit, Yaffs should run without needing much work.

Read  http://www.yaffs.net/yaffs-porting-guide for more detail.

A file system designed for Flash memory...

Yaffs was designed from the ground up for Flash memory. It is best with NAND Flash but can be used with NOR too. It has mechanisms for wear-levelling, and special attention has been paid to the safety of the system even under power-failure. It is works well with MLC Nand, as well as SLC; it is compatible with a wide range of Flash, including Toshiba/Sandisk MLC parts.  See also the document   Considerations in Using a Flash File System  for a discussion of the importance of reliability.

Predictable and performance oriented

Yaffs has highly optimised and predictable garbage collection strategies. This makes it high performance and very deterministic when compared with similar file systems.

Memory efficiency

Yaffs has a lower memory footprint than most other log-structured Flash file systems.  Because it is log-structured, RAM is required to build up runtime data structures for acceptable performance. As a rule of thumb, Yaffs uses approximately 2 bytes per chunk of NAND flash, where a chunk is typically one page of NAND. For NAND with 512byte pages, a budget of approximately 4kbytes of RAM per 1Mbyte of NAND is usually sensible. And for 2kbyte page devices a budget of approximately 1kbyte per 1Mbyte of NAND usually suffices.

You can find out details of Yaffs memory use in the document  http://www.yaffs.net/documents/how-yaffs-works

Highly configurable - matches your Flash memory

Yaffs is adaptable to suit the Flash geometries, caching options, Error Correction strategies and other features that you need.

Details of the configuration options can be found in the Linux menuconfig compile options tool, and in  http://www.yaffs.net/yaffs-tuning-and-configuration

Simple to integrate

Yaffs Direct Interface is simple to integrate in a system – only a few interface functions are required. Yaffs also includes a POSIX interface. It has been used with Android, VXWorks, Windows, Linux, bare metal, and more; on ARM (32 and 64), x86 (32 and 64), Atmel, and more.

You can find details in the Yaffs Direct guide.