- Windows yerel geliştirme, Visual Studio kurulum bağımlılığı nedeniyle karmaşık ve verimsiz
- Onlarca GB kurulum boyutu, şeffaf olmayan bileşen yönetimi, sürüm uyumsuzluğu sorunları gibi etkenler geliştirici üretkenliğini düşürüyor
- Bunu çözmek için hafif bir CLI aracı olan
msvcup geliştirildi; MSVC toolchain’i ve Windows SDK’yı sürüme göre, izole biçimde otomatik kurabiliyor
msvcup, JSON manifest ayrıştırma, otomatik ortam yapılandırması (autoenv), lock file desteği gibi özelliklerle yeniden üretilebilir bir derleme ortamı sunuyor
- Bu yaklaşım, Visual Studio Installer’a bağlı kalmadan betik tabanlı tam otomasyonlu bir derleme sistemi kurulmasını mümkün kılıyor
Windows yerel geliştirmenin sorunları
- Visual Studio kurulmasını gerektiren mevcut yaklaşım, karmaşık kurulum süreci ve kararsız bağımlılık yönetimi nedeniyle geliştiricilere yük getiriyor
- “Desktop development with C++” workload’u, belirli SDK sürümleri gibi ayrıntılı seçimler gerekiyor; yanlış seçim yapılırsa derleme başarısız olabiliyor
- Kurulum boyutu 50GB’a kadar çıkıyor ve kaldırıldıktan sonra bile registry kalıntıları ve arka plan servisleri bırakabiliyor
- Linux’ta toolchain tek satırlık bir paket yöneticisi komutuyla kurulabilirken, Windows’ta binlerce bileşenin elle seçilmesi gerekiyor
- Visual Studio, editör, derleyici ve SDK’nın birbirine dolandığı tekil bir yapı olduğundan sürüm yönetimi ve ortamın yeniden üretimi zorlaşıyor
- Sonuç olarak “benim bilgisayarımda çalışıyor” türü tutarsızlıklar sık yaşanıyor; bu da yerel geliştirmenin giriş bariyeri haline geliyor
msvcup: yeni bir yaklaşım
- msvcup, Visual Studio kurmadan MSVC toolchain’i ve Windows SDK’yı doğrudan indirip kuran açık kaynaklı bir CLI aracı
- Her sürüm
C:\msvcup\ altında izole dizinlere kuruluyor; böylece sürümler çakışmadan paralel kullanılabiliyor
- Kurulum birkaç dakika içinde tamamlanıyor ve ARM cross-compile araçları da otomatik olarak dahil ediliyor
msvcup install komutu gerekli paketleri kuruyor, autoenv komutu ise otomatik ortam dizini oluşturuyor
- Bu dizin, ortam değişkenlerini otomatik ayarlayan wrapper çalıştırılabilir dosyalar ve
toolchain.cmake dosyasını içeriyor; böylece CMake projeleri ek ayar olmadan derlenebiliyor
build.bat betiği örneğinde, msvcup ile “Hello, World” programı Visual Studio olmadan derlenebiliyor
- Windows 10 ve üzeri bir ortamda yalnızca
curl ve tar varsa çalışıyor
İç çalışma mantığı
- Microsoft’un dağıttığı Visual Studio bileşen JSON manifestlerini ayrıştırarak yalnızca gerekli paketleri belirliyor
- Derleyici, linker, header’lar, kütüphaneler gibi temel bileşenleri doğrudan Microsoft CDN’inden indiriyor
- Kurulu bileşenler lock file ile yönetiliyor; böylece aynı sürüm paketleri ekip genelinde paylaşılabiliyor
install ve autoenv komutları idempotent; yani zaten kuruluysa birkaç milisaniye içinde tamamlanıyor
Gerçek kullanım örneği
- Tuple (pair programming uygulaması),
msvcup’ı CI derleme sistemine entegre ederek Visual Studio’nun önceden kurulmuş olma gereksinimini ortadan kaldırdı
- WebRTC dahil yüzlerce C/C++ projesi aynı toolchain/SDK ile derlenebiliyor
- Hem x86_64 hem de ARM derlemelerini destekliyor
- Avantajlar
- Sürüme göre dizin kurulumu sayesinde paralel sürüm yönetimi ve kolay yeniden kurulum
- Cross-compile için otomatik destek, ek yapılandırma gerektirmiyor
- Lock file tabanlı yeniden üretilebilirlik garantisi, Microsoft tarafındaki değişiklikler anında fark edilebiliyor
- Hızlı çalışma, gereksiz yeniden kurulum yok
Sınırlamalar ve genişleme
msvcup, derleme toolchain’i odaklı tasarlandığı için Visual Studio IDE’sinin kendisinin gerektiği durumlarda resmî kurulum hâlâ gerekli
- Ancak yerel geliştirme iş akışlarının büyük bölümünde IDE olmadan da tam bir derleme ortamı sunuyor
- Örnek olarak verilen raylib derleme betiği, Visual Studio olmadan da SDK ve toolchain’i otomatik kurup projeyi derliyor
- GUI olmadan, yalnızca komut satırıyla tam otomatik bir derleme süreci yürütüyor
Sonuç
msvcup, Visual Studio Installer’ın karmaşıklığını ortadan kaldırarak sürüm yönetilebilir, hafif bir yerel derleme ortamı sunuyor
- Bu yaklaşım, Windows yerel geliştirmeyi yeniden üretilebilir ve otomasyonlu bir yapıya dönüştürüyor; geliştiricilerin IDE bağımlılığından kurtulmasını sağlıyor
- Repo : https://github.com/marler8997/msvcup
5 yorum
Hacker News görüşleri
Bu, benim yaptığım şeyden daha karmaşık görünüyor
Sadece LTSC Visual Studio Build Tools kurulup
cl yourprogram.c /link user32.lib advapi32.lib ...gibi bir komut bir cmd dosyasına konabilirBen vim ile düzenleme yapıyor ve uzun zamandır çeşitli yardımcı araçları bu şekilde derliyordum
Visual Studio toolchain'inde LTSC ve kararlı sürümler var ama çoğu kişi bunun farkında değil
Ekip ortamında, resmî sürüm geçmişi belgesindeki sabit sürümleri kullanmak daha iyi
Tıpkı eskiden şirket genelinde herkesin aynı toolchain sürümünü sabitlediği zamanlardaki gibi
Bu yüzden öğrenciler ya da hobi amaçlı geliştirme yapanlar çoğu zaman bunu bilmiyor
Buna karşılık şirkette VS kullananların çoğu bunu biliyor
Ne zaman çıkacağını bilen var mı?
Linux tarafındaki toolchain de bağımlılık cehenneminden muaf değil
npm paketi kurarken cmake gerekebiliyor, glibc sürüm çakışmaları çıkabiliyor ya da en yeni boost'u isteyen C++ projeleri olabiliyor…
Heartbleed döneminde openSSL yaması yapmak zorunda kaldığımı da hatırlıyorum
Visual Studio da zahmetli ama asıl cehennem .NET Framework sürüm karmaşası
Her Windows sürümünde kurulu .NET farklı oluyor ve uygulamanın hangi runtime ile çalışacağı da belirsiz kalabiliyor
Bu yüzden büyük ölçekli dağıtımlarda doğru runtime ile başlatmak için C++ ile .NET sürümü kontrol eden bir shim yazmak gerekiyor
glibc ekibi geriye ve ileriye dönük uyumluluk konusunda çok katı
Şu LWN yazısında uyumluluğun en son ne zaman bozulduğu görülebilir
Sorun, insanların glibc sürümünü yanlış şekilde sabitlemesi
glibc için sürüm sabitleme yapılmamalı
GCC birkaç kez uyumluluğu bozdu ama bunun çoğu C++ standardındaki değişikliklerden kaynaklanıyordu
.NET Framework zaten legacy sayılıyor ve .NET 5 sonrasında bu tür sorunlar yok
Yine de hâlâ eski sürümlere bağımlı çok uygulama var
Sorunu çözdüler ama aynı zamanda yeni bir karmaşıklık yarattılar
Bazen insan sadece sistem paket yöneticisi günlerine dönmek istiyor
Gömülü sistemlerde rust + probe-rs tarafı çok daha rahat
Visual Studio yükleyicisi, komut satırı parametreleriyle etkileşimsiz kurulumu destekliyor
Resmî belgede anlatılıyor
2018'de internetin yavaş olduğu bir uydu ağı ortamında çalışırken çevrimdışı kurulum paketi hazırlamak zorunda kaldığım için bu yöntemi kullanmıştım
Betiğe baktım,
curl -L -o msvcup.zip https://github.com/marler8997/msvcup/releases/...şeklinde bir satır var
Ama kaynağı belirsiz bir GitHub hesabından gelen çalıştırılabilir dosyayı hash doğrulaması olmadan kurmak istemem
Windows durumu blog yazısında anlatıldığı kadar kötü olmasa da bu, çözümden çok bir başka riskli kurulum betiği gibi duruyor
Betiği kendiniz okuyup incelemeniz yeterli
curl|shyaklaşımı da sonuçta kaynak kodu indirmekten ibaret; çalıştırılabilir dosyayı doğrudan kurmaktan daha riskli değilOnun projesi zigwin32, Microsoft'un win32metadata deposunda da bağlantılanıyor
Yani güvenilir biri
Bu yazı, yapay zeka yazmış gibi hissettiriyor
“it’s not just X, but Y” gibi cümle yapıları ve vurgulu listeler tipik LLM tarzı
Projenin ne kadarının insan eliyle yapıldığını merak ediyorum
Liste yapısı garipti ve tutarlılığı zayıftı
Ama eğer bir LLM yazdıysa bu, bugünkü LLM'lerin kalitesinin epey yükseldiğine dair bir işaret de olabilir
Grammarly gibi araçların etkisi de olabilir
Çünkü bu tarz okuyucu için daha kolay okunuyor
Keşke yapay zeka kullanılıp kullanılmadığı açıkça belirtilse
Visual Studio DX'ini iyileştirmeye yönelik bir deneme olarak msvcup gerçekten taze bir fikir
Keşke üniversite yıllarımda böyle bir şey olsaydı
Alternatif olarak container içine Build Tools kurma yaklaşımı da var
Doğrudan winget ile kurulabilir
winget install --id Microsoft.VisualStudio.2022.BuildToolsWinRT özelliklerine ihtiyaç varsa
winget install --id Microsoft.WindowsSDK.10.0.18362winget install --id Microsoft.WindowsAppRuntime.1.8de eklenebilirHangi workload'ların kurulacağını da belirtmek gerekiyor ve projeyi bilmiyorsanız çok deneme-yanılma yaşanıyor
.vsconfigbiraz yardımcı oluyor ama kusursuz değilKeşke açık kaynak projeleri MinGW desteğini engellemese
Ek DLL'lere gerek kalmadan gayet iyi çalışan bir derleyici
Açık kaynak dünyasının neden ille de tekelci bir derleyiciyi dayattığını anlamıyorum
WIL, çekirdek geliştiricilerinin sık kullandığı ve kod güvenliğiyle kullanım kolaylığını ciddi biçimde artıran bir kütüphane
Örneğin Steamworks SDK, MinGW ile derlenebiliyor ama runtime'da çöküyor
Bu blog yazısında adının bile geçmemesi üzücü
Clang + MSVC STL + WinSDK kombinasyonu çok daha temiz
Ya da daha da basit şekilde şöyle yapılabilir
"winget install Microsoft.VisualStudio.BuildTools""winget install Microsoft.WindowsSDK.10.0.26100"Harcanan çabaya göre sağladığı istikrar iyi olduğu için bunu tercih ediyorum
Keşke tüm diller için Python uv benzeri sürüm yalıtım araçları olsa
Bing, Copilot, reklamlar gibi şeyler eleştirilebilir ama bunların çoğu devre dışı bırakılabiliyor
Ben de Ubuntu 24.04'te derleyip CentOS 6 mı 7'de mi çalıştırmaya kalkınca
glibcbağımlılığı sorunu yaşamıştım.Sorun, varsayılan olarak derleme ortamının
glibcsürümünü alıyor gibi görünüyor.glibc'ye bağımlı olmak kaçınılmaz..
python/jv/.net/js gibi script dilleri değilse, glibc bağımlılığı olması kaçınılmazdır
Her dağıtıma göre kütüphane dağıtılmasının nedeni de budur
En azından minimum glibc ile derlenen bir şeyin, özel bir bağımlılığı yoksa, diğer daha üst sürüm dağıtımlarda da rahatlıkla çalışabilmesi gerekir
WSL2’de Ubuntu ile Windows üzerinde geliştirme yapmak da epey daha iyi hale geldi. Ama ortam VSCode değil de Visual Studio ise, bunun en azından bir miktar faydalı olabileceği anlaşılıyor. Yalnız
chocoya dawingetgibi paket yöneticileriyle Windows’ta yapılamıyor galiba.Paket yöneticileri, SDK'den ziyade nihai çıktıya odaklanıyor gibi görünüyor
vcredistgibi şeyleri çoğu geliştirici genelde paket yöneticisi betiği içinde kurulacak şekilde ayarlıyorAma build ortamı biraz farklı bir konu