Build1 distinct publisher3 min readUpdated
A dev.to write-up argues the WSL2 slowness everyone complains about is a per-crossing cost, not a tuning problem, and hands you an A/B benchmark to prove it locally.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A post published on dev.to takes the most common WSL2 complaint, that `cp` crawls and `npm install` takes forever while the identical command one directory over is instant, and reframes it as a measurement error rather than a performance defect [s1c1]. The claim worth operators' attention is the shape of the cost: it is paid per crossing of the Windows/Linux filesystem boundary, which makes the fix architectural (move the working tree) rather than a mount option you forgot to set [s1c2].
The author's headline number: creating 300 small files on the Windows side took an order of magnitude longer than the identical work on the Linux side [s1c3]. The same asymmetry shows up in aggregate shape. Handle the same 1GB as one large file or as 1,000 small files and the many-small-files case can lose by an order of magnitude, even though total bytes moved are identical [s1c4].
Microsoft's own documentation states the rule without explaining it: unless you have a specific reason to cross file systems, store files on the same file system as the tools you plan to use, Linux files for Linux command-line work, Windows files for Windows tools such as Notepad [s1c5]. The author is explicit that the doc page gives the recommendation and nothing about the mechanism, and separates vendor documentation from everything that follows [s1c6].
The mechanism, presented as community analysis plus the author's own measurements rather than vendor material, is that reaching `/mnt/c` from WSL2 goes over the 9P protocol [s1c7]. 9P caps how much data a single round trip can carry, the `msize` parameter, and on the Windows-side client that value is currently fixed and not user-changeable, per microsoft/WSL#9125 [s1c8]. Guides telling you to raise it are, the author says, likely describing Linux-side mount options for a different setup [s1c9]. The load-bearing detail is that the cap applies per round trip, not per byte moved overall, so opens, closes and existence checks accumulate cost fast [s1c10]. Multiple GitHub issues, #4197 and #5103, describe the same pattern of small discrete operations taking the worst of it [s1c11]. On the question of whether WSL2 has moved to a newer transport, the author reports that in their environment, at time of writing, it is still the legacy 9P path, and tells readers not to take that on faith either [s1c12].
That is why the benchmark matters more than the diagnosis. Make a directory under `~`, time a loop of 300 `echo x > "f$i"` writes, time the deletions, then repeat under `/mnt/c` [s1c13]. On the author's machine both creation and deletion came out an order of magnitude slower on the Windows side, with creation showing the bigger gap: a fraction of a second on Linux, several seconds on Windows [s1c14]. That is 1,200 timed file operations in total, which is small enough to run before you argue about it [s1c15].
Two cautions from the same post. Run the single-large-file read as well rather than assuming one big operation is automatically cheap, because how the cost lands depends on the specific operation, not only which side of the boundary you are on [s1c16]. And the post also documents a syscall-level check to identify which calls are paying, plus fixes with their side effects stated [s1c17].
What to watch: whether your own environment is still on the legacy path, since the author's answer is environment-specific and dated to their machine [s1c12]; and where your build genuinely needs Windows-side visibility, which is the case the recommendation to keep files with their tools does not resolve for you [s1c5].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
In the author's testing, creating 300 small files on the Windows side took an order of magnitude longer than the identical work on the Linux side.
Handling the same 1GB as a single large file versus as 1,000 small files can cost the many-small-files case an order of magnitude, even though the total data moved is identical.
The msize cap applies per round trip, not per byte moved overall, so operations that generate many small round trips (opening a file, closing it, checking whether it exists) accumulate cost fast.
Multiple GitHub issues, including #4197 and #5103, describe the same pattern: workloads with many small, discrete file operations are hit hardest.
On the author's machine both creation and deletion came out an order of magnitude slower on the Windows side, with creation showing the bigger gap: the Linux side finished the 300 files in a fraction of a second, the Windows side took several seconds.
The author advises also running the comparison with a single large file read, and not assuming it is automatically cheap because it is one operation, since how the cost lands tends to depend on the specific operation rather than only which side of the boundary it is on.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Reproducible method, self-reported results
The post publishes an exact, copy-pasteable A/B benchmark and syscall-attribution commands, cites Microsoft's own 'Working across file systems' recommendation, and points to concrete GitHub issues (microsoft/WSL#9125, #4197, #5103). It also labels its own weaker steps as signal rather than proof. Against that, the headline result is order-of-magnitude language from a single machine with no absolute timings, hardware, or WSL build disclosed, and the transport claim is explicitly unverified — so the method is strong while the measurement record is thin.
No adoption signal in sources
The single source is an explanatory write-up. It contains no release, deployment, usage disclosure, pricing, licensing, or third-party uptake data, and nothing indicates how many readers ran the benchmark or changed their setup, so adoption cannot be measured without inventing facts.
Slightly overstated headline, well-hedged body
The framing ('WSL2 is not slow; the boundary is', order-of-magnitude penalties) generalizes from one machine without publishing timings, and the 9P transport premise is admittedly unconfirmed — that pushes the gap positive. It is small rather than large because the body repeatedly de-escalates: strace evidence is called a strong signal not proof, the crossing count is called a heuristic, msize tuning advice is corrected rather than sold, and readers are told to verify the transport claim themselves.
Low commercial stake, self-published credibility interest
The only visible incentive is authorial reputation and engagement from a self-published developer post on dev.to; no vendor, sponsor, product, or paid offering is promoted anywhere in the source, and the recommended fix is Microsoft's own documented advice rather than a tool sale. The author also explicitly separates vendor documentation from community analysis and personal measurement, which cuts against incentive-driven framing. The residual score reflects the unavoidable pull of a strong headline claim on a self-published platform.
Single publisher, single environment
Confidence is capped by a one-source, one-author, one-machine cluster with no corroborating coverage and no vendor response. It is not lower because the mechanism aligns with Microsoft's documented recommendation and public issue reports, and because the central assertion is independently checkable by any reader in minutes using the published script.
build
Microsoft ships an MIT-licensed agent kernel: policy rings, Ed25519 identity, kill switch1 distinct publisher
build
Dual 3090s, no NVLink: the serving stack broke long before the model did1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
AI-written code fails the same four ways, and every gate you own reports green1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 17, 2026