8 points par GN⁺ 2026-02-16 | 5 commentaires | Partager sur WhatsApp
  • Le développement natif sous Windows est complexe et inefficace à cause de la dépendance à l’installation de Visual Studio
  • Des dizaines de Go à installer, une gestion opaque des composants et des problèmes d’incohérence de versions nuisent à la productivité des développeurs
  • Pour résoudre cela, un outil CLI léger, msvcup, a été développé afin de permettre l’installation automatique, isolée et par version de la toolchain MSVC et du Windows SDK
  • msvcup fournit un environnement de build reproductible grâce au parsing de manifestes JSON, à la configuration automatique de l’environnement (autoenv) et à la prise en charge des lock files
  • Cette approche permet un système de build entièrement automatisé et piloté par scripts sans dépendre du Visual Studio Installer

Les problèmes du développement natif sous Windows

  • La méthode traditionnelle, qui impose d’installer Visual Studio, pèse sur les développeurs à cause d’un processus d’installation complexe et d’une gestion instable des dépendances
    • Il faut sélectionner en détail la charge de travail “Desktop development with C++”, une version précise du SDK, etc., et un mauvais choix peut faire échouer le build
    • L’installation peut atteindre 50 Go et, même après désinstallation, il reste des entrées de registre résiduelles et des services en arrière-plan
  • Sous Linux, une seule commande du gestionnaire de paquets suffit pour installer une toolchain, alors que sous Windows il faut choisir manuellement des milliers de composants
  • Visual Studio adopte une structure monolithique où éditeur, compilateur et SDK sont étroitement liés, ce qui complique la gestion des versions et la reproductibilité des environnements
  • Résultat : les écarts du type « ça marche sur mon PC » sont fréquents, ce qui devient une barrière à l’entrée pour le développement natif

msvcup : une nouvelle approche

  • msvcup est un outil CLI open source qui télécharge et installe directement la toolchain MSVC et le Windows SDK sans installation de Visual Studio
    • Chaque version est installée dans un répertoire isolé sous C:\msvcup\, ce qui permet de faire cohabiter plusieurs versions sans conflit
    • L’installation se termine en quelques minutes, avec inclusion automatique des outils de cross-compilation ARM
  • La commande msvcup install installe les paquets nécessaires, et la commande autoenv crée un répertoire d’environnement automatique
    • Ce répertoire contient des exécutables wrapper qui définissent automatiquement les variables d’environnement ainsi qu’un fichier toolchain.cmake, ce qui permet aussi de builder des projets CMake sans configuration supplémentaire
  • Dans l’exemple de script build.bat, msvcup permet de builder un programme “Hello, World” sans Visual Studio
    • Il fonctionne sous Windows 10 ou version ultérieure avec seulement curl et tar

Fonctionnement interne

  • L’outil parse les manifestes JSON des composants Visual Studio distribués par Microsoft afin d’identifier uniquement les paquets nécessaires
    • Les éléments essentiels — compilateur, linker, headers, bibliothèques, etc. — sont téléchargés directement depuis le CDN de Microsoft
  • Les composants installés sont gérés via un lock file, ce qui permet à toute l’équipe de partager exactement les mêmes versions de paquets
  • Les commandes install et autoenv sont idempotentes et, si tout est déjà installé, elles se terminent en quelques millisecondes

Cas d’usage réel

  • Tuple (application de pair programming) a intégré msvcup à son système de build CI, supprimant ainsi la nécessité d’avoir Visual Studio préinstallé
    • Il devient possible de builder des centaines de projets C/C++, y compris WebRTC, avec la même toolchain et le même SDK
    • Les builds x86_64 et ARM sont tous deux pris en charge
  • Avantages
    • L’installation dans des répertoires par version permet une gestion parallèle des versions et une réinstallation facile
    • Prise en charge automatique de la cross-compilation, sans configuration séparée
    • Reproductibilité garantie via les lock files, avec détection immédiate des changements côté Microsoft
    • Exécution rapide, sans réinstallations inutiles

Limites et extension

  • msvcup est conçu avant tout autour de la toolchain de compilation ; si l’IDE Visual Studio lui-même est nécessaire, l’installation officielle reste indispensable
  • Cependant, dans la plupart des workflows de développement natif, il fournit un environnement de build complet sans IDE
  • Le script de build raylib donné en exemple installe automatiquement le SDK et la toolchain puis build le projet, sans Visual Studio
    • Le processus de build est entièrement automatisé en ligne de commande, sans GUI

Conclusion

  • msvcup élimine la complexité du Visual Studio Installer et fournit un environnement de build natif léger et versionnable
  • Cette approche transforme le développement natif sous Windows en un modèle reproductible et automatisé, en aidant les développeurs à se libérer de la dépendance à l’IDE
  • Repo : https://github.com/marler8997/msvcup

5 commentaires

 
GN⁺ 2026-02-16
Commentaires sur Hacker News
  • Ça a l’air plus compliqué que ce que je fais
    Il suffit d’installer les LTSC Visual Studio Build Tools, puis de mettre une commande comme cl yourprogram.c /link user32.lib advapi32.lib ... dans un fichier cmd
    J’édite avec vim et j’ai construit pas mal d’utilitaires de cette façon
    La toolchain Visual Studio a des versions LTSC et stables, mais la plupart des gens ne le savent pas
    En environnement collaboratif, mieux vaut utiliser une version figée indiquée dans l’historique officiel des releases
    Comme à l’époque où toute l’entreprise figeait la même version de toolchain

    • Le canal LTSC n’est accessible qu’avec une licence Visual Studio Professional ou supérieure
      C’est pour ça que les étudiants et les développeurs amateurs ne le connaissent souvent pas
      En revanche, ceux qui utilisent VS en entreprise le savent généralement
    • Il n’y a pas encore de release LTSC pour Visual Studio 2026
      Quelqu’un sait quand elle sortira ?
  • Même les toolchains Linux ne sont pas à l’abri de l’enfer des dépendances
    En installant un package npm, on se retrouve à avoir besoin de cmake, à gérer un conflit de version glibc, ou à tomber sur un projet C++ qui exige la dernière version de boost, etc.
    Je me souviens encore des patchs openSSL à l’époque de heartbleed
    Visual Studio est pénible aussi, mais le vrai enfer, c’est la confusion autour des versions de .NET Framework
    Selon la version de Windows, les versions de .NET installées diffèrent, et on ne sait pas toujours clairement sur quel runtime l’app va s’exécuter
    Du coup, pour des déploiements à grande échelle, il faut créer en C++ un shim de vérification de version .NET pour lancer le bon runtime

    • Si glibc elle-même pose un problème de dépendances, c’est tellement rare que j’aimerais presque en entendre parler
      L’équipe glibc est extrêmement stricte sur la compatibilité ascendante et descendante
      Cet article de LWN indique quand la compatibilité a été rompue pour la dernière fois
      Le vrai problème, c’est quand les gens épinglent mal la version de glibc
      Il ne faut pas faire de pinning sur glibc
      GCC a bien cassé la compatibilité quelques fois, mais c’était surtout à cause de changements dans le standard C++
    • .NET récent est complètement différent
      .NET Framework est déjà legacy, et depuis .NET 5 ces problèmes n’existent plus
      Cela dit, beaucoup d’apps dépendent encore d’anciennes versions
    • Avant, pour le développement C/C++, le gestionnaire de paquets système suffisait largement, mais les problèmes de versions modernes ont conduit à l’apparition de gestionnaires de paquets par langage
      Ça a résolu certains problèmes, mais ça a aussi créé une nouvelle complexité
      Parfois, j’aimerais simplement revenir à l’époque du gestionnaire de paquets système
    • Les frictions UX du build en C/C++ sont agaçantes, indépendamment des questions de sûreté mémoire
      En embarqué, l’écosystème rust + probe-rs est bien plus agréable
  • L’installateur Visual Studio permet une installation unattended via des paramètres en ligne de commande
    C’est expliqué dans la documentation officielle
    En 2018, quand je travaillais sur un réseau satellite avec Internet lent, j’ai utilisé cette méthode parce qu’il fallait créer un package d’installation hors ligne

    • J’ai essayé, mais il y avait beaucoup trop de téléchargements inutiles, et l’installation exigeait toujours des droits administrateur
    • (Connexion à forte latence… l’expression “high-latency” serait probablement plus juste)
  • En regardant le script, on voit
    curl -L -o msvcup.zip https://github.com/marler8997/msvcup/releases/...
    comme ça
    Mais je suis réticent à l’idée d’installer, sans vérification de hash, un exécutable provenant d’un compte GitHub d’origine inconnue
    La situation sur Windows n’est pas aussi mauvaise que ce que dit le billet de blog, mais ça ressemble plus à un autre script d’installation risqué qu’à une vraie solution

    • Pas besoin d’installer un exécutable à tout prix
      Il suffit de lire et d’examiner le script soi-même
      La méthode curl|sh consiste de toute façon à télécharger du code source ; ce n’est pas plus risqué que d’installer directement un exécutable
    • Jonathan Marler est connu pour ses présentations autour de Zig et son travail sur les bindings de l’API win32
      Son projet zigwin32 est même référencé dans le win32metadata de Microsoft
      C’est donc quelqu’un de confiance
  • Cet article donne l’impression d’avoir été écrit par une IA
    Des structures comme “it’s not just X, but Y” ou ces listes à emphase font très style LLM
    Je me demande à quel point le projet a réellement été produit par un humain

    • Ton pseudo “its_notjack” est assez drôle
    • Moi aussi j’ai eu des doutes au début
      La structure en liste paraissait maladroite et peu cohérente
      Mais si c’est bien écrit par un LLM, c’est peut-être aussi la preuve que la qualité des LLM a beaucoup progressé ces derniers temps
      Ça peut aussi venir d’un outil comme Grammarly
    • Peut-être que les gens sont en train d’imiter le style des LLM
      Parce que c’est plus confortable à lire pour le public
    • Des expressions comme “The key insight is…” ont un style que Claude emploie souvent, d’où cette impression
      J’aimerais simplement qu’on indique franchement si de l’IA a été utilisée
  • msvcup est vraiment rafraîchissant comme tentative d’améliorer la DX de Visual Studio
    J’aurais aimé avoir ça à l’époque de mes études
    En alternative, on peut aussi installer Build Tools dans un conteneur

  • Il suffit de l’installer avec winget
    winget install --id Microsoft.VisualStudio.2022.BuildTools
    Si vous avez besoin des fonctionnalités WinRT :
    winget install --id Microsoft.WindowsSDK.10.0.18362
    winget install --id Microsoft.WindowsAppRuntime.1.8

    • J’ai déjà pris en charge ces packages auparavant, et ce n’est pas si simple
      Il faut aussi préciser quels workloads installer, et sans connaître le projet il y a beaucoup d’essais-erreurs
      .vsconfig aide un peu, mais ce n’est pas parfait
  • J’aimerais que les projets open source n’empêchent pas la prise en charge de MinGW
    C’est un bon compilateur qui fonctionne bien sans DLL supplémentaires
    Je ne comprends pas pourquoi l’open source forcerait un compilateur propriétaire

    • MinGW n’est pas compatible avec certaines bibliothèques spécifiques à Windows (WIL)
      WIL est une bibliothèque souvent utilisée par les développeurs kernel, qui améliore fortement la sûreté du code et le confort de développement
    • Quand il faut lier des bibliothèques MSVC construites à l’extérieur, MinGW n’est pas une option
      Par exemple, le SDK Steamworks se compile avec MinGW mais plante au runtime
    • J’aimerais aussi voir davantage de support pour MinGW
      C’est dommage que ce billet de blog ne le mentionne même pas
    • Je n’aime pas MinGW
      La combinaison Clang + MSVC STL + WinSDK est bien plus propre
  • Ou alors on peut faire simplement comme ça
    "winget install Microsoft.VisualStudio.BuildTools"
    "winget install Microsoft.WindowsSDK.10.0.26100"

    • C’est ce que je fais toujours aussi
      Je préfère cette approche pour son rapport effort/stabilité
    • Mais ce type d’installation est global au système, donc c’est gênant quand un projet a besoin d’une autre version
      J’aimerais qu’il existe pour tous les langages un outil d’isolation de versions comme Python uv
    • Une bonne partie des critiques sur Windows remontent à il y a 20 ans
      On peut critiquer Bing, Copilot ou la pub, mais dans la plupart des cas, on peut les désactiver
 
click 2026-02-16

J’ai eu le même problème en compilant aussi sur Ubuntu 24.04 puis en essayant d’exécuter sur CentOS 6 ou 7 : un problème de dépendance à glibc s’est produit.
Le fait que la version de glibc de l’environnement de compilation soit reprise par défaut semble être le problème.

 
penza1 2026-02-18

On ne peut pas vraiment éviter une dépendance à glibc..
Contrairement aux langages de script comme Python/JV/.NET/JS, une dépendance à glibc est inévitable.
C’est aussi l’une des raisons pour lesquelles des bibliothèques sont distribuées pour chaque distribution.
Au minimum, si c’est compilé avec glibc, cela peut tout à fait s’exécuter sur d’autres distributions de version supérieure s’il n’y a pas de dépendances particulières.

 
geekbini 2026-02-16

Avec WSL2 et Ubuntu, Windows est effectivement devenu bien plus agréable pour développer. Mais si vous êtes dans un environnement Visual Studio plutôt que VS Code, ça semble au moins pouvoir aider un peu. Par contre, on dirait que ça ne fonctionne pas directement sous Windows avec un gestionnaire de paquets comme choco ou winget.

 
click 2026-02-16

Les gestionnaires de paquets semblent en effet se concentrer davantage sur le résultat final que sur le SDK.
La plupart des développeurs configurent généralement des éléments comme vcredist pour qu’ils soient installés dans le script du gestionnaire de paquets.
Mais pour l’environnement de build, c’est un peu différent.