Marc-André Moreau

Marc-André Moreau

@awakecoding.com

Remote desktop protocol expert, OSS contributor and Microsoft MVP. I love designing products with Rust, C# and PowerShell. Proud to be CTO at Devolutions. 🇨🇦

5.2K followers2.3K following3.6K posts

Azure Artifact Signing introduced a stable publisher id inside the certificate that is *perfect* for pinning, but Microsoft didn't follow through. There are no easy ways to inspect this publisher id, either through the GUI, Win32 APIs or PowerShell commands

How software engineering is changing at Devolutions: my first-hand account of a year of AI, from early mistakes to finishing a major 3-year migration in one. This long-form essay was originally written for The Pragmatic Engineer’s essay challenge 👇 devolutions.net/blog/develop...

devolutions.netDevelopment evolutions at DevolutionsMarc-André Moreau on how Devolutions compressed a three-year Remote Desktop Manager Avalonia migration into one year, and what that shift changed in how the company builds software.

We're discussing switching from an EV certificate to Azure Artifact Signing for Devolutions RDM. This means updating our custom certificate pinning to check the publisher ID and Microsoft Root CAs instead of a list of thumbprints of EV certificates. Is anyone doing the same?

I keep seeing good comments on Linear and how agents work well with it, so now I am wondering if it wouldn't be a better foundation for an AI software factory than JIRA. Thoughts? Who's using Linear and can provide feedback?

It doesn't help that the JIRA MCP has been really unstable for the past month - it keeps logging you out, you need to try again several times. I gave up and just disabled it in my AI agents because of all the resulting noise. It's weird because the Atlassian CLI works

I wish GitHub pull requests could automatically exclude or remove entire directories of files when merging them - this would make software factories a lot easier with intermediate artifacts on a branch that get discarded later

Fans are running loud on my laptop as I give my AI agents all the VMs they need to perform live testing of complex RDP features like session redirection in an RD Gateway farm. This would have taken forever to test by hand

GitHub Agentic Workflows look great unless you absolutely need a Windows or macOS runner. It's hard to build an AI software factory for a Windows desktop app from a headless Linux runner. I had to switch to a regular GitHub Actions workflow that calls Copilot CLI 🤷

If you have an Android phone and receive a lot of spam calls, I highly recommend you install PrefixBlocker (www.prefixblocker.com). It works locally with simple prefix-based rules. I only use the phone for local calls anyway, and I just cut 80% of unsolicited calls so far

Is there something similar to GitHub Actions runners, but with quick suspend/resume, and more suitable for agentic workflows? I want to create an environment that matches the lifetime of an agent session that can go idle, and resume state when resuming the session

Marc-André Moreau reposted

🚀 @devolutions.net is back as a PARTNER Sponsor of #PowerShell #Conference #Europe 2027 in #Kraków! You'll find the team on stage and in the exhibition area throughout the event. Give them a warm #PSConfEU welcome and let's make some noise for Devolutions! 👏 See you in #Poland!

Anybody else feels like a side effect of AI is less desire for collaboration? The cost of waiting for pull requests to be merged upstream is so high when compared to writing your own thing from scratch. It's like people don't even bother looking for existing libraries anymore

I've been experimenting with PSObject binary encodings to replace CLIXML - CBOR and Protobuf are both great candidates, with significantly smaller size, but also much faster encoding and decoding performance! Which one would you like to be supported natively in PowerShell?

JSON or BSON are excluded, as they can't preserve 100% of PowerShell object properties the same way CLIXML would. I've tested the CBOR and Protobuf encodings to make sure all edge cases survive an encoding round trip

It's time to drop support for Windows PowerShell, and move to PowerShell 7. Yes, even if it doesn't yet ship in-box with Windows Server. Just install it by default - you can still use WinRM, no need to switch to SSH. .NET Framework is *ancient* and lacks a decade of improvements

What is your current solution for persisting data in between PowerShell script executions, and what would be your ideal solution if you could have exactly what you wanted?

PSWSMan 3.0 is out with cross-platform Windows authentication support provided by sspi-rs, the Rust SSPI library that we develop at Devolutions! This is a major upgrade from Jordan, go try it out 💪👇

Jordan Borean@jborean.bsky.social

It's been a long time coming but PSWSMan v3 for #PowerShell has been released www.powershellgallery.com/packages/PSW.... This is a major upgrade that moves away from the C omi library to a C# WSMan stack. No more root required, better Enter-PSSession experience, and lots more features enabled.

⚡ 3x faster .NET restore on GitHub Actions Windows runners, with two environment variables. By default, the NuGet cache sits on the slow C: disk. Move NUGET_PACKAGES and NUGET_HTTP_CACHE_PATH to the faster D: disk, and Windows restore times match Linux: awakecoding.com/posts/speedi...

awakecoding.comSpeeding Up .NET Builds on Windows: The NuGet Cache FixWindows CI builds always finish last, but is Windows really that slow? Benchmarking the same .NET build on GitHub-hosted Windows and Linux runners revealed that the default NuGet cache location on C: ...

Marc-André Moreau reposted

📍 The secret is out. #PSConfEU 2027 is heading to Kraków, Poland (21>24 June 2027) 🔴⚪️ 🎟 Only 30 Early Bird tickets at €1,650 ⏳ Until 30 October or sold out 👉 psconf.eu #PSConfEU #PowerShell #Pwsh #Krakow

Marc-André Moreau reposted

I've always disliked that I couldn't test Kerberos in CI easily and so I've written a #PowerShell module called Obol that can setup a KDC and configure the environment for the platform you are on github.com/jborean93/Po.... Uses @syfuhs.net's Kerberos.NET for the message parsing and encryption work.

🚨PowerShell ISE, made cross-platform, with PowerShell 7!🚨 @adamrdriscoll.com has been cooking with "ISEberg" 👇

Adam Driscoll@adamrdriscoll.com

Iseberg - A cross-platform, PowerShell ISE inspired editor for PowerShell 7 built with @avaloniaui.net github.com/adamdriscoll...

What's the proper pattern in Claude Code to split changes into multiple PRs that you can track in their own sessions? As Claude Code discovers things that could be worked on separately, it shows a popup that can start a new session in its worktree, but I can't prompt this

Here the expected behavior in GitHub Copilot would be two new child sessions in their own worktrees for PR 1 and PR 2. In Claude Code, I still have the same "dirty" session with all changes mixed together, and it tells me about two branches in which it has prepared PR 1 and PR 2

I'm looking for .NET projects using SQLite that I could swap the original nuget dependency with Turso in order to surface bugs, gaps in features, and performance issues. Reply with a link to the project I should try wiring the .NET Turso bindings into 👇

I figured out why "dotnet restore" performance is so bad on Windows runners as opposed to Linux runners: GitHub Actions doesn't override NUGET_PACKAGES, NUGET_HTTP_CACHE_PATH to point to the D:\ drive which is where the builds are done with faster disk I/O 👇

Marc-André Moreau@awakecoding.com

The new HydraFusion model in GitHub Copilot is really good, I managed to generate a fake, large .NET enterprise application with a size and complexity similar to RDM Windows for less than $100 in AI credits, for build system performance testing: github.com/mamoreau-dev...

How do you work around the Windows Firewall prompts when letting GitHub Copilot do end-to-end testing that involve a network service? The paths always change when using worktrees, and most projects need explicit instructions to create a localhost-only listener configuration

I don't run into this problem when building containerized network services because even if the server listens on all ports inside the container, it's only listening on localhost on the Windows host by default, and won't trigger the Windows Firewall prompt

What's the best approach to ship FIPS-compatible software? One package with a configurable FIPS option that disables features at runtime? A separate package with the features disabled at build time? A runtime option looks easy in theory, but harder in practice from my analysis

The new HydraFusion model in GitHub Copilot is really good, I managed to generate a fake, large .NET enterprise application with a size and complexity similar to RDM Windows for less than $100 in AI credits, for build system performance testing: github.com/mamoreau-dev...

github.comGitHub - mamoreau-devolutions/AtlasOps: AtlasOps - a fake, large .NET enterprise application for build performance testingAtlasOps - a fake, large .NET enterprise application for build performance testing - mamoreau-devolutions/AtlasOps

Why would I want a fake .NET application that is intentionally bloated? It's simple: I couldn't find an open source .NET application that matched RDM Windows in complexity and size that would allow external reproduction of build performance differences observed internally: bsky.app/profile/awak...

Marc-André Moreau@awakecoding.com

Why is it that Windows is consistently slower than Linux at building software *for* Windows? I've got real numbers from CI builds of RDM Windows (.NET) on Windows and Linux runners as proof: Windows has a 1.33x median penalty. It's not a one-off, I re-ran the benchmarks 5 times