In thread-level speculation (TLS), speculative tasks generate memory state that cannot simply be combined with the rest of the system because it is unsafe. One way to deal with this difficulty is to allow speculative state to merge with memory but back up in an undo log the data that will be overwritten. Such undo log can be used to roll back to a safe state if a violation occurs. This approach is said to use future main memory (FMM), as memory keeps the most speculative state. While the aggressive approach of FMM systems often delivers better performance than more conservative approaches, it also requires additional hardware support. To simplify the design of FMM systems, we propose a software-only design for the undo log system. We show that an FMM system with software logging is a good design point: the design has less implementation complexity than an FMM system with hardware logs, and it only reduces performance moderately. In particular, in a simulated 16-processor machine, applications take only 10% longer to execute than if the system had the logging system fully implemented in hardware.