As noted by @ryanofsky and mitigated in #13894 and #14071, the index destructor previously had a memory violation by accessing its own address in call to UnregisterValidationInterface. This is problematic even if Start
is never called on the index. The new runner class is an RAII-style interface for sync thread management and validation interface registration.
I’m not sure if this is a good idea or an unnecessary abstraction since the init
module still has responsibility for starting/stopping via global pointers. I do think it’s a better separation of concerns though. Looking for feedback before polishing up the PR.