What's Changed
- Run the distro validation script daily by @OneBlue in #40920
- Added WSLc API docs by @craigloewen-msft in #40922
- Add a script to validate & fix mismatches CRLF in the repo by @OneBlue in #40933
- Remove '.' from HCS suffix by @OneBlue in #40946
- fix socket channel set exit events by @chemwolf6922 in #40924
- Use strict detection of http line ending for docker response by @yao-msft in #40932
- CLI: Fix hang with exec/run -i with self-exiting command and open stdin by @dkbennett in #40921
- Don't append the build prefix when a line is being continued from a previous log entry by @OneBlue in #40947
- Implement --stop-timeout in wslc create|run and support -1 (infinite) timeouts by @OneBlue in #40919
- fix: use lowercased key when validating windowsterminal.profileTemplate by @Osamaali313 in #40911
- Use throwing overloads in SetupTestDirectory by @beena352 in #40964
- Publish the WSLC nuget package on github releases by @OneBlue in #40962
- Support arbitrary network driver options in wslc network create by @beena352 in #40859
- Fix various issues in the virtionet tests by @OneBlue in #40963
- Don't use an overlay for the gpu libraries if the inbox folder isn't present by @OneBlue in #40969
- Fix Lost sub directory structure when mapping to a VHD volume by @kvega005 in #40857
- Add support for callback when loading images and display loaded images in wslc image load by @OneBlue in #40960
- Bump Kali to 2026.2 by @g0tmi1k in #40982
- Fix https proxy not set when pac is used by @chemwolf6922 in #40950
- Fix E_ACCESSDENIED during download if temp is hidden by @chemwolf6922 in #40708
- Add configurable storage path for the default wslc session by @benhillis in #40956
- Added samples to the API by @craigloewen-msft in #40930
- Document what the session creation parameters do, and which of them ae visible to all users on the machine by @OneBlue in #41020
- fix(l10n): add localization guidance comments for commonly mistranslated terms by @yeelam-gordon in #14440
- Cap storage hw queue count to 4 by @chemwolf6922 in #40975
- test(drvfs): add O_APPEND ftruncate coverage, skip on virtiofs by @benhillis in #41032
- Update validate-line-endings.py to not depend on pip packages by @OneBlue in #41022
- Fix potential use-after-free on the container deletion path by @OneBlue in #41018
- Remove comment in packages.config causing powershell parsing error by @OneBlue in #41036
- Collect WSLg logs and crash dumps in collect-wsl-logs.ps1 by @benhillis in #40913
- Log an error when connect() fails in the NAT mode relay by @OneBlue in #41033
- Mark routes via a link-local gateway as onlink to fix VPN /32 networking failures by @benhillis in #41003
- Add wslc network connect and disconnect commands by @beena352 in #41011
- Fix flaky E2E network list test assertion by @beena352 in #41009
- Add support for container healthchecks by @OneBlue in #41012
- Bump DeviceHost to 1.2.48-0 and enable virtiofs O_APPEND ftruncate test by @benhillis in #41044
- Read /etc/locale.conf when configuring the distro locale by @i4M1k0SU in #40940
- Retry to delete WSL distribution shortcut for up to 10 seconds by @OneBlue in #41046
- Make the release pipeline logic to push to the store optional (and disabled by default) by @OneBlue in #41045
- Add wslc container cp command for tar archive upload by @ptrivedi in #40835
- Pre-download socat to avoid test failing due to connectivity issues by @OneBlue in #41035
- Enable rollback on install failures during update by @yeelam-gordon in #40524
- CLI: Help improvements - Table output with color and routing support by @dkbennett in #40848
- Fix: handle partial write in stdio forwarding by @chemwolf6922 in #41065
- Protect critical WSL processes under heavy load with cgroup & isolate distro cgroups by @chemwolf6922 in #40519
- Localization change from build: 152044029 by @OneBlue in #41066
- Add --format option to wslc version command by @ggarzia-MSFT in #41078
- Add missing error code mappings found in user visible errors by @chemwolf6922 in #41074
- Refine CODEOWNERS for WSLC by @benhillis in #41079
- Start the plan9 server on WSL2 even when automount and mountFsTab are… by @Lsseeker in #41057
- Remove hard-coded password from C# API docs by @benhillis in #41098
- Simplify e2e build-test image cleanup with per-test RAII ownership by @ggarzia-MSFT in #41094
- Use bespoke interfaces to communicate with wsldevicehost by @Brian-Perkins in #41099
- CLI: Update all non-help output to use Reporter by @dkbennett in #41010
- CLI: Route wslc warnings through Reporter by @dkbennett in #41111
- Fix cgmanifest.json hash format and add type:git entries for NOTICE generation by @beena352 in #41025
- Update .NET runtime packages to 10.0.10 by @benhillis in #41127
- Use single virtiofs device for all shares by @damanm24 in #41129
- Bump Linux SDK to 1.23.0 and guard char->wide formatters to Windows by @benhillis in #41071
- Fix MoveDistribution VHD ownership restore to reuse the resolved file handle by @benhillis in #41131
- Add --ip, --link, --link-local-ip, --driver-opt, --network-alias flag… by @beena352 in #41070
- CLI: Add quiet support to pull and align with Docker by @dkbennett in #41121
- WSLC: Add UDP and IPv6 support for exposed image ports by @dkbennett in #41124
- CLI: Make container id required for stop command by @dkbennett in #41108
- Fix various issues in the distro validation script by @OneBlue in #41141
- Handle offlink default gateways in GNS by @benhillis in #41130
- Fix spurious ERROR log for unsupported optional cgroup controllers by @benhillis in #41122
- Retry to delete distribution VHD for up to 10 seconds by @OneBlue in #41153
- Bump gitpython from 3.1.50 to 3.1.52 in /tools/devops by @dependabot[bot] in #41159
- Track implicit autobind ports from listen() in Consomme networking by @benhillis in #41125
- Fix a teardown race in HttpProxyStateTracker by @benhillis in #41097
- Update GitHub Actions workflow for issue comments by @piercosta in #41142
- virtiofs: Use aggregate share feature in WSLC by @damanm24 in #41151
- Fix recurring TSA onboarding failure in release builds by @benhillis in #41167
- WSLC: Refactor ParseImage and ParseRepository (PR Feedback followup) by @dkbennett in #41154
- Update Tumbleweed v20260724.0 by @sbradnick in #41168
- Use an azure key vault to store Github tokens for automated pull requests & release creation by @OneBlue in #41158
- Improve WSL2 guest memory reclaim by @benhillis in #41096
- CLI: Align WSLC argument parser with Docker flag and value semantics by @dkbennett in #41160
- fixed title error visibility by @shuaiyuanxx in #41118
- Follow up to the cgroup PR #40519 by @chemwolf6922 in #41073
- Use 4 request queues for aggregate virtiofs devices by @benhillis in #41169
- Address memory reclaim follow-ups from #41096 by @benhillis in #41171
- Add --ip-range option to network create by @beena352 in #41138
- wslc: switch image build from docker build to docker buildx build by @beena352 in #41133
- Serialize move/resize/set-sparse against in-progress conversions by @benhillis in #41170
- Pin .resw files to CRLF via .gitattributes by @benhillis in #41186
- Use RetryWithTimeout for ManageRejectedWhileLocked lock wait by @benhillis in #41188
- WSLC SDK install API update by @JohnMcPMS in #40949
- Use canonical path when copying files from containers by @OneBlue in #41190
- Add a 'Error information from the engine:' prefix to error messages returned from docker when the current display language is not english by @OneBlue in #41187
- Add --secret flag to image build command by @ggarzia-MSFT in #41106
- Auth API update by @JohnMcPMS in #41197
- Validate error message in NetworkCreateInvalidIpRangeTest by @beena352 in #41198
- Cap guest usage of host ephemeral range to half of the ports in mirrored mode by @FetoiuCatalin in #41085
- Add CSV parsing helpers to shared string library by @ggarzia-MSFT in #41207
- WSLc Container Open SDK support by @JohnMcPMS in #41199
- Add comment about support floor by @JohnMcPMS in #41219
- Add missing image build options in nuget by @chemwolf6922 in #41037
- Fix: add systemd unit to make /mnt/wsl recursive slave before umount by @chemwolf6922 in #41086
- Warn before opening downloaded WSL distributions by @benhillis in #41214
- archlinux: Release 2026.08.01.174141 by @archlinux-github in #41225
- CLI: Unify interactive input and output in Reporter by @dkbennett in #41215
- Add --output flag to wslc build by @ggarzia-MSFT in #41157
- CLI: Fix UTF-8 encoding in non-tty relay use by @dkbennett in #41235
- Add a UserConfig setting to use local wsldevicehost binaries instead of the nuget package by @OneBlue in #41241
- Added outcome telemetry for cold start by @shuaiyuanxx in #41200
- Use explicit tokens for user registry access by @benhillis in #41245
- Fix minor issues found during code review by @chemwolf6922 in #41104
- Fix: Un-escape the value before setting LANG by @chemwolf6922 in #41103
- fix: port 0 tracking not working for threads by @chemwolf6922 in #41051
- wslc: idle-terminate inactive per-user session VMs by @benhillis in #41077
- Implement skipped wslc E2E test by @AmelBawa-msft in #41243
- wslc: Run saved state cleanup as user by @benhillis in #41259
- Add timeout to create process accepts by @chemwolf6922 in #41252
- Add version resource to wslc.exe by @AmelBawa-msft in #41266
- Bind KdRelay to loopback by @benhillis in #41260
- virtionet: send runtime updates to network device by @Brian-Perkins in #41263
- Update SLE 16.0 for QU3 by @sbradnick in #41262
- wslc: emit --format json output on a single line by @AmelBawa-msft in #41268
- Inherit image labels on containers by @beena352 in #41246
- Update GitPython to 3.1.58 by @OneBlue in #41275
- Retry distro file deletion under ACCESS_DENIED during distro unregistration by @OneBlue in #41274
- Added keep alive setting by @craigloewen-msft in #41109
- Enable unity builds for wsltests by @ggarzia-MSFT in #41247
- Normalize NULL char* to in Linux logging by @chemwolf6922 in #41271
- Fix: Update plan9 registration with the new default uid after OOBE by @chemwolf6922 in #40977
- Add --volumes option to wslc container rm command by @AmelBawa-msft in #41265
- Add --iidfile to wslc image build by @ggarzia-MSFT in #41212
- Add support for host loopback by @OneBlue in #41264
- Add pipeline stage to produce DCAT submission files by @florelis in #41236
- Add registry allowlist support to image builds by @beena352 in #41211
- Extend line ending validator to cover cmake files by @ggarzia-MSFT in #41289
- CLI: Rename Reporter class to Terminal by @dkbennett in #41276
- CLI: Cache converted CLI arguments with on-demand revalidation, and unify typed value accessors by @dkbennett in #41189
- Fix default route classification logic by @chemwolf6922 in #41278
- Fix force shutdown deadlock race by @chemwolf6922 in #41269
- Notice change from build: 154365024 by @OneBlue in #41298
- wslc: emit list command --format json output as one object per line by @AmelBawa-msft in #41280
- CLI: Add --pull option to container create and run by @dkbennett in #41304
- CLI: Make argument validation idempotent and adjust global argument freezing by @dkbennett in #41305
- Update Microsoft.WSL.DeviceHost to 1.2.60 by @OneBlue in #41292
- Address review follow-up on WSLContainerRegistryAllowlist policy by @beena352 in #41306
- Restore pipeline logic to push updates to the store by default by @OneBlue in #41308
- Fix unqualified WEX::Logging::Log breaking release builds by @OneBlue in #41315
- Fix excessive /proc//mountinfo query in p9 server by @chemwolf6922 in #41312
- mountutil: skip empty tokens in mount option parser by @Eamon2009 in #41311
- Add wsldevicehostproxystub.dll to the list of target to build during release builds by @OneBlue in #41317
- Make paths absolute before weakly_canonical and add regression tests by @ggarzia-MSFT in #41290
- add --progress to wslc build by @ggarzia-MSFT in #41307
- Enable Unity build for wslclib and enable CI unity builds by @ggarzia-MSFT in #41302
- Retry deleting distribution shortcuts for 10 seconds by @OneBlue in #41329
- Draft: add manual VHDX compaction command for stopped WSL distros by @Guayamose in #40481
- Mount plugin folders on behalf of the user owning the wsl session by @OneBlue in #41331
- Update Microsoft.NETCore.App.Runtime to 10.0.11 by @OneBlue in #41332
- Report cached build steps in wslc build output by @ggarzia-MSFT in #41334
- Notice change from build: 154708324 by @OneBlue in #41340
- Localization change from build: 154739322 by @OneBlue in #41341
- Pin GitHub Actions to full-length commit SHAs by @danfiedler-msft in #41325
- Add Config.Image on container inspect by @beena352 in #41336
- Support Docker-style network aliases in wslc by @danegsta in #40972
- Use alpine instead of debian for registry push/pull test payloads by @ggarzia-MSFT in #41338
- CLI: Align network list command to be consistent with Docker behavior by @dkbennett in #41350
- CLI: Set defaults for signal arguments in stop/kill commands, update help documentation by @dkbennett in #41348
- Bump the github-actions group with 3 updates by @dependabot[bot] in #41347
- Simplify VHD ownership handling during distribution moves by @benhillis in #41333
- Return non vhd volumes in container inspect by @OneBlue in #41335
- Preserve token owner during distribution move rollback by @benhillis in #41355
- Add --filter support to wslc network list by @beena352 in #41318
- CLI: Help polish & add short, relevant help for usage/argument errors by @dkbennett in #41316
- CLI: Fix shm-size and all text-to-byte size conversion and align them all to Docker by @dkbennett in #41360
- Move Docker call outside network lock by @beena352 in #41362
- Add --filter support to volume list by @beena352 in #41359
- CLI: Add --mount support for create and run by @dkbennett in #41337
- Fix potential spin in interop message relay by @chemwolf6922 in #41319
- Treat EFSBADCRC as disk corruption by @chemwolf6922 in #41368
- Warn the user if VMP is not installed when create instance fails by @chemwolf6922 in #41357
- Use canonical path in DrvfsMountManyVirtioFsShares by @OneBlue in #41371
- Localization change from build: 155144781 by @OneBlue in #41372
- wslc: match docker output format for image list by @ggarzia-MSFT in #41369
- Unmount the distribution before completing import by @OneBlue in #41370
- Add a script to collect WSL logs in a loop by @OneBlue in #41240
- Make sure that message structures are correctly zero-initialized by @benhillis in #41373
- Add --ip flag to container create and run by @beena352 in #41374
- Accept ERROR_SUCCESS_REBOOT_REQUIRED in the installer tests by @OneBlue in #41389
- Split WSLCCreateSession event by @craigloewen-msft in #41327
- Match docker's network list, inspect and prune output in wslc by @ggarzia-MSFT in #41377
- Use unified kernel artifacts VHD layout by @benhillis in #41267
- Make DrvFs initialization callback lifetime-safe by @benhillis in #41218
- Cache container images during tests to prevent unnecessary loading by @ggarzia-MSFT in #41353
- Add ADMX policy for privileged WSL container support by @benhillis in #41401
- Fix: Reattach stale cached device after backing volume is reattached by @chemwolf6922 in #41379
- Propagate LaunchInit error code by @chemwolf6922 in #41380
- Add timeout for udp dns requests to avoid resource leak by @chemwolf6922 in #41395
- Align wslc volume inspect and prune output with docker by @ggarzia-MSFT in #41404
- Fix incorrect string -> wstring conversion, causing utf16 corruption by @OneBlue in #41406
- Create a script to generate the Microsoft.WSL.TestData nuget package by @OneBlue in #41405
- Enable discard for WSLc volumes by @JohnMcPMS in #41411
- Poll for the result of operations during MSI installation by @OneBlue in #41415
New Contributors
- @Osamaali313 made their first contribution in #40911
- @i4M1k0SU made their first contribution in #40940
- @Lsseeker made their first contribution in #41057
- @dependabot[bot] made their first contribution in #41159
- @piercosta made their first contribution in #41142
- @Guayamose made their first contribution in #40481
- @danfiedler-msft made their first contribution in #41325
- @danegsta made their first contribution in #40972
Full Changelog: 2.9.3...2.9.8