[Fascinate Android Development] comradesven:
Yes, the point is that flash memory isn't a block device (meaning something completely different from flash memory blocks) like hard disks and pretending that it is is kinda silly. Because of how complicated flash is even though people like to use it with no extra drivers in devices like USB keys, hardware and software schemes to maintain the pretense are widespread. For example, inside microSD cards Samsung puts a whole ARMv7 processor - a pretty sophisticated one with 32Kactually I remembered wrong it was 128K of its own programmable ROM - to serve as the controller and present a block device interface. This doesn't make much sense on the face of it so let's get into why it actually makes a lot of sense.

Flash is a commodity, the definition of which is that it's all supposed to work the exact same no matter who you buy it from. It's a cutthroat business and manufacturers make it as cheaply as can they get away with, with the expectation that there will be some semiconductor defects rendering some flash pages unusable. Making all of it is usable is possible, but why do that when you can make bigger chips with more storage capacity overall for cheaper? Testing the flash at the factory and marking the bad blocks is possible, but why do that when you can throw processing power at the problem to serve as the controller, to dynamically mark those bad flash blocks and handle writes (which are done on a per-block level) and do wear-leveling and pretend it's a (hard-disk-style) block interface all at once, for cheaper? Nobody actually using the flash to store data cares about the details, and you make so much damn flash and get the controllers cheap enough that including an honest-to-god mini-computer that would be the envy of the Apollo astronauts inside every microSD shell casing works out. What you want is to deal with bad blocks somehow. The price of a flash memory tester divided by the total number of chips it can test before it breaks is the cost per unit of one way of doing that. Surprise, throwing in free controllers is cheaper than buying a tester, which, by the way, won't be tagging along when the chip finally gets sold, so in order to actually use the raw flash one would need... a controller. Yup. You can, in fact, buy raw flash and decide you're going to do the controller stuff from scratch, but because of some other things I'm not getting into here that means you're pretty much going to be writing a driver. By the way, your driver will be restricted to the specific model of flash chip you buy and the specific device you're using it in. Isn't flash memory silly? Think about what flash memory actually does, teleporting innocent electrons off the street into electron jail using the power of quantum physics.

Including a free microcontroller with purchase is actually something they did on this phone too, and it's pretty common - some of the Fascinate's internal storage is eMMC, which stands for embedded MultiMediaCard (the same thing as SD card, pretty much). So on top of some internal flash that isn't an SD card pretending like it is, which the phone actually accesses with the same driver as the external microSD, Samsung also included a different block interface abstraction for use with the system storage, which is on a OneNAND chip, which is NAND flash pretending to be NOR flash. I'm guessing it's because random reads by address and therefore executing code in place is supported only by NOR flash. You can see how it might be useful to have the system partitions executable directly from flash, yes? I could be completely off base here, though. Anyway, Samsung took the opportunity to get some patents on a few journaling and UNIX permissions hacks they did to the FAT filesystem and marketed it as RFS, which is part of a whole storage solution you can buy as a package deal with their OneNAND so you, the beleaguered embedded systems engineer, don't have to get into those chip-and-platform-specific annoyances of using raw flash. If I remember the marketing correctly it's about how RFS and OneNAND are just so cute together who wouldn't root for these two and they're decked out in the latest in (20-year-old, in the case of RFS) patented storage technology and blah blah blah. I guess part of the reason we even have OneNAND is as a proof of concept. Problem is, it's slow on our phones.

Because the flash translation layer that does the look-at-me-I'm-a-block-device dance is independent of RFS and usable with any block device filesystem, people started formatting it as something else and calling it a "lagfix", and it helps some. But what we've settled on with Voodoo lagfix isn't ideal and never will be when OneNAND also has a perfectly good driver - open-sourced by Samsung - that turns it into a MTD. So you're right, treating flash memory as a Memory Technology Device is a lot better fit, because Samsung's FTL for OneNAND has no particularly redeeming qualities and MTD is an abstraction specifically designed for flash memory. It isn't accessing the flash directly, but you never wanted to do that anyway.

tl;dr: You see, on this phone MTD is and always has been the real lagfix

Also, I'm really not a developer. Somewhere along the way I appear to have picked up how to steal others' C code, which I don't even know, to make my phone do things I want.