  In this paper, we argue that current work has failed to provide a
comprehensive and maintainable in-memory representation for persistent memory.
  PM data should be easily mappable into a process address space, shareable
across processes, shippable between machines, consistent after a crash, and
accessible to legacy code with fast, efficient pointers as first-class
abstractions.
  While existing systems have provided niceties like mmap()-based load/store
access, they have not been able to support all these necessary properties due
to conflicting requirements.
  We propose Puddles, a new persistent memory abstraction, to solve these
problems. Puddles provide application-independent recovery after a power
outage; they make recovery from a system failure a system-level property of the
stored data rather than the responsibility of the programs that access it.
Puddles use native pointers, so they are compatible with existing code.
Finally, Puddles implement support for sharing and shipping of PM data between
processes and systems without expensive serialization and deserialization.
  Compared to existing systems, Puddles are at least as fast as and up to
1.34$\times$ faster than PMDK while being competitive with other PM libraries
across YCSB workloads. Moreover, to demonstrate Puddles' ability to relocate
data, we showcase a sensor network data-aggregation workload that results in a
4.7$\times$ speedup over PMDK.
