The important part is that safe code can’t explicitly implement it. This allows unsafe code to trust the implementation to be correct. Autoderiving is of course important for making this at all tolerable. However all of the following objects would have to be magical langitems if unsafe code couldn’t either:
src/liballoc/arc.rs:unsafe impl<T: ?Sized + Sync + Send> Send for Arc<T> {}
src/liballoc/arc.rs:unsafe impl<T: ?Sized + Sync + Send> Sync for Arc<T> {}
src/liballoc/arc.rs:unsafe impl<T: ?Sized + Sync + Send> Send for Weak<T> {}
src/liballoc/arc.rs:unsafe impl<T: ?Sized + Sync + Send> Sync for Weak<T> {}
src/liballoc/arc.rs:unsafe impl<T: ?Sized + Sync + Send> Send for ArcInner<T> {}
src/liballoc/arc.rs:unsafe impl<T: ?Sized + Sync + Send> Sync for ArcInner<T> {}
src/libcollections/btree/node.rs:unsafe impl<K: Sync, V: Sync> Sync for MoveTraversalImpl<K, V> {}
src/libcollections/btree/node.rs:unsafe impl<K: Send, V: Send> Send for MoveTraversalImpl<K, V> {}
src/libcollections/linked_list.rs:unsafe impl<T: Send> Send for Rawlink<T> {}
src/libcollections/linked_list.rs:unsafe impl<T: Sync> Sync for Rawlink<T> {}
src/libcollections/string.rs:unsafe impl<'a> Sync for Drain<'a> {}
src/libcollections/string.rs:unsafe impl<'a> Send for Drain<'a> {}
src/libcollections/vec.rs:unsafe impl<T: Send> Send for IntoIter<T> {}
src/libcollections/vec.rs:unsafe impl<T: Sync> Sync for IntoIter<T> {}
src/libcollections/vec.rs:unsafe impl<'a, T: Sync> Sync for Drain<'a, T> {}
src/libcollections/vec.rs:unsafe impl<'a, T: Send> Send for Drain<'a, T> {}
src/libcollections/vec_deque.rs:unsafe impl<'a, T: Sync> Sync for Drain<'a, T> {}
src/libcollections/vec_deque.rs:unsafe impl<'a, T: Send> Send for Drain<'a, T> {}
src/libcore/array.rs:unsafe impl<T, A: Unsize<[T]>> FixedSizeArray<T> for A {
src/libcore/cell.rs:unsafe impl<T> Send for Cell<T> where T: Send {}
src/libcore/cell.rs:unsafe impl<T: ?Sized> Send for RefCell<T> where T: Send {}
src/libcore/marker.rs: unsafe impl<'a, T: Sync + ?Sized> Send for &'a T {}
src/libcore/marker.rs: unsafe impl<'a, T: Send + ?Sized> Send for &'a mut T {}
src/libcore/nonzero.rs:unsafe impl<T:?Sized> Zeroable for *const T {}
src/libcore/nonzero.rs:unsafe impl<T:?Sized> Zeroable for *mut T {}
src/libcore/nonzero.rs:unsafe impl Zeroable for isize {}
src/libcore/nonzero.rs:unsafe impl Zeroable for usize {}
src/libcore/nonzero.rs:unsafe impl Zeroable for i8 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for u8 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for i16 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for u16 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for i32 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for u32 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for i64 {}
src/libcore/nonzero.rs:unsafe impl Zeroable for u64 {}
src/libcore/ptr.rs:unsafe impl<T: Send + ?Sized> Send for Unique<T> { }
src/libcore/ptr.rs:unsafe impl<T: Sync + ?Sized> Sync for Unique<T> { }
src/libcore/raw.rs:unsafe impl<T> Repr<Slice<T>> for [T] {}
src/libcore/raw.rs:unsafe impl Repr<Slice<u8>> for str {}
src/libcore/slice.rs:unsafe impl<'a, T: Sync> Sync for Iter<'a, T> {}
src/libcore/slice.rs:unsafe impl<'a, T: Sync> Send for Iter<'a, T> {}
src/libcore/slice.rs:unsafe impl<'a, T: Sync> Sync for IterMut<'a, T> {}
src/libcore/slice.rs:unsafe impl<'a, T: Send> Send for IterMut<'a, T> {}
src/libcore/str/pattern.rs:unsafe impl<'a, C: CharEq> Searcher<'a> for CharEqSearcher<'a, C> {
src/libcore/str/pattern.rs:unsafe impl<'a, C: CharEq> ReverseSearcher<'a> for CharEqSearcher<'a, C> {
src/libcore/str/pattern.rs:unsafe impl<'a> Searcher<'a> for CharSearcher<'a> {
src/libcore/str/pattern.rs:unsafe impl<'a> ReverseSearcher<'a> for CharSearcher<'a> {
src/libcore/str/pattern.rs:unsafe impl<'a, 'b> Searcher<'a> for CharSliceSearcher<'a, 'b> {
src/libcore/str/pattern.rs:unsafe impl<'a, 'b> ReverseSearcher<'a> for CharSliceSearcher<'a, 'b> {
src/libcore/str/pattern.rs:unsafe impl<'a, F> Searcher<'a> for CharPredicateSearcher<'a, F>
src/libcore/str/pattern.rs:unsafe impl<'a, F> ReverseSearcher<'a> for CharPredicateSearcher<'a, F>
src/libcore/str/pattern.rs:unsafe impl<'a, 'b> Searcher<'a> for StrSearcher<'a, 'b> {
src/libcore/str/pattern.rs:unsafe impl<'a, 'b> ReverseSearcher<'a> for StrSearcher<'a, 'b> {
src/libcore/sync/atomic.rs:unsafe impl Sync for AtomicBool {}
src/libcore/sync/atomic.rs:unsafe impl Sync for AtomicIsize {}
src/libcore/sync/atomic.rs:unsafe impl Sync for AtomicUsize {}
src/libcore/sync/atomic.rs:unsafe impl<T> Send for AtomicPtr<T> {}
src/libcore/sync/atomic.rs:unsafe impl<T> Sync for AtomicPtr<T> {}
src/librustc/diagnostics.rs:unsafe impl<T> Sync for NotThreadSafe<T> {}
src/librustc_trans/back/msvc/registry.rs:unsafe impl Sync for RegistryKey {}
src/librustc_trans/back/msvc/registry.rs:unsafe impl Send for RegistryKey {}
src/librustc_trans/back/write.rs:unsafe impl Send for ModuleConfig { }
src/librustc_trans/trans/mod.rs:unsafe impl Send for ModuleTranslation { }
src/librustc_trans/trans/mod.rs:unsafe impl Sync for ModuleTranslation { }
src/libstd/collections/hash/table.rs:unsafe impl<K: Send, V: Send> Send for RawTable<K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<K: Sync, V: Sync> Sync for RawTable<K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<'a, K: Sync, V: Sync> Sync for Iter<'a, K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<'a, K: Sync, V: Sync> Send for Iter<'a, K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<'a, K: Sync, V: Sync> Sync for IterMut<'a, K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<'a, K: Send, V: Send> Send for IterMut<'a, K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<K: Sync, V: Sync> Sync for IntoIter<K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<K: Send, V: Send> Send for IntoIter<K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<'a, K: Sync, V: Sync> Sync for Drain<'a, K, V> {}
src/libstd/collections/hash/table.rs:unsafe impl<'a, K: Send, V: Send> Send for Drain<'a, K, V> {}
src/libstd/io/lazy.rs:unsafe impl<T> Sync for Lazy<T> {}
src/libstd/sync/mpsc/blocking.rs:unsafe impl Send for Inner {}
src/libstd/sync/mpsc/blocking.rs:unsafe impl Sync for Inner {}
src/libstd/sync/mpsc/mod.rs:unsafe impl<T: Send> Send for Receiver<T> { }
src/libstd/sync/mpsc/mod.rs:unsafe impl<T: Send> Send for Sender<T> { }
src/libstd/sync/mpsc/mod.rs:unsafe impl<T: Send> Send for SyncSender<T> {}
src/libstd/sync/mpsc/mpsc_queue.rs:unsafe impl<T: Send> Send for Queue<T> { }
src/libstd/sync/mpsc/mpsc_queue.rs:unsafe impl<T: Send> Sync for Queue<T> { }
src/libstd/sync/mpsc/spsc_queue.rs:unsafe impl<T: Send> Send for Queue<T> { }
src/libstd/sync/mpsc/spsc_queue.rs:unsafe impl<T: Send> Sync for Queue<T> { }
src/libstd/sync/mpsc/sync.rs:unsafe impl<T: Send> Send for Packet<T> { }
src/libstd/sync/mpsc/sync.rs:unsafe impl<T: Send> Sync for Packet<T> { }
src/libstd/sync/mpsc/sync.rs:unsafe impl<T: Send> Send for State<T> {}
src/libstd/sync/mpsc/sync.rs:unsafe impl Send for Node {}
src/libstd/sync/mutex.rs:unsafe impl<T: ?Sized + Send> Send for Mutex<T> { }
src/libstd/sync/mutex.rs:unsafe impl<T: ?Sized + Send> Sync for Mutex<T> { }
src/libstd/sync/mutex.rs:unsafe impl Sync for Dummy {}
src/libstd/sync/mutex.rs: unsafe impl<T: Send> Send for Packet<T> {}
src/libstd/sync/mutex.rs: unsafe impl<T> Sync for Packet<T> {}
src/libstd/sync/rwlock.rs:unsafe impl<T: ?Sized + Send + Sync> Send for RwLock<T> {}
src/libstd/sync/rwlock.rs:unsafe impl<T: ?Sized + Send + Sync> Sync for RwLock<T> {}
src/libstd/sync/rwlock.rs:unsafe impl Sync for Dummy {}
src/libstd/sys/common/mutex.rs:unsafe impl Sync for Mutex {}
src/libstd/sys/common/net.rs:unsafe impl Sync for LookupHost {}
src/libstd/sys/common/net.rs:unsafe impl Send for LookupHost {}
src/libstd/sys/common/poison.rs:unsafe impl Send for Flag {}
src/libstd/sys/common/poison.rs:unsafe impl Sync for Flag {}
src/libstd/sys/common/remutex.rs:unsafe impl<T: Send> Send for ReentrantMutex<T> {}
src/libstd/sys/common/remutex.rs:unsafe impl<T: Send> Sync for ReentrantMutex<T> {}
src/libstd/sys/unix/condvar.rs:unsafe impl Send for Condvar {}
src/libstd/sys/unix/condvar.rs:unsafe impl Sync for Condvar {}
src/libstd/sys/unix/fs.rs:unsafe impl Send for Dir {}
src/libstd/sys/unix/fs.rs:unsafe impl Sync for Dir {}
src/libstd/sys/unix/mutex.rs:unsafe impl Send for Mutex {}
src/libstd/sys/unix/mutex.rs:unsafe impl Sync for Mutex {}
src/libstd/sys/unix/mutex.rs:unsafe impl Send for ReentrantMutex {}
src/libstd/sys/unix/mutex.rs:unsafe impl Sync for ReentrantMutex {}
src/libstd/sys/unix/rwlock.rs:unsafe impl Send for RWLock {}
src/libstd/sys/unix/rwlock.rs:unsafe impl Sync for RWLock {}
src/libstd/sys/unix/thread.rs:unsafe impl Send for Thread {}
src/libstd/sys/unix/thread.rs:unsafe impl Sync for Thread {}
src/libstd/sys/windows/condvar.rs:unsafe impl Send for Condvar {}
src/libstd/sys/windows/condvar.rs:unsafe impl Sync for Condvar {}
src/libstd/sys/windows/fs.rs:unsafe impl Send for FindNextFileHandle {}
src/libstd/sys/windows/fs.rs:unsafe impl Sync for FindNextFileHandle {}
src/libstd/sys/windows/handle.rs:unsafe impl Send for RawHandle {}
src/libstd/sys/windows/handle.rs:unsafe impl Sync for RawHandle {}
src/libstd/sys/windows/mutex.rs:unsafe impl Send for Mutex {}
src/libstd/sys/windows/mutex.rs:unsafe impl Sync for Mutex {}
src/libstd/sys/windows/mutex.rs:unsafe impl Send for ReentrantMutex {}
src/libstd/sys/windows/mutex.rs:unsafe impl Sync for ReentrantMutex {}
src/libstd/sys/windows/rwlock.rs:unsafe impl Send for RWLock {}
src/libstd/sys/windows/rwlock.rs:unsafe impl Sync for RWLock {}
src/libstd/thread/local.rs: unsafe impl<T> ::marker::Sync for Key<T> { }
src/libstd/thread/local.rs: unsafe impl<T> ::marker::Sync for Key<T> { }
src/libstd/thread/mod.rs:unsafe impl<T: Send> Send for Packet<T> {}
src/libstd/thread/mod.rs:unsafe impl<T: Sync> Sync for Packet<T> {}
src/libstd/thread/scoped_tls.rs: unsafe impl<T> ::marker::Sync for KeyInner<T> { }
src/libstd/thread/scoped_tls.rs: unsafe impl<T> marker::Sync for KeyInner<T> { }
And it would be impossible for safe threading primitives to be efficiently implemented outside of std (e.g. crossbeam), or for any unsafe code outside std to declare that it is indeed thread-safe (e.g. contain-rs).