Interestingly, for rust-gc, the initial <i>safe</i> GC design was the hard part. Concurrency is easy to bolt on to it[1].<p>Basically, once we had a GC design that was &quot;safe&quot; (In Rust terms; i.e. can&#x27;t be used in safe Rust to trigger memory or thread unsafety), making GCd objects passable between threads was a clean, logical extension of the existing model.<p>This is probably because Rust&#x27;s safety model in a single threaded situation is very close to what you need for multithreaded safety too.<p>[1]: however it gets tricky again if you want to avoid pausing threads as much as possible (i.e. only pause on a GC mutation).