Key-value stores, relational databases, logs, anything you can think of. It just depends on what you're storing. There just aren't a lot of data structures implemented because file systems work well enough. I think it would be cool if there was a block storage alternative to file systems that was more like virtual memory.
For example: Pangolin: A Fault-Tolerant Persistent Memory Programming Library: https://www.usenix.org/conference/atc19/presentation/zhang-lu
Only designed for embedded devices though.
File systems are especially annoying because they have all sorts of metadata that makes them less reliable. Does a file have the correct permissions? Is it writable? Is another program using it? Is it fragmented?
An iOS or Android app has no use for file permissions or ownership or creation date or even sub-directories, in its own sandbox directory, so that's just extra overhead and extra code (in the file system driver) that provides no benefit, but can still potentially cause problems.
I don't know if I've ever seen a single Windows application that correctly handles every error case when using the file system. You'll get all sorts of unfriendly errors, crashes, and freezes because of stupid things like file permissions or some obscure file system "feature". And that doesn't even get to file path string encoding, maximum files in a directory, max file size, etc. that also have to be considered when writing robust software. And every thing that isn't considered is another thing that will end up hurting the end user. And all of these things vary slightly between operating systems, and developers don't typically use a custom file system on top of the OS file system, so it means there isn't a consistent programming environment, and even more error cases have to be considered (and these types of things do produce real errors that affect users). How often do SQL databases and key-value stores produce errors? (probably only as often as the file system they're implemented on top of do)
and what is the alternative to having a file system?
Key-value stores, relational databases, logs, anything you can think of. It just depends on what you're storing. There just aren't a lot of data structures implemented because file systems work well enough. I think it would be cool if there was a block storage alternative to file systems that was more like virtual memory.
For example: Pangolin: A Fault-Tolerant Persistent Memory Programming Library: https://www.usenix.org/conference/atc19/presentation/zhang-lu
Only designed for embedded devices though.
File systems are especially annoying because they have all sorts of metadata that makes them less reliable. Does a file have the correct permissions? Is it writable? Is another program using it? Is it fragmented?
An iOS or Android app has no use for file permissions or ownership or creation date or even sub-directories, in its own sandbox directory, so that's just extra overhead and extra code (in the file system driver) that provides no benefit, but can still potentially cause problems.
I don't know if I've ever seen a single Windows application that correctly handles every error case when using the file system. You'll get all sorts of unfriendly errors, crashes, and freezes because of stupid things like file permissions or some obscure file system "feature". And that doesn't even get to file path string encoding, maximum files in a directory, max file size, etc. that also have to be considered when writing robust software. And every thing that isn't considered is another thing that will end up hurting the end user. And all of these things vary slightly between operating systems, and developers don't typically use a custom file system on top of the OS file system, so it means there isn't a consistent programming environment, and even more error cases have to be considered (and these types of things do produce real errors that affect users). How often do SQL databases and key-value stores produce errors? (probably only as often as the file system they're implemented on top of do)