Decision. For a .NET/TypeScript developer, the toolchain crosses over almost completely in 2026 — Rider, VS Code + MSSQL extension, SQL Server in Docker, PowerShell 7 all run natively [1][2]. What does not cross is the Microsoft office-worker layer: there is no desktop Office for Linux, so no VBA and no offline Excel [3][4]; no native Outlook with a working calendar [5]; no WPF/WinForms designers [6]; and, in Belgium specifically, eID works but breaks the moment your browser is a Snap or Flatpak [7]. Keep a small Windows partition for exactly those, and stage the move: live USB → dual-boot for 4 weeks → commit.
1. Inventory and substitutes
Rated by what actually happens when you try, not by feature-list parity. ✓ = drop-in. ⚠ = works with a caveat you will hit. ✗ = does not cross; needs an escape hatch.
Office and documents
| Windows tool | Linux substitute | Verdict |
|---|---|---|
| Word / Excel / PowerPoint (desktop) | Microsoft 365 for the web — the only officially supported route; there is no native Linux client [3] | ⚠ no VBA, no add-ins, no offline, degrades on large workbooks [4] |
| .docx / .xlsx round-trip fidelity | OnlyOffice Desktop Editors ⭐ 5.1k — OOXML is its native internal format, not an import filter [8][9] | ✓ best fidelity for files you exchange with Windows colleagues |
| .odf-first editing, PDF, everything else | LibreOffice | ✓ but OOXML is a conversion, so complex styling and layout drift [8] |
| Excel VBA macros | LibreOffice Tools ▸ Macros ▸ Convert Microsoft Office Macros, plus the Option VBASupport 1 compatibility mode [10] |
✗ partial by design — anything touching the Excel object model, ActiveX or Application. internals fails. OnlyOffice doesn’t even try: its macros are JavaScript [8] |
| Power Query / Power Pivot | none | ✗ no equivalent; move the ETL into Python/pandas or SQL, which you already write |
Practical rule: documents you author → OnlyOffice. Documents with macros or Power Query that someone else owns → Windows VM or a Cloud PC. Don’t try to port a business-critical macro workbook; it is the single most common reason a switch reverses.
Communication
| Windows tool | Linux substitute | Verdict |
|---|---|---|
| Teams desktop | Teams PWA — Microsoft retired the Linux Electron client in December 2022 and made the PWA the supported path [11][12] | ⚠ PWA install is Edge/Chrome only — not Firefox [12] |
| Teams screen sharing | PipeWire + xdg-desktop-portal under Wayland |
⚠ the recurring Linux-Teams failure. Missing/misconfigured portals → the share picker is empty or the browser crashes; Wayland-vs-Xorg session choice changes the outcome [13]. Test this on day one, not week three |
| Outlook (mail) | Thunderbird 145+ speaks EWS natively with OAuth2 for M365 [5][14] | ⚠ and on a clock — see below |
| Outlook (calendar + contacts) | nothing native | ✗ Thunderbird’s Exchange support is mail-only; calendar and address book are “on the roadmap”, Graph is “not yet implemented” [5]. Use Outlook Web |
⚠ The EWS trap. Thunderbird’s native Exchange support rides on EWS, and Microsoft starts blocking EWS in Exchange Online on 1 October 2026, with full retirement in April 2027; F1/F3/Kiosk licences were cut off from 1 March 2026 [15]. Thunderbird’s Graph backend is not shipped yet [5]. If your mail is in M365, plan on Outlook Web as the primary client and treat Thunderbird as a bonus that may stop working inside 12 months. On-premises Exchange is unaffected [15].
.NET and database tooling
| Windows tool | Linux substitute | Verdict |
|---|---|---|
| Visual Studio (Windows-only) | JetBrains Rider — runs on Linux, ships .NET 10 / C# 14 support | ✓ for ASP.NET, libraries, tests, containers [6]; free for non-commercial use, commercial licence still required for work [16] |
| VS designers for WPF/WinForms | none | ✗ Rider edits XAML but has no visual designers [6]; WPF/WinForms apps only run on Windows regardless [17]. EnableWindowsTargeting=true lets CI build them on Linux — it does not let you run or design them |
| WPF app you must keep maintaining | Avalonia for new work; Avalonia XPF for lifting an existing WPF app cross-platform | ⚠ XPF is commercial and a port, not a recompile |
| Azure Data Studio | retired 28 February 2026 — no updates, no security fixes [1] | ✗ do not build on it |
| SSMS query/schema work | VS Code + MSSQL extension: schema compare, schema designer, DACPAC/BACPAC, Query Profiler, SQL projects open unconverted [1] | ✓ this is Microsoft’s own designated replacement |
| SSMS SQL Server Agent + full admin | none — Microsoft explicitly keeps Agent and “classic administration” in SSMS, which is Windows-only [1] | ✗ the real SQL gap. Job scheduling → RDP, VM, or T-SQL against msdb |
| Multi-engine SQL client | DBeaver, DataGrip, Beekeeper Studio — all cross-platform [18] | ✓ |
| Local SQL Server instance | SQL Server in Docker — supported on Linux hosts with x86-64 CPUs [2] | ✓ better than Windows. ⚠ x86-64 only; ARM and emulation (QEMU/Rosetta/Prism) are untested and unsupported [2] |
IIS + inetmgr |
Kestrel behind nginx/Caddy, or just your existing Docker Compose | ✓ you already run Coolify; this is the direction the platform moved anyway |
| PowerShell 5.1 scripts | PowerShell 7 runs natively on Linux | ⚠ Get-WmiObject was removed in PS 6+, and the CIM cmdlets that replaced it were never ported to non-Windows [19]. Anything WMI/CIM, registry, ActiveDirectory, or COM stays on Windows |
| .NET Framework 4.x projects | none | ✗ Framework targets don’t build or run on Linux. Legacy Framework work = Windows VM |
Creative and compliance
| Windows tool | Linux substitute | Verdict |
|---|---|---|
| Photoshop | Photopea (browser, best PSD fidelity of the free tools), GIMP, Krita for illustration [20] | ⚠ fine for dev-adjacent work, not for a print/agency workflow |
| Affinity Photo/Designer/Publisher | Canva made Affinity free and unified in 2025 [21]; Linux is community-only — an unofficial Affinity v3 AppImage that bundles Wine [22], or AffinityOnLinux ⭐ 1.7k via Bottles/Lutris/Heroic [23] | ⚠ unsupported by the vendor; treat as a nice-to-have |
| Premiere / After Effects / Acrobat Pro | DaVinci Resolve (native Linux) / nothing / Okular+qpdf |
✗ for AE and Acrobat Pro’s forms & redaction |
| Corporate SSL VPN | OpenConnect covers Cisco AnyConnect, Palo Alto GlobalProtect, Fortinet FortiGate and F5 protocols [24]; GlobalProtect-openconnect ⭐ 2.2k adds SSO/MFA/YubiKey with a GUI [25] | ⚠ works, but it’s a reimplementation — if your security team requires the vendor client with posture checking, you lose |
| Belgian eID card reader | Official eid-mw + eid-viewer packages via eid-archive, supported on Debian 12/13, Ubuntu 24.04/26.04 LTS, Mint 21.3/22.3, Fedora 43/44, RHEL 10 + Rocky/Alma, openSUSE Leap 16 [26] |
✓ officially supported — on those distros |
| eID in the browser | Firefox/Chrome loading libbeidpkcs11.so |
✗ Belgian-specific landmine: eID cannot work with a Snap or Flatpak browser — sandbox confinement blocks the PKCS#11 module [7]. On Ubuntu, Firefox is a Snap by default, so eID is broken out of the box. Fix = install a .deb/native browser |
| Banking / itsme | itsme activates via your bank app, or with eID + card reader if the bank doesn’t offer in-app activation [27] | ✓ activate itsme while still on Windows — then most Belgian banking is browser + phone and the reader becomes a fallback |
Card readers themselves are almost always CCID-class and need no vendor driver — the software stack (pcscd + eid-mw) is what matters [26].
2. Escape hatches, ranked by what they actually cost
| Hatch | Good for | Cost / caveat |
|---|---|---|
| Web app (M365 web, Outlook Web, Photopea) | 80% of the office layer | Free, zero maintenance, no offline, no macros [4] |
| Wine / Bottles / CrossOver | Office 2016 and older, Affinity, small vendor utilities | ✗ Office 365 / 2021 / 2024 don’t work reliably — click-to-run installers defeat Wine, and Outlook/OneDrive/OneNote components are broken or absent [28] |
| WinApps / WinBoat (Windows VM + RemoteApp over FreeRDP) | modern Office, Access, any single stubborn Windows app | Individual Windows app windows appear on your Linux desktop with MIME/menu integration — far higher compatibility than Wine, at the price of running a Windows VM [29] |
| Full VM under KVM/virt-manager | Visual Studio proper, SSMS, .NET Framework, anything with posture-checked VPN | Best hypervisor on Linux: VirtIO drivers, low overhead, real PCI passthrough. VirtualBox’s 3D/passthrough is markedly weaker [30] |
| GPU passthrough (VFIO) | near-native graphics in the VM | Single-GPU passthrough works but takes your GPU away from the host while the VM runs — the Linux desktop goes dark and comes back on shutdown [31]. Fiddly IOMMU/vBIOS setup. Only worth it for GPU-bound Windows work |
| Windows 365 Cloud PC | the compliance/legacy app you touch monthly | Reachable from any HTML5 browser on Linux, no client needed [32]. Business tiers run roughly $28–$56/user/month after the May 2026 price cut; Enterprise starts near $31 and scales past $120 [33] |
| Keep a Windows partition | everything above, at zero recurring cost | Windows 11 is fine. If the machine is on Windows 10, note support ended 14 October 2025 — consumer ESU (free with settings sync, 1,000 Rewards points, or $30) runs until the programme closes 12 October 2027 [34] |
For this reader’s profile the honest answer is: dual-boot Windows for Visual Studio designers + SSMS Agent + macro workbooks, and don’t bother with GPU passthrough.
3. Switch mechanics: dual-boot vs full wipe
Dual-boot, for the first 4–8 weeks, always. The pitfalls are known and all avoidable:
| Pitfall | What happens | Fix |
|---|---|---|
| BitLocker | Windows 11 24H2 can auto-enable BitLocker even on Home. Repartitioning or a bootloader change triggers a recovery-key prompt [35] | Print the recovery key. Suspend or disable BitLocker before you touch partitions. |
| Fast Startup / hibernation | Windows leaves NTFS in a hibernated state; Linux refuses read-write mounts. Worse, hibernating one OS then booting the other can damage a shared EFI System Partition [36] | Disable Fast Startup in Windows. Never hibernate in a dual-boot setup |
| Undersized ESP | Windows ships a ~100 MB ESP; GRUB/systemd-boot + a couple of kernels and initramfs images fill it | Target ≥ 260 MiB (512 MB is comfortable) [37][36]. Reuse the existing ESP — never reformat it |
| Install order | Windows installers overwrite the bootloader and don’t detect Linux; Linux installers detect Windows and chain-load it | Windows first, Linux second [36] |
| Clock skew | Linux writes UTC to the RTC, Windows reads it as local time → your clock jumps 1–2 hours every reboot | timedatectl set-local-rtc 1 on Linux, or set Windows to UTC via registry [38]. Fix it once or it will erode your patience daily |
| Secure Boot | third-party kernel modules (NVIDIA, VirtualBox) need signing under Secure Boot [35] | Enroll a MOK key during install, or disable Secure Boot — but disabling it also disables BitLocker’s TPM unseal |
4. Data, filesystems, and identity
NTFS. The in-kernel ntfs3 driver has a track record of freezes and corruption; the mature choice is ntfs-3g — slower, safe [39]. Use NTFS for reading your old data, not as a daily-driver filesystem. For a shared partition, exFAT has native read-write kernel support and works on both sides [40] — but it carries no POSIX permissions or extended attributes, which matters next.
⚠ Dropbox is the sharpest constraint in this whole migration. The Linux client relies on extended attributes to track files and supports only unencrypted ext4 for the sync folder [41]. Consequences:
- Your Dropbox folder cannot live on NTFS, exFAT, or btrfs/ZFS. If you were planning btrfs snapshots, Dropbox is a reason to keep at least one ext4 volume.
- ext4 inside a LUKS container is fine — LUKS is block-level and invisible to Dropbox [41]. ext4’s own file-based encryption (
fscrypt) is not. - The client also needs an AppIndicator-capable tray; GNOME needs an extension [42].
Identity and config, in order:
- SSH keys — copy
~/.ssh, thenchmod 700 ~/.ssh && chmod 600 ~/.ssh/id_*. Wrong permissions are the #1 “my key doesn’t work” cause on Linux. - GPG —
gpg --export-secret-keys --armoron Windows,gpg --importon Linux, thengpg --edit-key <id> trust. Don’t copyprivate-keys-v1.dbetween versions; export/import. - Browser profiles — sign in to Firefox Sync / Chrome sync rather than copying profile directories across OSes. On Ubuntu, install a non-Snap Firefox if you need eID [7].
- Dotfiles — this is the moment to put them in a git repo with a bootstrap script; you’ll run it at least twice during a staged migration.
- itsme + 2FA + password manager — verify recovery on your phone before wiping anything [27].
5. WSL2 experience: what transfers and what doesn’t
| Transfers cleanly | Doesn’t transfer |
|---|---|
bash, coreutils, package managers, apt/dnf muscle memory |
Desktop stack: display server (X11 vs Wayland), compositor, portals, audio (PipeWire), theming — WSL2 taught you none of it |
| Docker, compose, CLI-driven workflows — and they get faster: container start ~0.3s native vs ~1.2s on WSL2, container filesystem ops 3–5× faster [43] | Hardware: printers, Bluetooth, webcam, sleep/resume, fingerprint readers, external monitor hotplug, GPU drivers |
| Shell scripting, ssh, git, editors | Networking model — WSL2 defaults to NAT and is isolated from the host stack; native Linux gives you bridged/host networking and real interfaces [44] |
| Comfort with the CLI generally | USB/GPU passthrough, kernel modules, init-system and system-wide config tinkering [43] |
WSL2 makes you competent at the Linux userland and leaves you a beginner at the Linux desktop. Budget your learning time accordingly: the surprises will all be graphical, audio, or power-management, not shell.
6. Staged migration plan with go/no-go checkpoints
Stage 0 — Inventory (½ day, still on Windows)
List every app you opened in the last 90 days. Mark each ✓/⚠/✗ against §1. Anything ✗ must have a named hatch from §2 before you proceed. Print the BitLocker recovery key. Activate itsme. Push dotfiles to git.
Stage 1 — Live USB (2 evenings, zero risk)
Boot the candidate distro from USB without installing. This tests hardware, which is the failure mode you cannot fix later.
Gate 1 — all must pass, or change distro/kernel version:
- Wi-Fi and Bluetooth work without hunting for firmware
- External monitor + correct resolution/refresh; laptop scaling readable
- Suspend and resume, twice (lid close, lid open)
- Audio out and mic in, headset switching
- Teams PWA screen share picks up a window and a full screen [13]
- Webcam in a browser call
- Trackpad gestures, fn-keys (brightness, volume)
Stage 2 — Dual-boot (4 weeks, reversible)
Shrink Windows from inside Windows (Disk Management), leave ≥ 80 GB for Linux + a separate /home. Suspend BitLocker, disable Fast Startup, reuse the ESP, install Linux second [36][35]. Fix the RTC immediately [38]. Put /home (or at least the Dropbox folder) on ext4 [41].
Then do real work on Linux, and log every reboot into Windows and why.
Gate 2 — the checkpoints that decide whether it sticks:
- Full .NET solution builds, tests run, debugger hits breakpoints in Rider
- Docker + Coolify deploys work end-to-end
- SQL Server container up, MSSQL extension connects, schema compare works [1][2]
- Corporate VPN connects and stays up through a sleep cycle [24]
- eID reads your card in a non-sandboxed browser; a real government/bank flow completes [26][7]
- Dropbox reports “Up to date”, not a filesystem warning [41]
- You joined a Teams meeting, shared a screen, and presented — twice
- Printing/scanning works if you need it
- Windows reboot log ≤ 2 in the final week, and every entry maps to a known ✗ item
Fail on any of the first six → fix or abandon; those are not things you learn to live with. Reboots > 2/week for reasons that aren’t on your ✗ list → the switch is not ready.
Stage 3 — Commit (after Gate 2)
Don’t wipe Windows. Shrink it to ~80–120 GB, keep it for VS designers, SSMS Agent, macro workbooks, and any posture-checked VPN, and give Linux the rest. Convert one of the reclaimed NTFS partitions to ext4/btrfs once you’ve verified the data is elsewhere [39]. If you find yourself booting Windows less than monthly after three months, convert it to a KVM guest and reclaim the disk [30] — a VM you can snapshot beats a partition you have to reboot into.
Rollback trigger: if at any point you’re spending more than ~2 hours/week fighting the desktop rather than working, go back to Windows for the quarter and retry after the next LTS/kernel release. The migration is cheap to repeat and expensive to force.