[Captivate Android Development] Unhelpful:
Here is my compiled kernel, and static utils for creating nilfs2 filesystems. The mount/umount utils are not called by the stock or busybox mount/umount at present, and all they actually do is start/stop the cleaner daemon for you on mount/unmount. Without stopping the daemon you can't actually umount the filesystem, so even "graceful" shutdowns will stop your nilfs2 filesystems hard. This has not caused any trouble for me at all, the filesystem has been very resilient.

The kernel includes my race-free user init solution. Save your user init as /system/bin/user_init, and make sure it is executable and has a proper interpreter line at the top if it is a script. If you can not run it with just /system/bin/user_init, it will not work. user_init is run after mounting /data and /dbdata as rfs, but before the part of init that sets up directory structures and permissions in them. If you wish, it can unmount an already-mounted /data or /dbdata and mount a new one stored on another partition in its place.

I don't have a pretty package ready here, but the easiest way to convert is to boot clockwordmod recovery, create a new backup, and start a shell in adb without restarting. You can then format the partition of your choice with nilfs2, mount it, cd into it, and restore your backup with

unyaffs /sdcard/clockworkmod/backup/<backup name>/data.img

You'll need to install the cleaner daemon somewhere in /systems - it is responsible for deleting old checkpoints, since nilfs2 is an auto-checkpointing fs, and without it your filesystem will fill up even if you try to delete things to make room. Install the included nilfs_cleanerd.conf to /system/etc, it is set up to keep between 20-30% of your space free and not remove any checkpoint under 30 minutes old.

A sample user_init is included. It logs operations to /system/data_mount.log, and uses time to time the mount. If you do not have busybox installed, just remove the "time" from the start of the line with the mount command. You can also use an external /data partition if you want, but I chose to use an internal one so that I can remove my external flash without shutting down.

I may eventually get around to producing a nice package for this, but I won't complain if somebody else gets to it first. Also, backup/restore via recovery is problematic for now - if you use internal sd you will need to modify CM's /etc/fstab to use auto for /data rather than rfs, or it will not be able to mount it. You may also want to format /data before restoring to it, or else manually run the cleaner once /data starts restoring, to ensure that it does not just fill up with old checkpoints.

Good luck, have fun, make sure you have backups before you do anything with this, etc. I'll try to help if there are problems but you are ultimately responsible for what you do to your phone, so if it breaks all I can promise is that you get to keep the pieces. :D

EDIT: in the interest of helping the community and complying with the GPL, I'm adding a diff for my kernel and initrd modifications. The kernel patch can be applied to the Samsung source release kernel, and the initrd patch should apply cleanly to an extracted stock initrd. Nilfs2 utility sources can be obtained at the NILFS website.