Wow, Fil-C++ looks very interesting! I wonder what % of programs make its pointer tracking fail due to stuffing things in the higher bits, doing integer conversions and so on.
It reminds me of CHERI.
I'd like to see a post on fuzzing distributed applications rather than memory models. I understand the underlying principle is the same, but having only seen memory models be tested I can't quite shift my perspective enough to figure out how fuzzing processing communicating over networks would work. The SQL transaction post would be a nice perspective too. Is this still in the works?
Progress is slow, but I've been maintaining the Rust version when I have time. The MVP of fuzzing network communications and disk access is fairly easy, but there is a long tail of very complicated behaviour I'd like to simulate.
Dan Luu's site [1] goes into a fair bit of detail on the disk side. I see no reason why you can't emulate a superset of the worst case behaviour, and have a great deal of confidence that you're using file access in a way that won't result in corruption.
Networks will have a similar long tail, e.g. asymmetric net splits.
The SQL version is a bit trickier, as the API is much wider. The abstraction I was working on was essentially that you get select, insert and update, and write anything more complicated yourself.
This works for replicating the skews and other phenomena described in DDIA [2], but it runs into the same core problem that you're simulating a model of your code, not your code itself. The best pathway for temporal fuzzing databases with production loads is probably at the network layer.
reply