2.9.8
Pre-release
Pre-release
What's Changed
- Run the distro validation script daily by Blue (@OneBlue) in #40920
- Added WSLc API docs by Craig Loewen (@craigloewen-msft) in #40922
- Add a script to validate & fix mismatches CRLF in the repo by Blue (@OneBlue) in #40933
- Remove '.' from HCS suffix by Blue (@OneBlue) in #40946
- fix socket channel set exit events by Feng Wang (@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 David Bennett (@dkbennett) in #40921
- Don't append the build prefix when a line is being continued from a previous log entry by Blue (@OneBlue) in #40947
- Implement --stop-timeout in wslc create|run and support -1 (infinite) timeouts by Blue (@OneBlue) in #40919
- fix: use lowercased key when validating windowsterminal.profileTemplate by Syed Osama Ali Shah (@Osamaali313) in #40911
- Use throwing overloads in SetupTestDirectory by beena352 in #40964
- Publish the WSLC nuget package on github releases by Blue (@OneBlue) in #40962
- Support arbitrary network driver options in wslc network create by beena352 in #40859
- Fix various issues in the virtionet tests by Blue (@OneBlue) in #40963
- Don't use an overlay for the gpu libraries if the inbox folder isn't present by Blue (@OneBlue) in #40969
- Fix Lost sub directory structure when mapping to a VHD volume by Kevin Vega (@kvega005) in #40857
- Add support for callback when loading images and display loaded images in wslc image load by Blue (@OneBlue) in #40960
- Bump Kali to 2026.2 by g0tmi1k (@g0tmi1k) in #40982
- Fix https proxy not set when pac is used by Feng Wang (@chemwolf6922) in #40950
- Fix E_ACCESSDENIED during download if temp is hidden by Feng Wang (@chemwolf6922) in #40708
- Add configurable storage path for the default wslc session by Ben Hillis (@benhillis) in #40956
- Added samples to the API by Craig Loewen (@craigloewen-msft) in #40930
- Document what the session creation parameters do, and which of them ae visible to all users on the machine by Blue (@OneBlue) in #41020
- fix(l10n): add localization guidance comments for commonly mistranslated terms by Gordon Lam (@yeelam-gordon) in #14440
- Cap storage hw queue count to 4 by Feng Wang (@chemwolf6922) in #40975
- test(drvfs): add O_APPEND ftruncate coverage, skip on virtiofs by Ben Hillis (@benhillis) in #41032
- Update validate-line-endings.py to not depend on pip packages by Blue (@OneBlue) in #41022
- Fix potential use-after-free on the container deletion path by Blue (@OneBlue) in #41018
- Remove comment in packages.config causing powershell parsing error by Blue (@OneBlue) in #41036
- Collect WSLg logs and crash dumps in collect-wsl-logs.ps1 by Ben Hillis (@benhillis) in #40913
- Log an error when connect() fails in the NAT mode relay by Blue (@OneBlue) in #41033
- Mark routes via a link-local gateway as onlink to fix VPN /32 networking failures by Ben Hillis (@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 Blue (@OneBlue) in #41012
- Bump DeviceHost to 1.2.48-0 and enable virtiofs O_APPEND ftruncate test by Ben Hillis (@benhillis) in #41044
- Read /etc/locale.conf when configuring the distro locale by i4M1k0SU (@i4M1k0SU) in #40940
- Retry to delete WSL distribution shortcut for up to 10 seconds by Blue (@OneBlue) in #41046
- Make the release pipeline logic to push to the store optional (and disabled by default) by Blue (@OneBlue) in #41045
- Add wslc container cp command for tar archive upload by Pooja Trivedi (@ptrivedi) in #40835
- Pre-download socat to avoid test failing due to connectivity issues by Blue (@OneBlue) in #41035
- Enable rollback on install failures during update by Gordon Lam (@yeelam-gordon) in #40524
- CLI: Help improvements - Table output with color and routing support by David Bennett (@dkbennett) in #40848
- Fix: handle partial write in stdio forwarding by Feng Wang (@chemwolf6922) in #41065
- Protect critical WSL processes under heavy load with cgroup & isolate distro cgroups by Feng Wang (@chemwolf6922) in #40519
- Localization change from build: 152044029 by Blue (@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 Feng Wang (@chemwolf6922) in #41074
- Refine CODEOWNERS for WSLC by Ben Hillis (@benhillis) in #41079
- Start the plan9 server on WSL2 even when automount and mountFsTab are⦠by Shuo Li (@Lsseeker) in #41057
- Remove hard-coded password from C# API docs by Ben Hillis (@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 (@Brian-Perkins) in #41099
- CLI: Update all non-help output to use Reporter by David Bennett (@dkbennett) in #41010
- CLI: Route wslc warnings through Reporter by David Bennett (@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 Ben Hillis (@benhillis) in #41127
- Use single virtiofs device for all shares by Daman Mulye (@damanm24) in #41129
- Bump Linux SDK to 1.23.0 and guard char->wide formatters to Windows by Ben Hillis (@benhillis) in #41071
- Fix MoveDistribution VHD ownership restore to reuse the resolved file handle by Ben Hillis (@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 David Bennett (@dkbennett) in #41121
- WSLC: Add UDP and IPv6 support for exposed image ports by David Bennett (@dkbennett) in #41124
- CLI: Make container id required for stop command by David Bennett (@dkbennett) in #41108
- Fix various issues in the distro validation script by Blue (@OneBlue) in #41141
- Handle offlink default gateways in GNS by Ben Hillis (@benhillis) in #41130
- Fix spurious ERROR log for unsupported optional cgroup controllers by Ben Hillis (@benhillis) in #41122
- Retry to delete distribution VHD for up to 10 seconds by Blue (@OneBlue) in #41153
- Bump gitpython from 3.1.50 to 3.1.52 in /tools/devops by Dependabot (@dependabot)[bot] in #41159
- Track implicit autobind ports from listen() in Consomme networking by Ben Hillis (@benhillis) in #41125
- Fix a teardown race in HttpProxyStateTracker by Ben Hillis (@benhillis) in #41097
- Update GitHub Actions workflow for issue comments by piercosta in #41142
- virtiofs: Use aggregate share feature in WSLC by Daman Mulye (@damanm24) in #41151
- Fix recurring TSA onboarding failure in release builds by Ben Hillis (@benhillis) in #41167
- WSLC: Refactor ParseImage and ParseRepository (PR Feedback followup) by David Bennett (@dkbennett) in #41154
- Update Tumbleweed v20260724.0 by Scott Bradnick (@sbradnick) in #41168
- Use an azure key vault to store Github tokens for automated pull requests & release creation by Blue (@OneBlue) in #41158
- Improve WSL2 guest memory reclaim by Ben Hillis (@benhillis) in #41096
- CLI: Align WSLC argument parser with Docker flag and value semantics by David Bennett (@dkbennett) in #41160
- fixed title error visibility by Shawn Yuan (@shuaiyuanxx) in #41118
- Follow up to the cgroup PR #40519 by Feng Wang (@chemwolf6922) in #41073
- Use 4 request queues for aggregate virtiofs devices by Ben Hillis (@benhillis) in #41169
- Address memory reclaim follow-ups from #41096 by Ben Hillis (@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 Ben Hillis (@benhillis) in #41170
- Pin .resw files to CRLF via .gitattributes by Ben Hillis (@benhillis) in #41186
- Use RetryWithTimeout for ManageRejectedWhileLocked lock wait by Ben Hillis (@benhillis) in #41188
- WSLC SDK install API update by JohnMcPMS in #40949
- Use canonical path when copying files from containers by Blue (@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 Blue (@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 Feng Wang (@chemwolf6922) in #41037
- Fix: add systemd unit to make /mnt/wsl recursive slave before umount by Feng Wang (@chemwolf6922) in #41086
- Warn before opening downloaded WSL distributions by Ben Hillis (@benhillis) in #41214
- archlinux: Release 2026.08.01.174141 by Arch Linux Technical User (@archlinux-github) in #41225
- CLI: Unify interactive input and output in Reporter by David Bennett (@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 David Bennett (@dkbennett) in #41235
- Add a UserConfig setting to use local wsldevicehost binaries instead of the nuget package by Blue (@OneBlue) in #41241
- Added outcome telemetry for cold start by Shawn Yuan (@shuaiyuanxx) in #41200
- Use explicit tokens for user registry access by Ben Hillis (@benhillis) in #41245
- Fix minor issues found during code review by Feng Wang (@chemwolf6922) in #41104
- Fix: Un-escape the value before setting LANG by Feng Wang (@chemwolf6922) in #41103
- fix: port 0 tracking not working for threads by Feng Wang (@chemwolf6922) in #41051
- wslc: idle-terminate inactive per-user session VMs by Ben Hillis (@benhillis) in #41077
- Implement skipped wslc E2E test by AmirMS (@AmelBawa-msft) in #41243
- wslc: Run saved state cleanup as user by Ben Hillis (@benhillis) in #41259
- Add timeout to create process accepts by Feng Wang (@chemwolf6922) in #41252
- Add version resource to wslc.exe by AmirMS (@AmelBawa-msft) in #41266
- Bind KdRelay to loopback by Ben Hillis (@benhillis) in #41260
- virtionet: send runtime updates to network device by Brian Perkins (@Brian-Perkins) in #41263
- Update SLE 16.0 for QU3 by Scott Bradnick (@sbradnick) in #41262
- wslc: emit --format json output on a single line by AmirMS (@AmelBawa-msft) in #41268
- Inherit image labels on containersΒ by beena352 in #41246
- Update GitPython to 3.1.58 by Blue (@OneBlue) in #41275
- Retry distro file deletion under ACCESS_DENIED during distro unregistration by Blue (@OneBlue) in #41274
- Added keep alive setting by Craig Loewen (@craigloewen-msft) in #41109
- Enable unity builds for wsltests by ggarzia-MSFT in #41247
- Normalize NULL char* to in Linux logging by Feng Wang (@chemwolf6922) in #41271
- Fix: Update plan9 registration with the new default uid after OOBE by Feng Wang (@chemwolf6922) in #40977
- Add --volumes option to wslc container rm command by AmirMS (@AmelBawa-msft) in #41265
- Add --iidfile to wslc image build by ggarzia-MSFT in #41212
- Add support for host loopback by Blue (@OneBlue) in #41264
- Add pipeline stage to produce DCAT submission files by Flor ChacΓ³n (@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 David Bennett (@dkbennett) in #41276
- CLI: Cache converted CLI arguments with on-demand revalidation, and unify typed value accessors by David Bennett (@dkbennett) in #41189
- Fix default route classification logic by Feng Wang (@chemwolf6922) in #41278
- Fix force shutdown deadlock race by Feng Wang (@chemwolf6922) in #41269
- Notice change from build: 154365024 by Blue (@OneBlue) in #41298
- wslc: emit list command --format json output as one object per line by AmirMS (@AmelBawa-msft) in #41280
- CLI: Add --pull option to container create and run by David Bennett (@dkbennett) in #41304
- CLI: Make argument validation idempotent and adjust global argument freezing by David Bennett (@dkbennett) in #41305
- Update Microsoft.WSL.DeviceHost to 1.2.60 by Blue (@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 Blue (@OneBlue) in #41308
- Fix unqualified WEX::Logging::Log breaking release builds by Blue (@OneBlue) in #41315
- Fix excessive /proc//mountinfo query in p9 server by Feng Wang (@chemwolf6922) in #41312
- mountutil: skip empty tokens in mount option parser by Eamon (@Eamon2009) in #41311
- Add wsldevicehostproxystub.dll to the list of target to build during release builds by Blue (@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 Blue (@OneBlue) in #41329
- Draft: add manual VHDX compaction command for stopped WSL distros by Rafa Pradillo (@Guayamose) in #40481
- Mount plugin folders on behalf of the user owning the wsl session by Blue (@OneBlue) in #41331
- Update Microsoft.NETCore.App.Runtime to 10.0.11 by Blue (@OneBlue) in #41332
- Report cached build steps in wslc build output by ggarzia-MSFT in #41334
- Notice change from build: 154708324 by Blue (@OneBlue) in #41340
- Localization change from build: 154739322 by Blue (@OneBlue) in #41341
- Pin GitHub Actions to full-length commit SHAs by Dan Fiedler (@danfiedler-msft) in #41325
- Add Config.Image on container inspect by beena352 in #41336
- Support Docker-style network aliases in wslc by David Negstad (@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 David Bennett (@dkbennett) in #41350
- CLI: Set defaults for signal arguments in stop/kill commands, update help documentation by David Bennett (@dkbennett) in #41348
- Bump the github-actions group with 3 updates by Dependabot (@dependabot)[bot] in #41347
- Simplify VHD ownership handling during distribution moves by Ben Hillis (@benhillis) in #41333
- Return non vhd volumes in container inspect by Blue (@OneBlue) in #41335
- Preserve token owner during distribution move rollback by Ben Hillis (@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 David Bennett (@dkbennett) in #41316
- CLI: Fix shm-size and all text-to-byte size conversion and align them all to Docker by David Bennett (@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 David Bennett (@dkbennett) in #41337
- Fix potential spin in interop message relay by Feng Wang (@chemwolf6922) in #41319
- Treat EFSBADCRC as disk corruption by Feng Wang (@chemwolf6922) in #41368
- Warn the user if VMP is not installed when create instance fails by Feng Wang (@chemwolf6922) in #41357
- Use canonical path in DrvfsMountManyVirtioFsShares by Blue (@OneBlue) in #41371
- Localization change from build: 155144781 by Blue (@OneBlue) in #41372
- wslc: match docker output format for image list by ggarzia-MSFT in #41369
- Unmount the distribution before completing import by Blue (@OneBlue) in #41370
- Add a script to collect WSL logs in a loop by Blue (@OneBlue) in #41240
- Make sure that message structures are correctly zero-initialized by Ben Hillis (@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 Blue (@OneBlue) in #41389
- Split WSLCCreateSession event by Craig Loewen (@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 Ben Hillis (@benhillis) in #41267
- Make DrvFs initialization callback lifetime-safe by Ben Hillis (@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 Ben Hillis (@benhillis) in #41401
- Fix: Reattach stale cached device after backing volume is reattached by Feng Wang (@chemwolf6922) in #41379
- Propagate LaunchInit error code by Feng Wang (@chemwolf6922) in #41380
- Add timeout for udp dns requests to avoid resource leak by Feng Wang (@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 Blue (@OneBlue) in #41406
- Create a script to generate the Microsoft.WSL.TestData nuget package by Blue (@OneBlue) in #41405
- Enable discard for WSLc volumes by JohnMcPMS in #41411
- Poll for the result of operations during MSI installation by Blue (@OneBlue) in #41415
New Contributors
- Syed Osama Ali Shah (@Osamaali313) made their first contribution in #40911
- i4M1k0SU (@i4M1k0SU) made their first contribution in #40940
- Shuo Li (@Lsseeker) made their first contribution in #41057
- Dependabot (@dependabot)[bot] made their first contribution in #41159
- piercosta made their first contribution in #41142
- Rafa Pradillo (@Guayamose) made their first contribution in #40481
- Dan Fiedler (@danfiedler-msft) made their first contribution in #41325
- David Negstad (@danegsta) made their first contribution in #40972
Full Changelog: 2.9.3...2.9.8