107 wires and counting
$ status: archived — this briefing has stopped; the archive stays readable. browse live briefings →

$ status

wire 2026-09-11
stories 142

© 2026 RepoJournal Home Showcase How it works Privacy

$ the-wire · showcase

R8 obfuscation defaults flip in .NET 11, MAUI navigation test de-flaked, Roslyn tracks per-project loads

By RepoJournal · Filed · About .NET · Composed from the cited sources · methodology

dotnet/android adds a configurable $(AndroidR8ObfuscationMode) property and turns on selective Java obfuscation and R8 optimization by default in .NET 11, the day's most consequential change for anyone shipping Android apps.

dotnet/android made R8 behavior configurable with the public $(AndroidR8ObfuscationMode) build property and enabled selective Java obfuscation and R8 optimization by default in .NET 11 [1]. The default differs from .NET 10, where the disabled mode preserved all Java names and used the legacy non-optimizing configuration; under private-members, private and package-private members may be renamed [1]. This is a breaking change for apps that reflected over private Java members or relied on preserved names, so pin $(AndroidR8ObfuscationMode) to disabled if you depend on that.

On the same repo, simonrozsival's typemap work streams typemap fingerprints and PE output, a dependent change on top of #12599 that retries optimization ideas an earlier experimental pass rejected [2][3]. Candidates were benchmarked parent-vs-candidate in alternating fresh processes against the real Microsoft.Android.Ref.36 Mono.Android.dll plus fixture workloads, on both the changed and unchanged incremental paths; three changes cleared the bar and three did not [2]. A separate CI fix isolates the JavaSideActivation GREF leak check as an explicit JniReferenceLeak test, running that category in a dedicated JcwGen instrumentation process separate from the ordinary 38-test suite and warming 100 Java-side activations while requiring no positive net GREF growth [4]. MockBuildEngine's optional warning constructor was restored after its removal broke rewriter test fixtures with CS1729 and CS0103 [5].

dotnet/runtime removed CoreCLR PAL semaphore support: Unix System.Threading.Semaphore now uses the managed wait subsystem, and metadata's legacy UTSemReadWrite was the remaining PAL consumer [6]. The change adds a minipal read-write lock backed by SRWLOCK on Windows and pthread_rwlock_t elsewhere, requesting writer preference where supported [6]. Separately, SIMD complement and scalar FMA folding was fixed to preserve upper lanes, with regression coverage for both comparison paths and scalar FMA variants, closing three tracked issues [7]. Packaging gained a check for the maximum possible size of [Content_Types].xml to prevent memory exhaustion when opening malformed packages [8].

In dotnet/fsharp, Array2D.create and Array2D.init used to route through createBased 0 0 and initBased 0 0, hitting Array.CreateInstance, which is RequiresDynamicCode; they now allocate with zeroCreate, which emits newarr.multi, so a NativeAOT publish touching a zero-based 2D array no longer emits an IL3050 inside FSharp.Core that consumers could not suppress [9]. Nothing is deprecated and no signatures changed, so fsharp/fslang-suggestions#1454 does not need the deprecation it proposed [9]. MicroPerf work inlined the static-abstract interface-constraint predicate, adding ListInline.iter2 and ListInline.exists to drop per-node closure allocations in post-inference type checking [10]. On dotnet/roslyn, LanguageServerProjectLoader now tracks per-project load completion so callers can await only the projects they requested; paths are normalized and compared with platform semantics to prevent duplicate loads [11]. LSP 3.18 protocol updates landed [12], and empty definition, type-definition, reference, and implementation responses now emit telemetry to help diagnose invalid or off-by-one source positions [13].

Action items

References

  1. [1] [r8] Add configurable private-member obfuscation and optimization (#12668) ↗ dotnet/android
  2. [2] [typemap] Stream typemap fingerprints and PE output (#12602) ↗ dotnet/android
  3. [3] [typemap] Stream typemap fingerprints and PE output ↗ dotnet/android
  4. [4] [flaky-ci] Isolate JavaSideActivation GREF leak check (#12716) ↗ dotnet/android
  5. [5] [tests] Restore MockBuildEngine warning constructor (#12755) ↗ dotnet/android
  6. [6] Remove CoreCLR PAL semaphore support (#132636) ↗ dotnet/runtime
  7. [7] Fix SIMD complement and scalar FMA folding ↗ dotnet/runtime
  8. [8] Add check for maximum possible size for [Content_Types].xml in Packaging ↗ dotnet/runtime
  9. [9] Make zero-based Array2D allocation AOT-clean ↗ dotnet/fsharp
  10. [10] [MicroPerf] Inline the static-abstract interface-constraint predicate (#20374) ↗ dotnet/fsharp
  11. [11] Track per-project load completion in LanguageServerProjectLoader ↗ dotnet/roslyn
  12. [12] LSP 3.18 protocol updates ↗ dotnet/roslyn
  13. [13] Add empty result to LSP request telemetry ↗ dotnet/roslyn

Quick answers

What shipped in .NET on September 11, 2026?
dotnet/android adds a configurable $(AndroidR8ObfuscationMode) property and turns on selective Java obfuscation and R8 optimization by default in .NET 11, the day's most consequential change for anyone shipping Android apps. In total, 70 commits and 72 pull requests landed.
Who contributed to .NET on September 11, 2026?
14 developers shipped this update, including github-actions, Šimon Rozsíval, Jonathan Peppers, T-Gro, nojaf, dotnet-maestro, Jeremy Koritzinsky, and tannergooding, and 6 more.
What were the notable .NET updates?
[r8] Add configurable private-member obfuscation and optimization (#12668), [typemap] Stream typemap fingerprints and PE output (#12602), and [typemap] Stream typemap fingerprints and PE output.