Linux and Android now build. Queue relied on an Equatable conformance synthesized from its stored DispatchQueue, which is not Equatable in swift-corelibs-foundation. The conformance is now written out as kind equality plus identity of the underlying queue, which reproduces the previous Darwin behaviour exactly. PTHREAD_MUTEX_NORMAL and PTHREAD_MUTEX_RECURSIVE are imported as Int on Glibc and Bionic but as Int32 on Darwin, so both call sites now wrap them in Int32(...).
Mutexing.sync(_:) and Mutexing.trySync(_:) moved out of the protocol's requirement list into extension Mutexing where Value: Sendable. They were declared as func sync<R, V>(...) where R: Sendable, V: Sendable, V == Value, and the same-type constraint turned V: Sendable into an added constraint on Self.Value — something Swift diagnoses as a warning today and will reject in a future language mode. Their availability is unchanged: both remain reachable only when Value conforms to Sendable. Conforming types no longer implement them and inherit the extension instead, which removes roughly 200 lines of duplication.
One behavioural consequence: AtomicValue.trySync(_:) used to forward to innerValue.sync(_:) and therefore blocked. It now reaches trySyncUnchecked(_:) through the extension and is genuinely non-blocking, matching both its name and its Optional return type.
The unchecked dynamicallyCall(withArguments:) overload taking [() throws -> R] and returning R? has been removed and replaced by one returning R. The old overload forwarded to trySyncUnchecked(_:), so try mutex { ... } could silently skip the closure and return nil under contention while all seven sibling overloads block. This is source-breaking for callers that bound the optional result.
SyncMutex is now Sendable. Its own file declared extension QueueBarrier: @unchecked Sendable {}, duplicating the conformance QueueBarrier already declares in its own file and leaving SyncMutex without one. Swift 6.1 rejects the duplicate outright, while 6.2 and 6.3 do not diagnose it, which is why it went unnoticed on Apple platforms. The conformance is checked rather than @unchecked: SyncMutex is a final class whose only stored property is a Sendable mutex, so the compiler can verify it.
Both Locking.dynamicallyCall(withArguments:) overloads gained @discardableResult. The module now builds without warnings.